为了账号安全,请及时绑定邮箱和手机立即绑定

回到页面指定位置的三种方式

标签:
JavaScript

以前大部分时间都是在做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>复制代码

然后具体操作步骤如下

  1. 将a标签放到指定元素的附近

  2. 然后通过点击事件生成 a 标签

  3. 触发a标签事件

  4. 删除a标签

代码如下

    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)
    })复制代码

效果如下图所示

https://img3.sycdn.imooc.com/5fd9a29b00012a9800410032.jpg

效果很明显,在事件触发之后,页面立马跑到的顶部,在交互性没啥要求的时候,这种做法确实没啥问题,不过要求高了之后就不行了,会显得有些突兀。 经大佬提示,可以在style中设置 html, body { scroll-behavior:smooth; },可以达到和下面两个api的behavior 参数为 smooth 的效果是一样的

scrollTo()

此 api 需要传递 DOM元素相对于window的 left 和 top 的距离,此例子仅展示简单demo,只考虑 top 坐标
当然它还有一个 behavior 参数将其设置为 smooth 后,将会出现滑动效果 步骤如下:

  1. 计算目标元素距离顶部的距离

  2. 通过事件触发

代码如下:

    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' })
    })复制代码

效果如下图所示 https://img4.sycdn.imooc.com/5fd9a29d0001d01500490624.jpg

从效果上来看,相较于a标签,该api支持动画,使得页面更丝滑 不过它对iframe的支持度不够,在我所遇到的项目中iframe的占比还不小,还请谨慎使用

Element.scrollIntoView()

该 api 相较于上一个,节点信息更加的明确,操作方法也更加的简洁,更利于后续的维护
代码如下

    const backTop2 = document.getElementById("backTop2")    const TOP = document.getElementById("top")
    backTop2.addEventListener("click", function (e) {
        TOP.scrollIntoView({ behavior: "smooth" })
    })复制代码

效果如下图所示 https://img1.sycdn.imooc.com/5fd9a29d0001badf00030413.jpg

从效果上来看,该api和scrollTo的作用是一致的,但是从代码结构上来说,scrollIntoView会更加的简洁且在iframe中表现也很优秀,基本上被用到的频率更高


作者:pengpeng


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消