js回到頁(yè)面指定位置的三種方式
以前大部分時(shí)間都是在做b端相關(guān)的項(xiàng)目,在實(shí)現(xiàn)此類需求時(shí),通常都是直接借助 a
標(biāo)簽搞定,現(xiàn)在做c端了,對(duì)交互性的要求一下就提升了,此時(shí) a
標(biāo)簽就遠(yuǎn)遠(yuǎn)不能滿足要求了,需要借助js來(lái)實(shí)現(xiàn)此類需求,特此記錄。
a 標(biāo)簽
首先放出html
<body> <contain class="test1"> <a name="topAnchor"></a> <div id="top">我是頂部</div> <div></div> <div></div> <div></div> <div></div> <div></div> </contain> <footer> <button id="backTop1">第一種方式回到頂部</button> <button id="backTop2">第二種方式回到頂部</button> <button id="backTop3">第三種方式回到頂部</button> </footer> </body>
然后具體操作步驟如下
- 將a標(biāo)簽放到指定元素的附近
- 然后通過(guò)點(diǎn)擊事件生成 a 標(biāo)簽
- 觸發(fā)a標(biāo)簽事件
- 刪除a標(biāo)簽
代碼如下
const backTop1 = document.getElementById("backTop1") backTop1.addEventListener("click", function (e) { let a = document.createElement("a") a.href = "#topAnchor" e.target.appendChild(a) a.onclick = function (e) { e.stopPropagation() } a.click() e.target.removeChild(a) })
效果如下圖所示
效果很明顯,在事件觸發(fā)之后,頁(yè)面立馬跑到的頂部,在交互性沒(méi)啥要求的時(shí)候,這種做法確實(shí)沒(méi)啥問(wèn)題,不過(guò)要求高了之后就不行了,會(huì)顯得有些突兀。
經(jīng)大佬提示,可以在style中設(shè)置 html, body { scroll-behavior:smooth; },可以達(dá)到和下面兩個(gè)api的behavior 參數(shù)為 smooth 的效果是一樣的
scrollTo()
此 api 需要傳遞 DOM元素相對(duì)于window的 left 和 top 的距離,此例子僅展示簡(jiǎn)單demo,只考慮 top 坐標(biāo)
當(dāng)然它還有一個(gè) behavior 參數(shù),將其設(shè)置為 smooth 后,將會(huì)出現(xiàn)滑動(dòng)效果 步驟如下:
- 計(jì)算目標(biāo)元素距離頂部的距離
- 通過(guò)事件觸發(fā)
代碼如下:
const backTop2 = document.getElementById("backTop2") const TOP = document.getElementById("top") const y = TOP.offsetTop const backTop3 = document.getElementById("backTop3") backTop3.addEventListener("click", function (e) { window.scrollTo({ top: y, left: 0, behavior: 'smooth' }) })
效果如下圖所示
從效果上來(lái)看,相較于 不過(guò)它對(duì)iframe的支持度不夠,在我所遇到的項(xiàng)目中iframe的占比還不小,還請(qǐng)謹(jǐn)慎使用a
標(biāo)簽,該api支持動(dòng)畫(huà),使得頁(yè)面更絲滑
Element.scrollIntoView()
該 api 相較于上一個(gè),節(jié)點(diǎn)信息更加的明確,操作方法也更加的簡(jiǎn)潔,更利于后續(xù)的維護(hù)
代碼如下
const backTop2 = document.getElementById("backTop2") const TOP = document.getElementById("top") backTop2.addEventListener("click", function (e) { TOP.scrollIntoView({ behavior: "smooth" }) })
效果如下圖所示
從效果上來(lái)看,該api和scrollTo的作用是一致的,但是從代碼結(jié)構(gòu)上來(lái)說(shuō),scrollIntoView會(huì)更加的簡(jiǎn)潔且在iframe中表現(xiàn)也很優(yōu)秀,基本上被用到的頻率更高
以上三種方法是我目前比較常用的,更多相關(guān)js回到指定位置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
antd組件Upload實(shí)現(xiàn)自己上傳的實(shí)現(xiàn)示例
這篇文章主要介紹了antd組件Upload實(shí)現(xiàn)自己上傳的實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12微信小程序使用input組件實(shí)現(xiàn)密碼框功能【附源碼下載】
這篇文章主要介紹了微信小程序使用input組件實(shí)現(xiàn)密碼框功能,涉及input組件布局設(shè)置相關(guān)操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2017-12-12JS實(shí)現(xiàn)仿Windows7風(fēng)格的網(wǎng)頁(yè)右鍵菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)仿Windows7風(fēng)格的網(wǎng)頁(yè)右鍵菜單效果代碼,涉及JavaScript鼠標(biāo)右鍵響應(yīng)及動(dòng)態(tài)生成頁(yè)面菜單的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09JavaScript實(shí)現(xiàn)文字與圖片拖拽效果的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)文字與圖片拖拽效果的方法,涉及javascript操作文字與圖片的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02用Javascript實(shí)現(xiàn)錨點(diǎn)(Anchor)間平滑跳轉(zhuǎn)
本文介紹的方法,實(shí)現(xiàn)了錨點(diǎn)(Anchor)間平滑跳轉(zhuǎn),效果非常不錯(cuò)。2009-09-09layui--select使用以及下拉框?qū)崿F(xiàn)鍵盤(pán)選擇的例子
今天小編就為大家分享一篇layui--select使用以及下拉框?qū)崿F(xiàn)鍵盤(pán)選擇的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09JavaScript實(shí)現(xiàn)六種網(wǎng)頁(yè)圖片輪播效果詳解
在網(wǎng)頁(yè)中,我們經(jīng)常會(huì)看到各種輪播圖的效果,它們到底是怎樣實(shí)現(xiàn)的呢?本文將為大家詳細(xì)介紹一下六種不同的輪播效果的實(shí)現(xiàn),需要的可以參考一下2021-12-12微信小程序商城項(xiàng)目之側(cè)欄分類效果(1)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崙?zhàn)商城系列之側(cè)欄分類效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04