前提・実現したいこと
サイドナビのあるページを作成中です。
スクロールした際、サイドバーを固定して追従するようにしたのですが
要素が見えたらサイドナビも連動してセレクトしているように実装したいです。
発生している問題・エラーメッセージ
スクロールした際セレクトにはなるのですが、複数選択されているように見えてしまいます。
該当のソースコード
Javascript
1//コンテンツ領域の要素id 2var navList = [ 3 document.getElementById("a"), 4 document.getElementById("b"), 5 document.getElementById("c"), 6 document.getElementById("d"), 7 document.getElementById("e"), 8 document.getElementById("f"), 9 document.getElementById("g"), 10 document.getElementById("h"), 11 document.getElementById("i") 12] 13 14let height = window.innerHeight; 15 16function sideNav() { 17 for (i = 0; i < navList.length; i++ ){ 18 19 let rect = navList[i].getBoundingClientRect(); 20 let scrollTop = window.pageYOffset || document.documentElement.scrollTop; 21 let topPos = rect.top + scrollTop; 22 23 //サイドナビid 24 let nav = document.getElementById("FnNav-" + (i+1)); 25 26 let position = topPos - height; 27 let position_bottom = topPos + height; 28 29 if( scrollTop > position && scrollTop < position_bottom ) { 30 nav.classList.add('ExSelected'); 31 } else { 32 nav.classList.remove('ExSelected'); 33 } 34 } 35 36} 37window.addEventListener('scroll', sideNav); 38 39
試したこと
①
nav.classList.add('ExSelected')の前に if (i - 1){ nav.classList.remove('ExSelected') } を追記してみましたエラーがおきました
②
nav.classList.add('ExSelected')の前に if (nav.classList.contains('ExSelected')){ nav.classList.remove('ExSelected') } を追記してみましたがスクロールしてみると全てのセレクトが外れてしまう。
補足情報(FW/ツールのバージョンなど)
jQueryは使用せずに実装したいです。
回答3件
あなたの回答
tips
プレビュー