今天針對常用的Navbar做fix的狀態
這真的是很常見的功能,可以立馬學起來
1.先抓出NavBar的位置,以及等等需要用到的容器最上部
const nav = document.querySelector('#main')
let topOfNav = nav.offsetTop
2.到Css中寫好fix的狀態
body.fixed-nav nav {
position: fixed;
box-shadow: 0 5px 0 rgba(0,0,0,0.1);
}
3.利用JS加上.fixed-nav或移除.fixed-nav,
來控制nav是否需要fix狀態
function fixNav() {
console.log(topOfNav)
if(window.scrollY >= topOfNav) {
document.body.classList.add('fixed-nav')
} else {
document.body.classList.remove('fixed-nav')
}
}
window.addEventListener('scroll', fixNav)
做到這裡會發現fix狀態做好了,但下方的文章會因為navbar變為fix
而產生跳動的情形,這是因為position:fixed
時,
此容器(nav)會是漂浮的狀態,對其他容器來說它的寬高等於0
所以我們就需要手動加回去,因fix失去的高度
function fixNav() {
console.log(topOfNav)
if(window.scrollY >= topOfNav) {
document.body.classList.add('fixed-nav')
document.body.style.paddingTop = nav.offsetHeight + 'px'
} else {
document.body.classList.remove('fixed-nav')
document.body.style.paddingTop = 0;
}
}
4.logo進場的css,
也是利用.fixed-nav這個class做控制
.fixed-nav li.logo {
max-width: 500px;
}
今天的練習完成囉,完整的程式碼請直接點擊下方codePen連結
codePen
或者也可以直接到WES BOS的網站下載打包好的檔案
javascript30