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 相关文章推荐
javascript实现的HashMap类代码
Jun 27 Javascript
javascript函数声明和函数表达式区别分析
Dec 02 Javascript
用js编写的简单的计算器代码程序
Aug 04 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
Bootstrap CSS组件之按钮下拉菜单
Dec 17 Javascript
ECMAScript6--解构
Mar 30 Javascript
jQuery中.attr()和.data()的区别分析
Sep 03 jQuery
angular.js4使用 RxJS 处理多个 Http 请求
Sep 23 Javascript
解决vue接口数据赋值给data没有反应的问题
Aug 27 Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 Javascript
JavaScript实现页面中录音功能的方法
Jun 04 Javascript
微信小程序实现拼图小游戏
Oct 22 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
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
python 七种邮件内容发送方法实例
2014/04/22 Python
python使用webbrowser浏览指定url的方法
2015/04/04 Python
window下eclipse安装python插件教程
2017/04/24 Python
简述Python2与Python3的不同点
2018/01/21 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
用python写测试数据文件过程解析
2019/09/25 Python
浅谈django 重载str 方法
2020/05/19 Python
python与js主要区别点总结
2020/09/13 Python
Python Django路径配置实现过程解析
2020/11/05 Python
Python list和str互转的实现示例
2020/11/16 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
初中班主任经验交流材料
2014/05/16 职场文书
企业标语口号
2014/06/10 职场文书
质量月活动总结
2014/08/26 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书