做出一個固定在畫面上方的導覽列沒什麼難度,故本日目標是重現 MUI 的 Elevate App bar 與 Hide App bar 這兩種導覽列。
先觀察:
想讓元件本身的 code 單純好讀,也考慮到之後可能也會有其他元件用到捲動相關資料,故選擇把以上兩個邏輯判定包成 custom hooks useScrollPercentage 與 useScrollDown 來處理,不直接將捲動相關的邏輯寫在元件內。
能取得「畫面捲動百分比」與「捲動方向」的資料後,這兩個元件分別要處理的內容只剩下:
filter: drop-shadow(...) 樣式。transform 樣式為 translateY(0px),在 useScrollDown 回傳 true 時,設定 transform 為 translateY(-60px) 將導元件往上方推移。並元件被隱藏時,同時取消陰影效果(navWrapperHide 的 filter: none)navWrapperHide 的 translateY 數值。useScrollPercentage 與 useScrollDown 在目前的程式碼中預設延遲數值為 100 毫秒,如果要讓計算捲動的反應更即時,可下調在 hooks args 預設的 delay 數值。實作起來不難,如果是個人規模的專案或許可以不用使用套件而是自行製作。