【JavaScript】スクロールでグローバルナビゲーションを画面上部に追従させる
 2024年01月17日
 WEBサイト制作
- #備忘録
- #HTML
- #css
- #JavaScript
- #tips
こんにちは!
 上毛印刷WEB制作担当のソーヤです。
 
 今回は実装要望が非常に多いギミックを紹介します。
実装例
 こんな感じでグローバルナビゲーションを画面上部に追従させることで、ページの下部にいても常にグローバルナビゲーションにアクセスすることができます。
 便利ですよね!
HTML例
<div class="gnav-inc">
    <nav class="gnav">
        <div class="gnav-inner">
            <ul class="gnav-list">
                <li class="gnav-list__item">
                    <a href="javascript:void(0);">トップ</a>
                </li>
                <li class="gnav-list__item">
                    <a href="javascript:void(0);">選手一覧</a>
                </li>
                <li class="gnav-list__item">
                    <a href="javascript:void(0);">訓練方法</a>
                </li>
                <li class="gnav-list__item">
                    <a href="javascript:void(0);">大会結果</a>
                </li>
            </ul>
        </div>
    </nav>
</div>CSS例
.gnav-inc{
    height: 90px;
    position: relative;
    z-index: 60;
    transition: .2s;
    background: rgba(36,42,44,1);
}
.is-fixed{
    position: fixed;
    z-index: 10000;
    width: 100vw;
    top: 0;
    left: 0;
    margin: 0;
}    
.gnav{
    -webkit-transition: 0.4s ease;
    -o-transition: 0.4s ease;
    transition: 0.6s ease;
    height: 90px;
    background: rgba(36,42,44,1);
}
.gnav-list{
    display: -webkit-flex;
    display: -ms-flex;
    display: flex;
    justify-content: center;
    align-items: center;
    list-style: none;
    margin: 0;
}
.downMenu{
    position: absolute;
    display: none;
    top: 90px;
}
.gnav-list__item{
    text-align: center;
}
.gnav-list__item a{
    color: #fff;
    -webkit-transition: 0.4s ease;
    -o-transition: 0.4s ease;
    transition: 0.4s ease;
}
.gnav-list__item > a{
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    width: 250px;
    height: 90px;
    transition: 0.4s ease;
    border-bottom: 0px solid transparent;
    background-position: top 25px center;
    background-repeat: no-repeat;
    background-size: auto;
}
.gnav-list__item > a span{
    color: #fff;
    display: block;
    margin: 0 0 -10px;
}
.gnav-list__item > a::after{
    content: '';
    position: absolute;
    right: -1px;
    top: 0;
    background-size: contain;
    background-position: center center;
    background-repeat: no-repeat;
    width: 1px;
    height: 90px;
    z-index: 100;
}JavaScript例
let fixElement = document.querySelector('.gnav-inc');
let baseFixPoint = fixElement.offsetTop + 80;
let fixClass = 'is-fixed';
function fixFunction() {
let windowScrollTop = window.scrollY || document.documentElement.scrollTop;
    if (windowScrollTop >= baseFixPoint) {
        fixElement.classList.add(fixClass);
    } else {
        fixElement.classList.remove(fixClass);
    }
}
window.addEventListener('load', fixFunction);
window.addEventListener('scroll', fixFunction);まとめ
今回もjQueryではなく、Vanilla.jsで実装してみました。
コピペしてガンガン使ってください!





 
   
この記事に対するご意見・ご感想・ご質問等ありましたら、
ぜひ下記フォームにてお送りください。