如何用純js實(shí)現(xiàn)返回頁(yè)面頂部功能
1. 需求場(chǎng)景
點(diǎn)擊頁(yè)面中的浮標(biāo),頁(yè)面自動(dòng)返回頂部。
2. 需求實(shí)現(xiàn)分析
- 直接使用 body 或者 documentElement 的 scrollTop 屬性,直接設(shè)置為 0;就能返回頁(yè)面頂部;
- 使用 window.scrollTo 方法,實(shí)現(xiàn)返回頁(yè)面頂部。
3. 方案一:直接返回頂部
3.1 代碼邏輯分析
- 獲取返回頂部按鈕;
- 當(dāng)頁(yè)面滾動(dòng)時(shí)顯示或隱藏返回頂部按鈕;
2.1 獲取當(dāng)前滾動(dòng)的位置;
2.2 判斷是否超過(guò)設(shè)置的顯示距離,超過(guò)就顯示,否則就隱藏; - 滾動(dòng)到頂部。
3.2 代碼實(shí)現(xiàn)
function scrollToTop({elem, speed = 5, top = 0, showDistance = 500, callback}) { // 獲取返回頂部按鈕 let backToTopButton = document.getElementById(elem); // 當(dāng)頁(yè)面滾動(dòng)時(shí)顯示或隱藏返回頂部按鈕 window.onscroll = function() { // 獲取當(dāng)前滾動(dòng)的位置 let currentScroll = document.documentElement.scrollTop || document.body.scrollTop; // 判斷是否超過(guò)設(shè)置的顯示距離,超過(guò)就顯示,否則就隱藏 if (currentScroll > showDistance) { backToTopButton.style.display = "block"; } else { backToTopButton.style.display = "none"; } }; // 滾動(dòng)到頂部 backToTopButton.addEventListener("click", function() { document.body.scrollTop = 0; document.documentElement.scrollTop = 0; }); }
3.3 總結(jié)
- 由于直接設(shè)置 scrollTop 為 0,因此執(zhí)行過(guò)程不夠平滑,直接返回頂部,體驗(yàn)不好!
4. 方案二:平滑滾動(dòng)
4.1 代碼實(shí)現(xiàn)分析
- 獲取返回頂部按鈕;
- 當(dāng)頁(yè)面滾動(dòng)時(shí)顯示或隱藏返回頂部按鈕;
2.1 獲取當(dāng)前滾動(dòng)的位置;
2.2 判斷是否超過(guò)設(shè)置的顯示距離,超過(guò)就顯示,否則就隱藏; - 平滑滾動(dòng)到頂部;
3.1 獲取當(dāng)前滾動(dòng)的位置;
3.2 如果當(dāng)前不在頂部,則開(kāi)始滾動(dòng)動(dòng)畫;
3.3 到達(dá)指定位置,執(zhí)行回調(diào)函數(shù); - 滾動(dòng)函數(shù);
4.1 獲取當(dāng)前滾動(dòng)的位置;
4.2 如果當(dāng)前不在頂部,則開(kāi)始滾動(dòng)動(dòng)畫;
4.3 控制滾動(dòng)速度。
4.2 代碼實(shí)現(xiàn)
function scrollToTop({elem, speed = 5, top = 0, showDistance = 500, callback}) { // 獲取返回頂部按鈕 let backToTopButton = document.getElementById(elem); // 當(dāng)頁(yè)面滾動(dòng)時(shí)顯示或隱藏返回頂部按鈕 window.onscroll = function() { // 獲取當(dāng)前滾動(dòng)的位置 let currentScroll = document.documentElement.scrollTop || document.body.scrollTop; // 判斷是否超過(guò)設(shè)置的顯示距離,超過(guò)就顯示,否則就隱藏 if (currentScroll > showDistance) { backToTopButton.style.display = "block"; } else { backToTopButton.style.display = "none"; } }; // 平滑滾動(dòng)到頂部 backToTopButton.addEventListener("click", function() { // 獲取當(dāng)前滾動(dòng)的位置 let currentScroll = document.documentElement.scrollTop || document.body.scrollTop; // 如果當(dāng)前不在頂部,則開(kāi)始滾動(dòng)動(dòng)畫 if (currentScroll > top) { window.requestAnimationFrame(smoothScroll); // 運(yùn)行動(dòng)畫 } else { // 到達(dá)指定位置,執(zhí)行回調(diào)函數(shù) callback && callback(); } }); // 滾動(dòng)函數(shù) function smoothScroll() { // 獲取當(dāng)前滾動(dòng)的位置 let currentScroll = document.documentElement.scrollTop || document.body.scrollTop; // 如果當(dāng)前不在頂部,則開(kāi)始滾動(dòng)動(dòng)畫 if (currentScroll > top) { window.requestAnimationFrame(smoothScroll); window.scrollTo(0, currentScroll - (currentScroll / speed)); // 控制滾動(dòng)速度 } } }
4.3 總結(jié)
- 實(shí)現(xiàn)了平滑滾動(dòng)到頂部;
- 在滾動(dòng)完成后執(zhí)行回調(diào)函數(shù)。
5. 注意
- 使用CSS來(lái)添加一些過(guò)渡效果會(huì)讓滾動(dòng)更加平滑,并增強(qiáng)用戶體驗(yàn)??梢蕴砑右韵翪SS代碼:
html { scroll-behavior: smooth; }
總結(jié)
到此這篇關(guān)于如何用純js實(shí)現(xiàn)返回頁(yè)面頂部功能的文章就介紹到這了,更多相關(guān)js返回頁(yè)面頂部?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談javascript的url參數(shù)parse和build函數(shù)
下面小編就為大家?guī)?lái)一篇淺談javascript的url參數(shù)parse和build函數(shù)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03小程序?qū)崿F(xiàn)頁(yè)面多級(jí)來(lái)回切換的示例代碼
這篇文章主要為大家詳細(xì)介紹了小程序如何頁(yè)面多級(jí)來(lái)回切換支持滑動(dòng)和點(diǎn)擊操作,文中的實(shí)現(xiàn)步驟講解詳細(xì),快跟隨小編一起動(dòng)手嘗試一下吧2022-07-07JavaScript幾種形式的樹(shù)結(jié)構(gòu)菜單
今天我主要講3種不同展示的JavaScript樹(shù)結(jié)構(gòu)菜單,分別是懸浮層樹(shù)(Tree)、右鍵菜單樹(shù)(ContextMenu)和節(jié)點(diǎn)樹(shù)(TreeMenu),目前都支持無(wú)限級(jí)層次。2010-05-05詳解ES6 export default 和 import語(yǔ)句中的解構(gòu)賦值
這篇文章主要介紹了詳解ES6 export default 和 import語(yǔ)句中的解構(gòu)賦值,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05js實(shí)現(xiàn)同一頁(yè)面多個(gè)運(yùn)動(dòng)效果的方法
這篇文章主要介紹了js實(shí)現(xiàn)同一頁(yè)面多個(gè)運(yùn)動(dòng)效果的方法,涉及javascript操作頁(yè)面元素運(yùn)動(dòng)效果的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04JavaScript Canvas實(shí)現(xiàn)井字棋游戲
這篇文章主要為大家詳細(xì)介紹了JavaScript Canvas實(shí)現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08VS2008中使用JavaScript調(diào)用WebServices
這篇文章主要介紹了VS2008中使用JavaScript調(diào)用WebServices,需要的朋友可以參考下2014-12-12原生js實(shí)現(xiàn)類似fullpage的單頁(yè)/全屏滾動(dòng)
這篇文章主要介紹了利用原生js實(shí)現(xiàn)類似fullpage的全屏滾動(dòng)的實(shí)現(xiàn)方法,文中給出了完整的實(shí)例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考價(jià)值,需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2017-01-01