質問編集履歴

6

修正

2020/11/21 12:36

投稿

erp
erp

スコア46

test CHANGED
File without changes
test CHANGED
@@ -306,325 +306,223 @@
306
306
 
307
307
  ```
308
308
 
309
- ```js
310
-
311
- var height=window.innerHeight;
312
-
313
- document.documentElement.style.setProperty( '--vh', height/100 + 'px');
314
-
315
-
316
-
317
- $( 'body' ).wrapInner( '<div class="scroll-content mCustomScrollbar" data-mcs-theme="minimal-dark"></div>' );
318
-
319
- (function($){
320
-
321
- $("body").mCustomScrollbar('scrollTo','0', {
322
-
323
- theme:"minimal-dark",
324
-
325
- mouseWheelPixels: "180",
326
-
327
- scrollInertia:1000,
309
+
310
+
311
+ ### 試したこと
312
+
313
+
314
+
315
+ ```javascript
316
+
317
+ // custom content scroller
318
+
319
+ $(document).ready(function () {
320
+
321
+ var header = $('header'),
322
+
323
+ h_offset = header.offset().top,
324
+
325
+ sH = $('.swiper-container').innerHeight();// 高さ
326
+
327
+ $(".scroll-content").mCustomScrollbar({
328
+
329
+ mouseWheelPixels: 180,
330
+
331
+ theme: "minimal-dark",
332
+
333
+ callbacks: {
334
+
335
+ whileScrolling: function () {
336
+
337
+ var scroller = $(".mCSB_container"),
338
+
339
+ scrollerBox = scroller.closest(".mCustomScrollBox"),
340
+
341
+ scrollerTop = scroller.position().top,
342
+
343
+ boxHeight = scrollerBox.innerHeight(),
344
+
345
+ scrollY = $('.scroll-content').scrollTop(),
346
+
347
+ windowH = window.innerHeight;
348
+
349
+ $('.animation').each(function() {
350
+
351
+ //要素の位置(上端)を取得
352
+
353
+ var thisPosition = $(this).offset().top;
354
+
355
+ //要素の高さを取得
356
+
357
+ var thisHeight = $(this).height();
358
+
359
+ //要素が画面上に表示されているときにclass="effect"をつける
360
+
361
+ if (thisPosition <= scrollY + windowH - 150 && thisPosition + thisHeight >= scrollY) {
362
+
363
+ $(this).addClass('effect');
364
+
365
+ } else {
366
+
367
+ $(this).removeClass('effect');
368
+
369
+ }
370
+
371
+ });
372
+
373
+ $('.animation-2').each(function() {
374
+
375
+ //要素の位置(上端)を取得
376
+
377
+ var thisPosition = $(this).offset().top;
378
+
379
+ //要素の高さを取得
380
+
381
+ var thisHeight = $(this).height();
382
+
383
+ //要素が画面上に表示されているときにclass="effect"をつける
384
+
385
+ if (thisPosition <= scrollY + windowH - 150 && thisPosition + thisHeight >= scrollY) {
386
+
387
+ $(this).addClass('effect');
388
+
389
+ }
390
+
391
+ });
392
+
393
+ $('.opacity-1').each(function() {
394
+
395
+ var thisPosition = $(this).offset().top;
396
+
397
+ var thisHeight = $(this).height();
398
+
399
+ if (thisPosition <= scrollY + windowH - 150 && thisPosition + thisHeight >= scrollY) {
400
+
401
+ $(this).addClass('effect');
402
+
403
+ $(this).delay(500).queue(function() {
404
+
405
+ $(this).addClass('effect-2').dequeue()
406
+
407
+ });
408
+
409
+ }
410
+
411
+ });
412
+
413
+ $('.opacity-2').each(function() {
414
+
415
+ var thisPosition = $(this).offset().top;
416
+
417
+ var thisHeight = $(this).height();
418
+
419
+ if (thisPosition <= scrollY + windowH - 150 && thisPosition + thisHeight >= scrollY) {
420
+
421
+ $(this).delay(1000).queue(function() {
422
+
423
+ $(this).addClass('effect').dequeue()
424
+
425
+ });
426
+
427
+ $(this).delay(1500).queue(function() {
428
+
429
+ $(this).addClass('effect-2').dequeue()
430
+
431
+ });
432
+
433
+ }
434
+
435
+ });
436
+
437
+ var topbutton = $('#page-top'),
438
+
439
+ tb_offset = topbutton.offset().top;
440
+
441
+ if ( scrollerTop < -400 ) {
442
+
443
+ topbutton.fadeIn();
444
+
445
+ } else {
446
+
447
+ topbutton.fadeOut();
448
+
449
+ };
450
+
451
+ if ( scrollerTop > -1 * sH ) {
452
+
453
+ header.removeClass('m_fixed');
454
+
455
+ } else {
456
+
457
+ header.addClass('m_fixed');
458
+
459
+ };
460
+
461
+ }
462
+
463
+ }
328
464
 
329
465
  });
330
466
 
467
+ // pagetop button
468
+
469
+ $("#page-top").click(function () {
470
+
471
+ $(".scroll-content").mCustomScrollbar("scrollTo", "top", {
472
+
331
- })(jQuery);
473
+ callbacks: false,
332
-
333
-
334
-
474
+
335
- $(function () {
475
+ scrollInertia: 1000
336
-
337
- var $header = $('header');
476
+
338
-
339
- var navPos = $header.offset().top; // メニューの位置
340
-
341
- sH = $('.swiper-container').innerHeight(); // 高さ
342
-
343
- $( '.scroll-content' ).on( 'scroll', function() { // 元々 $( window ).on( 'scroll', function() { だったのを変更したがうまくいかない
344
-
345
- if ( $( this ).scrollTop() < sH ) {
346
-
347
- $header.removeClass( 'm_fixed' );
348
-
349
- } else {
350
-
351
- $header.addClass( 'm_fixed' );
352
-
353
- }
477
+ });
354
478
 
355
479
  });
356
480
 
481
+ // smooth scroll
482
+
483
+ $('a[href^="#"]').click(function() {
484
+
485
+ var href = $(this).attr("href"),
486
+
487
+ target = $(href == "#" || href == "" ? 'html' : href)
488
+
489
+ $(".scroll-content").mCustomScrollbar("scrollTo", target , {
490
+
491
+ callbacks: false,
492
+
493
+ scrollInertia: 1000,
494
+
495
+ callbacks: {
496
+
497
+ whileScrolling: function () {
498
+
499
+ var scroller = $(".mCSB_container"),
500
+
501
+ scrollerTop = scroller.position().top;
502
+
503
+ if ( scrollerTop > -1 * sH ) {
504
+
505
+ header.removeClass('m_fixed');
506
+
507
+ } else {
508
+
509
+ header.addClass('m_fixed');
510
+
511
+ };
512
+
513
+ }
514
+
515
+ }
516
+
517
+ });
518
+
519
+ });
520
+
357
521
  });
358
522
 
359
-
360
-
361
- // smooth scroll
362
-
363
- $(function() {
364
-
365
- $('a[href^="#"]').click(function() {
366
-
367
- var speed = 800;
368
-
369
- var href = $(this).attr("href");
370
-
371
- var target = $(href == "#" || href == "" ? 'html' : href);
372
-
373
- var position = target.offset().top;
374
-
375
- $('body, html').animate({
376
-
377
- scrollTop: position - 250
378
-
379
- }, speed, 'swing');
380
-
381
- return false;
382
-
383
- });
384
-
385
- }); // 要素内のスムーズスクロールはどうすればいいか分からない
386
-
387
-
388
-
389
- // pagetop button
390
-
391
- $(function() {
392
-
393
- var topBtn = $('#page-top');
394
-
395
- topBtn.hide();
396
-
397
- $(".scroll-content").scroll(function() {
398
-
399
- if ($(".scroll-content").scrollTop() > 300) { // $(window) を変更したがうまくいかない
400
-
401
- topBtn.fadeIn();
402
-
403
- } else {
404
-
405
- topBtn.fadeOut();
406
-
407
- }
408
-
409
- });
410
-
411
- topBtn.click(function() {
412
-
413
- $('html').animate({
414
-
415
- scrollTop: 0
416
-
417
- }, 500);
418
-
419
- return false;
420
-
421
- });
422
-
423
- });
424
-
425
-
426
-
427
- $('.scroll-content').scroll(function() {
428
-
429
- //ウィンドウの高さを取得
430
-
431
- var windowH = $(window).height(),
432
-
433
- devH = 667,
434
-
435
- //スクロール位置を取得,
436
-
437
- scrollY = $('.scroll-content').scrollTop();
438
-
439
- $('.opacity-1').each(function() {
440
-
441
- var thisPosition = $(this).offset().top;
442
-
443
- var thisHeight = $(this).height();
444
-
445
- if (thisPosition <= scrollY + windowH - 20 && thisPosition + thisHeight >= scrollY) {
446
-
447
- $(this).addClass('effect');
448
-
449
- $(this).delay(500).queue(function() {
450
-
451
- $(this).addClass('effect-2').dequeue()
452
-
453
- });
454
-
455
- }
456
-
457
- });
458
-
459
- $('.animation').each(function() {
460
-
461
- //要素の位置(上端)を取得
462
-
463
- var thisPosition = $(this).offset().top;
464
-
465
- //要素の高さを取得
466
-
467
- var thisHeight = $(this).height();
468
-
469
- //要素が画面上に表示されているときにclass="effect"をつける
470
-
471
- if (thisPosition <= scrollY + windowH - 50 && thisPosition + thisHeight >= scrollY) {
472
-
473
- $(this).addClass('effect');
474
-
475
- } else {
476
-
477
- $(this).removeClass('effect');
478
-
479
- }
480
-
481
- });
482
-
483
- });
484
-
485
523
  ```
486
524
 
487
-
488
-
489
- ### 試したこと
490
-
491
-
492
-
493
- ```javascript
494
-
495
- $(function(){
496
-
497
- $("a[href^='#']").click(function(){
498
-
499
-
500
-
501
- //data-box属性がない場合は通常のスムーズスクロール
502
-
503
- if(!$(this).data("box")){
504
-
505
- $("body,html").stop().animate({
506
-
507
- scrollTop:$($(this).attr("href")).offset().top
508
-
509
- });
510
-
511
-
512
-
513
- //data-box属性がある場合はdata-box内をスムーズスクロール
514
-
515
- }else{
516
-
517
- var $box = $($(this).data("box"));
518
-
519
- var $tareget = $($(this).attr("href"));
520
-
521
- var dist = $tareget.position().top - $box.position().top;
522
-
523
- $box.stop().animate({
524
-
525
- scrollTop: $box.scrollTop() + dist
526
-
527
- });
528
-
529
- }
530
-
531
- return false;
532
-
533
- });
534
-
535
- });
536
-
537
- ```
538
-
539
- ```HTML
540
-
541
- <ul>
542
-
543
- <li><a data-box=".scroll-content" href="#one">menu</a>
544
-
545
- <li><a data-box=".scroll-content" href="#two">menu</a>
546
-
547
- <li><a data-box=".scroll-content" href="#three">menu</a>
548
-
549
- </ul>
550
-
551
- ```
552
-
553
- とやったがうまくスムーズスクロールできなった
525
+ ヘッダーの高さを考慮してスムーズスクロールさせるにはどうすればいい分かりません……
554
-
555
- ```js
556
-
557
- $(document).ready(function () {
558
-
559
- var filledHeight = 0;
560
-
561
- $(".scroll-content").height( $(window).height() - filledHeight);
562
-
563
- $(".scroll-content").mCustomScrollbar({
564
-
565
- mouseWheelPixels: 180,
566
-
567
- theme: "minimal-dark",
568
-
569
- callbacks: {
570
-
571
- whileScrolling: function () {
572
-
573
- var scroller = $(".mCSB_container");
574
-
575
- var scrollerBox = scroller.closest(".mCustomScrollBox");
576
-
577
- var scrollerTop = scroller.position().top;
578
-
579
- var boxHeight = scrollerBox.innerHeight();
580
-
581
- var $this = $(".scroll-content img");
582
-
583
- var offset = $this.position().top;
584
-
585
- var length = $this.length;
586
-
587
- var i = 0;
588
-
589
- var ani = $("animation");
590
-
591
- var halfwindow = window.innerHeight / 2;
592
-
593
- var an_offset = ani.position().top + halfwindow;
594
-
595
- if (an_offset < boxHeight - scrollerTop) {
596
-
597
- ani.addClass('effect');
598
-
599
- } else {
600
-
601
- ani.removeClass('effect');
602
-
603
- };
604
-
605
- }
606
-
607
- }
608
-
609
- });
610
-
611
- $("#page-top").click(function () {
612
-
613
- $(".scroll-content").mCustomScrollbar("scrollTo", "top", {
614
-
615
- callbacks: false,
616
-
617
- scrollInertia: 1000
618
-
619
- });
620
-
621
- });
622
-
623
- });
624
-
625
- ```
626
-
627
- こうやるとclassを付与した一番上のコンテンツが表示されるタイミングで同じclass名のものが表示されてしまうんですがなんででしょうか......。
628
526
 
629
527
  ### 補足情報(FW/ツールのバージョンなど)
630
528
 

5

修正

2020/11/21 12:36

投稿

erp
erp

スコア46

test CHANGED
File without changes
test CHANGED
@@ -554,55 +554,77 @@
554
554
 
555
555
  ```js
556
556
 
557
- (function ($) {
558
-
559
- $(window).on("load", function () {
557
+ $(document).ready(function () {
558
+
560
-
559
+ var filledHeight = 0;
560
+
561
+ $(".scroll-content").height( $(window).height() - filledHeight);
562
+
561
- $(".scroll-content").mCustomScrollbar('scrollTo', '0', {
563
+ $(".scroll-content").mCustomScrollbar({
564
+
562
-
565
+ mouseWheelPixels: 180,
566
+
563
- theme: "minimal-dark",
567
+ theme: "minimal-dark",
564
-
565
- mouseWheelPixels: "180",
568
+
566
-
567
- callbacks: {
569
+ callbacks: {
568
-
570
+
569
- whileScrolling: function() {
571
+ whileScrolling: function () {
572
+
570
-
573
+ var scroller = $(".mCSB_container");
574
+
575
+ var scrollerBox = scroller.closest(".mCustomScrollBox");
576
+
577
+ var scrollerTop = scroller.position().top;
578
+
579
+ var boxHeight = scrollerBox.innerHeight();
580
+
581
+ var $this = $(".scroll-content img");
582
+
583
+ var offset = $this.position().top;
584
+
585
+ var length = $this.length;
586
+
587
+ var i = 0;
588
+
589
+ var ani = $("animation");
590
+
591
+ var halfwindow = window.innerHeight / 2;
592
+
593
+ var an_offset = ani.position().top + halfwindow;
594
+
571
- if (this.mcs.top >= 300) {
595
+ if (an_offset < boxHeight - scrollerTop) {
572
-
596
+
573
- $('#page-top').fadeIn();
597
+ ani.addClass('effect');
574
-
598
+
575
- } else {
599
+ } else {
576
-
600
+
577
- $('#page-top').fadeOut();
601
+ ani.removeClass('effect');
578
-
579
- } // 効かない、なぜ....
602
+
580
-
581
- }
603
+ };
582
604
 
583
605
  }
584
606
 
607
+ }
608
+
609
+ });
610
+
611
+ $("#page-top").click(function () {
612
+
613
+ $(".scroll-content").mCustomScrollbar("scrollTo", "top", {
614
+
615
+ callbacks: false,
616
+
617
+ scrollInertia: 1000
618
+
585
619
  });
586
620
 
587
- $("#page-top").click(function () {
588
-
589
- $(".scroll-content").mCustomScrollbar("scrollTo", "top", {
590
-
591
- callbacks: false,
592
-
593
- scrollInertia: 1000
594
-
595
- });
621
+ });
596
-
622
+
597
- });
623
+ });
598
-
599
- });
624
+
600
-
601
- })(jQuery);
602
-
603
- ```
625
+ ```
604
-
626
+
605
- とりあえずれでページトップボタンは機能すようになったが、スクロールで現れるのは実装きないでなんでなんでしょうか……
627
+ うやとclassを付与し一番上のコンテンツ表示されるタイミング同じclass名ものが表示されてしまうんですがなんでしょうか......
606
628
 
607
629
  ### 補足情報(FW/ツールのバージョンなど)
608
630
 

4

修正

2020/11/21 07:37

投稿

erp
erp

スコア46

test CHANGED
File without changes
test CHANGED
@@ -552,7 +552,57 @@
552
552
 
553
553
  とやったがうまくスムーズスクロールできなかった。
554
554
 
555
-
555
+ ```js
556
+
557
+ (function ($) {
558
+
559
+ $(window).on("load", function () {
560
+
561
+ $(".scroll-content").mCustomScrollbar('scrollTo', '0', {
562
+
563
+ theme: "minimal-dark",
564
+
565
+ mouseWheelPixels: "180",
566
+
567
+ callbacks: {
568
+
569
+ whileScrolling: function() {
570
+
571
+ if (this.mcs.top >= 300) {
572
+
573
+ $('#page-top').fadeIn();
574
+
575
+ } else {
576
+
577
+ $('#page-top').fadeOut();
578
+
579
+ } // 効かない、なぜ....
580
+
581
+ }
582
+
583
+ }
584
+
585
+ });
586
+
587
+ $("#page-top").click(function () {
588
+
589
+ $(".scroll-content").mCustomScrollbar("scrollTo", "top", {
590
+
591
+ callbacks: false,
592
+
593
+ scrollInertia: 1000
594
+
595
+ });
596
+
597
+ });
598
+
599
+ });
600
+
601
+ })(jQuery);
602
+
603
+ ```
604
+
605
+ とりあえずこれでページトップボタンは機能するようになったが、スクロールで現れるのは実装できないのでなんでなんでしょうか……。
556
606
 
557
607
  ### 補足情報(FW/ツールのバージョンなど)
558
608
 

3

2020/11/21 04:43

投稿

erp
erp

スコア46

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ### 発生している問題・エラーメッセージ
10
10
 
11
- カスタムスクロールバーを導入して「body」内をスクロールさせることにした。すると今までできていたスクロールイベント(メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示)が発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
11
+ カスタムスクロールバーを導入して「body」内をスクロールさせることにした。すると今までできていたスクロールイベント(メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示、スムーズスクロール)が発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
12
12
 
13
13
 
14
14
 
@@ -32,7 +32,7 @@
32
32
 
33
33
  導入したのはjQuery依存のカスタムスクロールバーです。(https://github.com/malihu/malihu-custom-scrollbar-plugin)
34
34
 
35
- やりたいのは、メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示することです。
35
+ やりたいのは、メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示すること、スムーズスクロールです。
36
36
 
37
37
  $(window).scrollTop() だとスクロールイベントが発火しないのでコンテンツ名を入れたがうまく動かなかった。どうしてもこのプラグインを使いたいので助けてほしいです。
38
38
 

2

2020/11/20 13:09

投稿

erp
erp

スコア46

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ### 発生している問題・エラーメッセージ
10
10
 
11
- カスタムスクロールバーを導入して「body」内をスクロールさせることにした。すると今までできていたスクロールイベントが発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
11
+ カスタムスクロールバーを導入して「body」内をスクロールさせることにした。すると今までできていたスクロールイベント(メニューの色をスクロールで変えること、opacity:0のコンテンツをスクロールで表示)が発火しなくなったためコードを書き替えたがうまくいかない。どうすればいいかご教示していただけると助かります。
12
12
 
13
13
 
14
14
 

1

2020/11/20 13:01

投稿

erp
erp

スコア46

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