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 相关文章推荐
jQuery性能优化28条建议你值得借鉴
Feb 16 Javascript
JS中对Cookie的操作详解
Aug 05 Javascript
微信小程序 获取设备信息 API实例详解
Oct 02 Javascript
微信小程序 基础知识css样式media标签
Feb 15 Javascript
js控制文本框禁止输入特殊字符详解
Apr 07 Javascript
AngularJS基于MVC的复杂操作实例讲解
Dec 31 Javascript
详解React开发必不可少的eslint配置
Feb 05 Javascript
Vue实现自定义下拉菜单功能
Jul 16 Javascript
详解vue 数组和对象渲染问题
Sep 21 Javascript
微信小程序拍照和摄像功能实现方法示例
Feb 01 Javascript
js实现头像上传并且可预览提交
Dec 25 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
Jan 15 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设计模式 Interpreter(解释器模式)
2011/06/26 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
smarty中post用法实例
2014/11/28 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
Cookie跨域问题解决方案代码示例
2020/11/24 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
keras 多任务多loss实例
2020/06/22 Python
python学习笔记之多进程
2020/08/06 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
药店收银员岗位职责
2015/04/07 职场文书
2015年维修工作总结
2015/04/25 职场文书
2016年寒假见闻
2015/10/10 职场文书
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers