好的Nav bar的動態可以讓網站不那麼呆板,
其實實作的技術也不難,就是偵測頁面的滾動
向下滑的時候再出現
今天實作兩個:
| 提案 | Nav bar的消失 | Nav bar的變色 | 
|---|---|---|
| 目的 | 爭取更多展示空間 → 往下滑時消失,往上滑時出現 | 更好的閱讀體驗,也常常看到縮小版本 | 
| JS實作 | 偵測scrollY位置 | 使用Intersection Observer | 
| 成果圖 |  |  | 
一個一個來看看吧~
用JS偵測瀏覽器現在的位置 vs. 剛剛的位置,
Y比較大的話表示往下滑,那就讓Nav bar消失,
反之就出現。

//JS
let lastPos = 0
const nav = document.querySelector('nav');
// 監聽scroll事件
document.addEventListener('scroll',function(){
  let currentPos =  window.scrollY;
  //   往下滑
  if(currentPos > lastPos){
        nav.style.top = "-60px"; //讓nav bar消失
  }else{
    nav.style.top = "0px"; //讓nav bar出現
  }
  lastPos = currentPos;//再記住現在位置,跟未來的位置做比較
});
利用之前提到的Intersection Observer API 傳送門!
來偵測第一個區塊消失了沒,消失的話,就讓Navbar變色。

//選觀察對象, 我們觀察對象是section1
//當section1要消失的時候,就讓Nav bar換色好讓他在section2顏色更顯眼
const nav = document.querySelector('nav');
const section1 = document.querySelector('.section1');
//當section1離開的時候就加上新的樣式
const changeColor = (entries, observer) =>{
  entries.forEach(entry=>{
    if(!entry.isIntersecting){
      nav.classList.add('scrolled');
    }else{
       nav.classList.remove('scrolled');
    }
  })
  
}
//做一個新的觀察
let observer = new IntersectionObserver(changeColor, options);
//觀察對象section1
observer.observe(section1);
今天的code:在這裡
有任何問題想法歡迎留言~