js回到页⾯指定位置的三种⽅式
以前⼤部分时间都是在做b端相关的项⽬,在实现此类需求时,通常都是直接借助a标签搞定,现在做c端了,对交互性的要求⼀下就提升了,此时a标签就远远不能满⾜要求了,需要借助js来实现此类需求,特此记录。
a 标签
⾸先放出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标签放到指定元素的附近
然后通过点击事件⽣成 a 标签
触发a标签事件
删除a标签
代码如下
const backTop1 = ElementById("backTop1")
backTop1.addEventListener("click", function (e) {
let a = ateElement("a")
a.href = "#topAnchor"
e.target.appendChild(a)
e.stopPropagation()
}
a.click()
veChild(a)
})
效果如下图所⽰
效果很明显,在事件触发之后,页⾯⽴马跑到的顶部,在交互性没啥要求的时候,这种做法确实没啥问题,不过要求⾼了之后就不⾏了,会显得有些突兀。
经⼤佬提⽰,可以在style中设置 html, body { scroll-behavior:smooth; },可以达到和下⾯两个api的behavior 参数为 smooth 的效果是⼀样的
scrollTo()
此 api 需要传递 DOM元素相对于window的 left 和 top 的距离,此例⼦仅展⽰简单demo,只考虑 top 坐
js教程removechild标
当然它还有⼀个 behavior 参数,将其设置为 smooth 后,将会出现滑动效果步骤如下:
计算⽬标元素距离顶部的距离
通过事件触发
代码如下:
const backTop2 = ElementById("backTop2")
const TOP = ElementById("top")
const y = TOP.offsetTop
const backTop3 = ElementById("backTop3")
backTop3.addEventListener("click", function (e) {
window.scrollTo({ top: y, left: 0, behavior: 'smooth' })
})
效果如下图所⽰
从效果上来看,相较于a标签,该api⽀持动画,使得页⾯更丝滑不过它对iframe的⽀持度不够,在我所遇到的项⽬中iframe 的占⽐还不⼩,还请谨慎使⽤
Element.scrollIntoView()
该 api 相较于上⼀个,节点信息更加的明确,操作⽅法也更加的简洁,更利于后续的维护
代码如下
const backTop2 = ElementById("backTop2")
const TOP = ElementById("top")
backTop2.addEventListener("click", function (e) {
TOP.scrollIntoView({ behavior: "smooth" })
})
效果如下图所⽰
从效果上来看,该api和scrollTo的作⽤是⼀致的,但是从代码结构上来说,scrollIntoView会更加的简洁且在iframe中表现也很优秀,基本上被⽤到的频率更⾼
以上三种⽅法是我⽬前⽐较常⽤的,更多相关js回到指定位置内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!