度々お世話になります。
ページ内「Links」の項目を表示しているとき、もしくはページ最下部までスクロールしたとき、メニューのLinksのブロックのみ色が変わる
というコードを書いたのですが、一部の環境でしか動作しませんでした。
【現象の詳細】
想定では、最下部までスクロールすると、メニュー内のLinksのブロックの色が濃いビビッドピンクになるはずでした。
しかし、スクロールしただけでは色が変わらず、メニューのLinksをクリックして飛んだ際にだけ色が変わる(もしくはそれでも変わらない)という現象が一部の環境で起きています。
【実際のサイト】
こちら になります。
【コード】
JS
1$(document).ready(function(){ 2 3 $(window).on('scroll',function(){ 4 5 let now = $(window).scrollTop(); 6 7 $('#menublock4 .current, #menublock4 .sidemenu, #menublock4 .menubar').each(function() { 8 let posTop4 = $('#links').offset().top; 9 let posBottom4 = $('#links').offset().top + $('#links').outerHeight(); 10 11 let docHeight = $(document).innerHeight(), 12 windowHeight = $(window).innerHeight(), 13 pageBottom = docHeight - windowHeight; 14 15 let works = $('#menublock3 .current, #menublock3 .sidemenu, #menublock3 .menubar') 16 17 if(posTop4 < now && now <= posBottom4) { 18 $(this).addClass('vivid'); 19 } if(pageBottom <= now) { 20 $(this).addClass('vivid'); 21 works.removeClass('vivid'); 22 } else { 23 $(this).removeClass('vivid'); 24 } 25 }); 26 27 }); 28 29});
【動作する環境】
Chrome (Windows PCでの通常の閲覧)
Edge (Windows PCでの通常の閲覧)
【動作しない環境】 ※()内はChromeやEdgeの開発者ツール上での動作確認
Firefox (Windows PCでの通常の閲覧)
Pixel3a Chrome
dtab d-41a Chrome
iPhone SE 第2世代 Chrome
(Pixel5)
(Galaxy S8+)
(Galaxy S20 Ultra)
【試したこと】
スクロール量の取得方法をdocument.body.scrollTopとdocument.documentElement.scrollTopに変える
→Edge、Chromeでも動作しなくなる
スクロール量の取得方法を$(window).scrollTop()とdocument.body.scrollTopとdocument.documentElement.scrollTopの併用にする
→変化なし
狙い通りに色が変わるようなプログラムは作れるものなのでしょうか?
また、可能な場合はどのような方法で行えば良いのでしょう?
当方JavaScriptの学習を始めたばかりで、至らぬ点があるかもしれません。申し訳ございません。
不足している情報などございましたらお申し付けください。よろしくお願いいたします。
あなたの回答
tips
プレビュー