【JavaScript】サイドバーに今どこを読んでいるかを表示してみる

スポンサーリンク
今どこを読んでいるかアイキャッチ プログラミング

こんにちは!セミマサです。

JavaScriptを使ってサイドバーに今どこを読んでいるかを表示してみました。

デモサイト

今回のデモサイトです。

画面サイズ480px以下の場合サイドバーを表示しないようにしているのでPCかタブレットでご確認ください

今回のスクリプト

const heading_list =  document.getElementsByTagName('h2');
let heading_top = [];
for(let i = 0; i < heading_list.length;i++){
    heading_top[i] = heading_list[i].offsetTop;
}
const side_list =document.getElementsByClassName('side-content');

const present_Location = ()=>{
    sidebar_Initialize();
    let windowTop = window.scrollY;
    if(heading_top[0] < windowTop && windowTop < heading_top[1] ){
        side_list[0].classList.add('is-active');
    }else if(heading_top[1] < windowTop && windowTop < heading_top[2] ){
        side_list[1].classList.add('is-active');
    }else if(heading_top[2] < windowTop && windowTop <heading_top[3] ){
        side_list[2].classList.add('is-active');
    }else if(heading_top[3] < windowTop ){
        side_list[3].classList.add('is-active');
    }
}
const sidebar_Initialize = ()=>{
    for(let i = 0;i<side_list.length;i++){
        side_list[i].classList.remove('is-active');
    }
}

const reAssignment = ()=>{
    for(let i = 0; i < heading_list.length;i++){
        heading_top[i] = heading_list[i].offsetTop;
    }
}
window.addEventListener('load', present_Location);
window.addEventListener('scroll', present_Location);
window.addEventListener('resize',reAssignment);

heading_listに見出しのリストを格納

heading_topに各見出しの位置を格納

side_listにサイドバーの見出しリストを格納

・ウィンドウが読み込まれた時とスクロールした時にpresent_Location関数を実行します。

・画面のリサイズ時にreAssignment関数を実行します。

present_Location関数

今回のメインとなる関数です。

まずsidebar_Initialize関数を呼び出します。sidebar_Initialize関数については後述します。

windowTopに縦方向のスクロール量を代入し、条件を満たすサイドバーの見出しにis-activeクラスを付与します。

sidebar_Initialize関数

side_list内の各要素からis-activeクラスを取り除く関数です。

reAssignment関数

heading_topに各見出しの位置を再格納する関数です。

おわりに

無事動くものが作れました。

タイトルとURLをコピーしました