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


Posted in Javascript onDecember 17, 2020

以前大部分时间都是在做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 = 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)
  })

效果如下图所示

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

效果很明显,在事件触发之后,页面立马跑到的顶部,在交互性没啥要求的时候,这种做法确实没啥问题,不过要求高了之后就不行了,会显得有些突兀。

经大佬提示,可以在style中设置 html, body { scroll-behavior:smooth; },可以达到和下面两个api的behavior 参数为 smooth 的效果是一样的

scrollTo()

此 api 需要传递 DOM元素相对于window的 left 和 top 的距离,此例子仅展示简单demo,只考虑 top 坐标

当然它还有一个 behavior 参数,将其设置为 smooth 后,将会出现滑动效果 步骤如下:

  • 计算目标元素距离顶部的距离
  • 通过事件触发

代码如下:

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' })
  })

效果如下图所示

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

从效果上来看,相较于 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" })
  })

效果如下图所示

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

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

以上三种方法是我目前比较常用的,更多相关js回到指定位置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
wap图片滚动特效无css3元素纯js脚本编写
Aug 22 Javascript
浅谈几种常用的JS类定义方法
Jun 08 Javascript
原生的强大DOM选择器querySelector介绍
Dec 21 Javascript
jQuery实现页面顶部下拉广告
Dec 30 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
Feb 18 Javascript
bootstrapValidator 重新启用提交按钮的方法
Feb 20 Javascript
npm国内镜像 安装失败的几种解决方案
Jun 04 Javascript
使用vue如何构建一个自动建站项目
Feb 05 Javascript
使用D3.js构建实时图形的示例代码
Aug 28 Javascript
vue element中axios下载文件(后端Python)
May 10 Javascript
seajs和requirejs模块化简单案例分析
Aug 26 Javascript
微信小程序用户授权最佳实践指南
May 08 Javascript
javascript 数组(list)添加/删除的实现
Dec 17 #Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
Dec 16 #Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
Dec 16 #Javascript
原生JS实现拖拽功能
Dec 16 #Javascript
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 #Vue.js
vue实现图片裁剪后上传
Dec 16 #Vue.js
Vue-router中hash模式与history模式的区别详解
Dec 15 #Vue.js
You might like
php代码运行时间查看类代码分享
2011/08/06 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
详解python发送各类邮件的主要方法
2016/12/22 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
python数值基础知识浅析
2019/11/19 Python
Django websocket原理及功能实现代码
2020/11/14 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
市场开发与营销专业求职信范文
2014/05/01 职场文书
努力学习演讲稿
2014/05/10 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python