JavaScript/テーブルの上下に水平スクロールバーをつける

更新日 5日前(Asia/Tokyo) 更新者: y963@rogarithm

テーブルの上下に水平スクロールバーをつける

CSS

#containar {
    width: 100%;
}
.scrollbar {
    width: 100%;
    overflow-x: scroll;
    overflow-y: hidden;
}
.bar_inner {
    height: 1px;
}
.scrollbox {
    width: 100%;
    margin-top: 5px;
    overflow-x: scroll;
    overflow-y: hidden;
}
.box_inner {
    margin-bottom: 5px;
}

HTML

<div id="containar">
    <!-- 上のスクロールバー -->
    <div class="scrollbar" id="scrollbar">
        <div class="bar_inner"></div>
    </div>    
    
    <!-- スクロールさせる本体 -->
    <div class="scrollbox" id="scrollbox">
        <div class="box_inner">

            <table>

            </table>
        </div>
    </div>
</div>

JS

document.addEventListener("DOMContentLoaded", function () {
    // `scrollbar` と `scrollbox` のスクロールイベントを設定
    const scrollbar = document.getElementById("scrollbar");
    const scrollbox = document.getElementById("scrollbox");

    // スクロールバーの表示をチェックする関数
    function toggleScrollbar() {
        if (scrollbox.scrollWidth > scrollbox.clientWidth) {
            // 下のスクロールバーが表示されている場合のみ、上のスクロールバーも表示
            scrollbar.style.display = '';
            document.querySelector('.bar_inner').style.width = scrollbox.scrollWidth + "px"; // 上下の幅を同じに
        } else {
            // 下のスクロールバーがない場合、上のスクロールバーを非表示
            scrollbar.style.display = 'none';
        }
    }

    // ページ読み込み時とウィンドウリサイズ時にチェック
    toggleScrollbar();
    window.addEventListener('resize', toggleScrollbar);

    function syncScroll(event) {
        
        if (event.target.id === "scrollbar") {
            // `scrollLeft` を同期
            scrollbox.scrollLeft = scrollbar.scrollLeft;
        } else {
            scrollbar.scrollLeft = scrollbox.scrollLeft;
        }
    }

    scrollbar.addEventListener("scroll", syncScroll);
    scrollbox.addEventListener("scroll", syncScroll);
});
パス: JavaScript/テーブルの上下に水平スクロールバーをつける.md
最終更新: 2025-11-30 22:41:40(Asia/Tokyo)