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学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
关于js遍历表格的实例
Jul 10 Javascript
jQuery实现的简单拖动层示例
Feb 22 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
微信小程序 动态绑定数据及动态事件处理
Mar 14 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
Apr 08 jQuery
VS Code转换大小写、修改选中文字或代码颜色的方法
Dec 15 Javascript
详解vue 单页应用(spa)前端路由实现原理
Apr 04 Javascript
vue源码解析之事件机制原理
Apr 21 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
Sep 12 Javascript
详解JavaScript中的强制类型转换
Apr 15 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
Aug 26 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
当海贼王变成JOJO风
2020/03/02 日漫
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
php实现文件上传基本验证
2020/03/04 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
类似框架的js代码
2006/11/09 Javascript
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
理解javascript对象继承
2016/04/17 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
python抓取最新博客内容并生成Rss
2015/05/17 Python
python下MySQLdb用法实例分析
2015/06/08 Python
python实现微信防撤回神器
2019/04/29 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
安全员岗位职责
2013/11/11 职场文书
学生自我鉴定模板
2013/12/30 职场文书
境外导游求职信
2014/02/27 职场文书
安全技术说明书
2014/05/09 职场文书
红旗渠导游词
2015/02/09 职场文书
优秀党员个人总结
2015/02/14 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS