自動隱藏的Sticky的Header

吳鵬煜發表於2015-07-22

讓Sticky Header自動隱藏是一個一箭雙鵰的好辦法,一來可以在任何頁面任何地方都可以訪問到導航條,二來可以節省頁面空間。我的客戶Easy Shine就非常樂意在自己的網站上使用這個技術,這個技術同時也在我的網站上實現了(viewport小於768px時可以看到效果)。

使導航條固定


這裡有一些淺顯易懂的HTML/CSS程式碼,無論頁面滾動到何處,導航條都會固定在頁面頂部。現在,我們如何讓它自動隱藏?

自動隱藏導航條

「自動隱藏」意味著當使用者在往下滾動頁面時導航條將會消失,但當使用者有可能需要導航條的時候又能讓它出現:使用者已經滾動到頁面底部,或者開始向上滾動時。導航條的隱藏至少有兩種形式:互動式和簡單式。

互動式

互動式視訊演示

互動式的意思是,導航條會直接,或者立刻響應頁面滾動事件,這種形式或許會由於它操作起來的感覺,從使用者體驗看來是一個良好的小細節。不過它也有不好的一面:這種形式的本質決定了他必須要依賴於JavaScript,我們不能使用JS事件節流閥(在指定的時間週期內只呼叫某個函式一次)。基本上這就意味著每次滾動事件產生都要產生計算,並且會毫無意義的佔用CPU。幸運的是,大多數情況下這只是理論,實際上因為計算量實在太微不足道而通常不會遇到這種問題。

滾動事件產生時,JS演算法會計算並修改CSS中的top屬性。

簡單式

簡單式視訊演示

這種形式,取決於JavaScript節流閥的週期設定,或許不會有太多“得到回應”的感覺。不管怎麼說,這種形式對CPU會比較友好,加之動畫是基於CSS來實現的,這意味著我們的想象力可以盡情發揮。

和之前互動式不同的是,這裡的JavaScript並不直接改變CSS的屬性,而是為元素插入或移除header--hidden這個CSS類

在CSS中我們這樣定義:

導航條的額外的一些狀態

視訊演示

有些時候,尤其在主頁中時,在頁面頂部使用更大的導航條有助於獲取訪問者的注意,我們需要一個額外的CSS類來控制導航條高度:

然而這個新定義的CSS類是由JavaScript來控制如何使用的——在頁面開始滾動時新增,並在滾動到頁面頂部時移除。

示範

這個Demo的原始碼中包括了純JavaScript(相容IE9+)和依賴於jQuery的兩種實現方式,儘管去研究去使用吧!

Demo地址

相關文章