質問編集履歴

6

修正

2020/11/21 12:36

投稿

erp
erp

スコア46

title CHANGED
File without changes
body CHANGED
@@ -152,165 +152,114 @@
152
152
  visibility: visible;
153
153
  }
154
154
  ```
155
- ```js
156
- var height=window.innerHeight;
157
- document.documentElement.style.setProperty( '--vh', height/100 + 'px');
158
155
 
159
- $( 'body' ).wrapInner( '<div class="scroll-content mCustomScrollbar" data-mcs-theme="minimal-dark"></div>' );
160
- (function($){
161
- $("body").mCustomScrollbar('scrollTo','0', {
162
- theme:"minimal-dark",
163
- mouseWheelPixels: "180",
164
- scrollInertia:1000,
165
- });
166
- })(jQuery);
167
-
168
- $(function () {
169
- var $header = $('header');
170
- var navPos = $header.offset().top; // メニューの位置
171
- sH = $('.swiper-container').innerHeight(); // 高さ
172
- $( '.scroll-content' ).on( 'scroll', function() { // 元々 $( window ).on( 'scroll', function() { だったのを変更したがうまくいかない
173
- if ( $( this ).scrollTop() < sH ) {
174
- $header.removeClass( 'm_fixed' );
175
- } else {
176
- $header.addClass( 'm_fixed' );
177
- }
178
- });
179
- });
180
-
181
- // smooth scroll
182
- $(function() {
183
- $('a[href^="#"]').click(function() {
184
- var speed = 800;
185
- var href = $(this).attr("href");
186
- var target = $(href == "#" || href == "" ? 'html' : href);
187
- var position = target.offset().top;
188
- $('body, html').animate({
189
- scrollTop: position - 250
190
- }, speed, 'swing');
191
- return false;
192
- });
193
- }); // 要素内のスムーズスクロールはどうすればいいか分からない
194
-
195
- // pagetop button
196
- $(function() {
197
- var topBtn = $('#page-top');
198
- topBtn.hide();
199
- $(".scroll-content").scroll(function() {
200
- if ($(".scroll-content").scrollTop() > 300) { // $(window) を変更したがうまくいかない
201
- topBtn.fadeIn();
202
- } else {
203
- topBtn.fadeOut();
204
- }
205
- });
206
- topBtn.click(function() {
207
- $('html').animate({
208
- scrollTop: 0
209
- }, 500);
210
- return false;
211
- });
212
- });
213
-
214
- $('.scroll-content').scroll(function() {
215
- //ウィンドウの高さを取得
216
- var windowH = $(window).height(),
217
- devH = 667,
218
- //スクロール位置を取得,
219
- scrollY = $('.scroll-content').scrollTop();
220
- $('.opacity-1').each(function() {
221
- var thisPosition = $(this).offset().top;
222
- var thisHeight = $(this).height();
223
- if (thisPosition <= scrollY + windowH - 20 && thisPosition + thisHeight >= scrollY) {
224
- $(this).addClass('effect');
225
- $(this).delay(500).queue(function() {
226
- $(this).addClass('effect-2').dequeue()
227
- });
228
- }
229
- });
230
- $('.animation').each(function() {
231
- //要素の位置(上端)を取得
232
- var thisPosition = $(this).offset().top;
233
- //要素の高さを取得
234
- var thisHeight = $(this).height();
235
- //要素が画面上に表示されているときにclass="effect"をつける
236
- if (thisPosition <= scrollY + windowH - 50 && thisPosition + thisHeight >= scrollY) {
237
- $(this).addClass('effect');
238
- } else {
239
- $(this).removeClass('effect');
240
- }
241
- });
242
- });
243
- ```
244
-
245
156
  ### 試したこと
246
157
 
247
158
  ```javascript
248
- $(function(){
249
- $("a[href^='#']").click(function(){
250
-
251
- //data-box属性がない場合は通常のスムーズスクロール
159
+ // custom content scroller
252
- if(!$(this).data("box")){
253
- $("body,html").stop().animate({
254
- scrollTop:$($(this).attr("href")).offset().top
255
- });
256
-
257
- //data-box属性がある場合はdata-box内をスムーズスクロール
258
- }else{
259
- var $box = $($(this).data("box"));
260
- var $tareget = $($(this).attr("href"));
261
- var dist = $tareget.position().top - $box.position().top;
262
- $box.stop().animate({
263
- scrollTop: $box.scrollTop() + dist
264
- });
265
- }
266
- return false;
267
- });
268
- });
269
- ```
270
- ```HTML
271
- <ul>
272
- <li><a data-box=".scroll-content" href="#one">menu</a>
273
- <li><a data-box=".scroll-content" href="#two">menu</a>
274
- <li><a data-box=".scroll-content" href="#three">menu</a>
275
- </ul>
276
- ```
277
- とやったがうまくスムーズスクロールできなかった。
278
- ```js
279
160
  $(document).ready(function () {
280
- var filledHeight = 0;
161
+ var header = $('header'),
162
+ h_offset = header.offset().top,
281
- $(".scroll-content").height( $(window).height() - filledHeight);
163
+ sH = $('.swiper-container').innerHeight();// 高さ
282
164
  $(".scroll-content").mCustomScrollbar({
283
165
  mouseWheelPixels: 180,
284
166
  theme: "minimal-dark",
285
167
  callbacks: {
286
168
  whileScrolling: function () {
287
- var scroller = $(".mCSB_container");
169
+ var scroller = $(".mCSB_container"),
288
- var scrollerBox = scroller.closest(".mCustomScrollBox");
170
+ scrollerBox = scroller.closest(".mCustomScrollBox"),
289
- var scrollerTop = scroller.position().top;
171
+ scrollerTop = scroller.position().top,
290
- var boxHeight = scrollerBox.innerHeight();
172
+ boxHeight = scrollerBox.innerHeight(),
291
- var $this = $(".scroll-content img");
173
+ scrollY = $('.scroll-content').scrollTop(),
292
- var offset = $this.position().top;
293
- var length = $this.length;
294
- var i = 0;
295
- var ani = $("animation");
296
- var halfwindow = window.innerHeight / 2;
174
+ windowH = window.innerHeight;
175
+ $('.animation').each(function() {
176
+ //要素の位置(上端)を取得
297
- var an_offset = ani.position().top + halfwindow;
177
+ var thisPosition = $(this).offset().top;
178
+ //要素の高さを取得
298
- if (an_offset < boxHeight - scrollerTop) {
179
+ var thisHeight = $(this).height();
180
+ //要素が画面上に表示されているときにclass="effect"をつける
181
+ if (thisPosition <= scrollY + windowH - 150 && thisPosition + thisHeight >= scrollY) {
299
- ani.addClass('effect');
182
+ $(this).addClass('effect');
183
+ } else {
184
+ $(this).removeClass('effect');
185
+ }
186
+ });
187
+ $('.animation-2').each(function() {
188
+ //要素の位置(上端)を取得
189
+ var thisPosition = $(this).offset().top;
190
+ //要素の高さを取得
191
+ var thisHeight = $(this).height();
192
+ //要素が画面上に表示されているときにclass="effect"をつける
193
+ if (thisPosition <= scrollY + windowH - 150 && thisPosition + thisHeight >= scrollY) {
194
+ $(this).addClass('effect');
195
+ }
196
+ });
197
+ $('.opacity-1').each(function() {
198
+ var thisPosition = $(this).offset().top;
199
+ var thisHeight = $(this).height();
200
+ if (thisPosition <= scrollY + windowH - 150 && thisPosition + thisHeight >= scrollY) {
201
+ $(this).addClass('effect');
202
+ $(this).delay(500).queue(function() {
203
+ $(this).addClass('effect-2').dequeue()
204
+ });
205
+ }
206
+ });
207
+ $('.opacity-2').each(function() {
208
+ var thisPosition = $(this).offset().top;
209
+ var thisHeight = $(this).height();
210
+ if (thisPosition <= scrollY + windowH - 150 && thisPosition + thisHeight >= scrollY) {
211
+ $(this).delay(1000).queue(function() {
212
+ $(this).addClass('effect').dequeue()
213
+ });
214
+ $(this).delay(1500).queue(function() {
215
+ $(this).addClass('effect-2').dequeue()
216
+ });
217
+ }
218
+ });
219
+ var topbutton = $('#page-top'),
220
+ tb_offset = topbutton.offset().top;
221
+ if ( scrollerTop < -400 ) {
222
+ topbutton.fadeIn();
300
223
  } else {
301
- ani.removeClass('effect');
224
+ topbutton.fadeOut();
302
225
  };
226
+ if ( scrollerTop > -1 * sH ) {
227
+ header.removeClass('m_fixed');
228
+ } else {
229
+ header.addClass('m_fixed');
230
+ };
303
231
  }
304
232
  }
305
233
  });
234
+ // pagetop button
306
235
  $("#page-top").click(function () {
307
236
  $(".scroll-content").mCustomScrollbar("scrollTo", "top", {
308
237
  callbacks: false,
309
238
  scrollInertia: 1000
310
239
  });
311
240
  });
241
+ // smooth scroll
242
+ $('a[href^="#"]').click(function() {
243
+ var href = $(this).attr("href"),
244
+ target = $(href == "#" || href == "" ? 'html' : href)
245
+ $(".scroll-content").mCustomScrollbar("scrollTo", target , {
246
+ callbacks: false,
247
+ scrollInertia: 1000,
248
+ callbacks: {
249
+ whileScrolling: function () {
250
+ var scroller = $(".mCSB_container"),
251
+ scrollerTop = scroller.position().top;
252
+ if ( scrollerTop > -1 * sH ) {
253
+ header.removeClass('m_fixed');
254
+ } else {
255
+ header.addClass('m_fixed');
256
+ };
257
+ }
258
+ }
259
+ });
260
+ });
312
261
  });
313
262
  ```
314
- こうやるとclass付与た一番上のコンテンツが表示タイミングで同じclass名のものが表示されてしまんでがなんででしょう......
263
+ ヘッダーの高さ考慮てスムーズスクロールにはどうすればいい分かりません……
315
264
  ### 補足情報(FW/ツールのバージョンなど)
316
265
  Chrome 最新ver, iPhone Safari 604.1

5

修正

2020/11/21 12:36

投稿

erp
erp

スコア46

title CHANGED
File without changes
body CHANGED
@@ -276,30 +276,41 @@
276
276
  ```
277
277
  とやったがうまくスムーズスクロールできなかった。
278
278
  ```js
279
- (function ($) {
280
- $(window).on("load", function () {
279
+ $(document).ready(function () {
280
+ var filledHeight = 0;
281
+ $(".scroll-content").height( $(window).height() - filledHeight);
281
- $(".scroll-content").mCustomScrollbar('scrollTo', '0', {
282
+ $(".scroll-content").mCustomScrollbar({
283
+ mouseWheelPixels: 180,
282
- theme: "minimal-dark",
284
+ theme: "minimal-dark",
283
- mouseWheelPixels: "180",
284
- callbacks: {
285
+ callbacks: {
285
- whileScrolling: function() {
286
+ whileScrolling: function () {
287
+ var scroller = $(".mCSB_container");
288
+ var scrollerBox = scroller.closest(".mCustomScrollBox");
289
+ var scrollerTop = scroller.position().top;
290
+ var boxHeight = scrollerBox.innerHeight();
291
+ var $this = $(".scroll-content img");
292
+ var offset = $this.position().top;
293
+ var length = $this.length;
294
+ var i = 0;
295
+ var ani = $("animation");
296
+ var halfwindow = window.innerHeight / 2;
297
+ var an_offset = ani.position().top + halfwindow;
286
- if (this.mcs.top >= 300) {
298
+ if (an_offset < boxHeight - scrollerTop) {
287
- $('#page-top').fadeIn();
299
+ ani.addClass('effect');
288
- } else {
300
+ } else {
289
- $('#page-top').fadeOut();
301
+ ani.removeClass('effect');
290
- } // 効かない、なぜ....
291
- }
302
+ };
292
303
  }
304
+ }
305
+ });
306
+ $("#page-top").click(function () {
307
+ $(".scroll-content").mCustomScrollbar("scrollTo", "top", {
308
+ callbacks: false,
309
+ scrollInertia: 1000
293
310
  });
294
- $("#page-top").click(function () {
295
- $(".scroll-content").mCustomScrollbar("scrollTo", "top", {
296
- callbacks: false,
297
- scrollInertia: 1000
298
- });
299
- });
300
311
  });
301
- })(jQuery);
312
+ });
302
313
  ```
303
- とりあえずれでページトップボタンは機能するよになったが、スクロールで現れるのは実装きないでなんでなんでしょうか……
314
+ こうやるとclassを付与し一番上のコンテンツ表示されるタイミング同じclass名ものが表示されてしまうんですがなんでしょうか......
304
315
  ### 補足情報(FW/ツールのバージョンなど)
305
316
  Chrome 最新ver, iPhone Safari 604.1

4

修正

2020/11/21 07:37

投稿

erp
erp

スコア46

title CHANGED
File without changes
body CHANGED
@@ -275,6 +275,31 @@
275
275
  </ul>
276
276
  ```
277
277
  とやったがうまくスムーズスクロールできなかった。
278
-
278
+ ```js
279
+ (function ($) {
280
+ $(window).on("load", function () {
281
+ $(".scroll-content").mCustomScrollbar('scrollTo', '0', {
282
+ theme: "minimal-dark",
283
+ mouseWheelPixels: "180",
284
+ callbacks: {
285
+ whileScrolling: function() {
286
+ if (this.mcs.top >= 300) {
287
+ $('#page-top').fadeIn();
288
+ } else {
289
+ $('#page-top').fadeOut();
290
+ } // 効かない、なぜ....
291
+ }
292
+ }
293
+ });
294
+ $("#page-top").click(function () {
295
+ $(".scroll-content").mCustomScrollbar("scrollTo", "top", {
296
+ callbacks: false,
297
+ scrollInertia: 1000
298
+ });
299
+ });
300
+ });
301
+ })(jQuery);
302
+ ```
303
+ とりあえずこれでページトップボタンは機能するようになったが、スクロールで現れるのは実装できないのでなんでなんでしょうか……。
279
304
  ### 補足情報(FW/ツールのバージョンなど)
280
305
  Chrome 最新ver, iPhone Safari 604.1

3

2020/11/21 04:43

投稿

erp
erp

スコア46

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  要素内のスクロールエフェクトを実施したい。
4
4
 
5
5
  ### 発生している問題・エラーメッセージ
6
- カスタムスクロールバーを導入して「body」内をスクロールさせることにした。すると今までできていたスクロールイベント(メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示)が発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
6
+ カスタムスクロールバーを導入して「body」内をスクロールさせることにした。すると今までできていたスクロールイベント(メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示、スムーズスクロール)が発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
7
7
 
8
8
  導入したい場所:body
9
9
  bodyと.scroll-contentのCSSの高さの指定を無くした状態で本来のスクロールイベントを確認できます。
@@ -15,7 +15,7 @@
15
15
 
16
16
  ### 該当のソースコード
17
17
  導入したのはjQuery依存のカスタムスクロールバーです。(https://github.com/malihu/malihu-custom-scrollbar-plugin)
18
- やりたいのは、メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示することです。
18
+ やりたいのは、メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示すること、スムーズスクロールです。
19
19
  $(window).scrollTop() だとスクロールイベントが発火しないのでコンテンツ名を入れたがうまく動かなかった。どうしてもこのプラグインを使いたいので助けてほしいです。
20
20
 
21
21
  ```HTML

2

2020/11/20 13:09

投稿

erp
erp

スコア46

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  要素内のスクロールエフェクトを実施したい。
4
4
 
5
5
  ### 発生している問題・エラーメッセージ
6
- カスタムスクロールバーを導入して「body」内をスクロールさせることにした。すると今までできていたスクロールイベントが発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
6
+ カスタムスクロールバーを導入して「body」内をスクロールさせることにした。すると今までできていたスクロールイベント(メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示)が発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
7
7
 
8
8
  導入したい場所:body
9
9
  bodyと.scroll-contentのCSSの高さの指定を無くした状態で本来のスクロールイベントを確認できます。

1

2020/11/20 13:01

投稿

erp
erp

スコア46

title CHANGED
File without changes
body CHANGED
@@ -3,8 +3,12 @@
3
3
  要素内のスクロールエフェクトを実施したい。
4
4
 
5
5
  ### 発生している問題・エラーメッセージ
6
- カスタムスクロールバーを導入してbody内をスクロールさせることにした。すると今までできていたスクロールイベントが発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
6
+ カスタムスクロールバーを導入してbody内をスクロールさせることにした。すると今までできていたスクロールイベントが発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
7
7
 
8
+ 導入したい場所:body
9
+ bodyと.scroll-contentのCSSの高さの指定を無くした状態で本来のスクロールイベントを確認できます。
10
+ しかしそうすると、スクロールバーがbody全体の高さになってしまうため、bodyの高さを固定してbody内をスクロールさせる必要があります。
11
+
8
12
  ```
9
13
  エラーメッセージ:特になし
10
14
  ```