如何實現平滑滾動頁面到頂部的功能?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
1.使用CSS
完成功能的最高境界,只用CSS就搞定。代碼如下:
html { scroll-behavior: smooth; }
該樣式的作用是為有滾動條的元素指定一個滾動的行為,但是只有在當用戶手動導航或者 CSSOM scrolling API觸發滾動的時候生效,不影響用戶行為產生的滾動。就在我慶祝的時候,打開can i use看了下兼容性:
日了狗,還是老老實實用JS實現吧。
2.使用Window.scrollTo API
我們都知道window.scrollTo(x, y),通過傳入文檔中的x,y軸坐標來實現滾動到頁面某個位置的功能。這個API其實還可以傳入一個option,是一個對象,left值對應坐標中的x,top對應坐標中的y,還有一個值為behavior,可以讓你自定義滾動行為,然后我們這樣來實現滾動到頂部:
window.scrollTo({ left: 0, top: 0, behavior: 'smooth' })
真香,搞定。過了幾天,產品經理扛著5米大刀來找我,說在Safari上滾動效果奇怪,體檢極差。于是我默默打開了MDN文檔,滾動到底部:
看到了這張圖,雖然API瀏覽器都幾乎支持,但是option選項在Safari上直接掛掉,于是我又打開了stackoverflow,總結了終極方案。
3.使用requestAnimationFrame
經常能看到大名鼎鼎的requestAnimationFrame,但是沒機會用上,這次可以嘗嘗鮮了。我們知道requestAnimationFrame的作用就是告訴瀏覽器在下次重繪之前執行傳入的回調函數,這個行為是瀏覽器自動幫你做的。于是有了如下代碼:
const scrollToTop = () => { let scrollTop = document.documentElement.scrollTo || document.body.scrollTop if (scrollTop > 0) { window.requestAnimationFrame(scrollTop) window.scrollTop(0, scrollTop - scrollTo / 8) } }
Done?。?!Perfect?。?!雀躍的同時,我還是打開了can i use查看了requestAnimationFrame的兼容性:
看完上述內容,你們掌握如何實現平滑滾動頁面到頂部的功能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。