【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で実装してみました。
コピペしてガンガン使ってください!
この記事に対するご意見・ご感想・ご質問等ありましたら、
ぜひ下記フォームにてお送りください。