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 相关文章推荐
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
javascript 清除输入框中的数据
Apr 13 Javascript
jQuery代码优化 遍历篇
Nov 01 Javascript
JS实现将人民币金额转换为大写的示例代码
Feb 13 Javascript
利用fecha进行JS日期处理
Nov 21 Javascript
js中删除数组中的某一元素实例(无下标时)
Feb 28 Javascript
详解Vue2.0里过滤器容易踩到的坑
Jun 01 Javascript
react-native-fs实现文件下载、文本存储的示例代码
Sep 22 Javascript
JavaScript中的事件与异常捕获详析
Feb 24 Javascript
vue-cli3 取消eslint校验代码的解决办法
Jan 16 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
Aug 03 Javascript
vue中配置scss全局变量的步骤
Dec 28 Vue.js
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
深入PHP5中的魔术方法详解
2013/06/17 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
使用Apache的rewrite
2021/03/09 Servers
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
Python短信轰炸的代码
2020/03/25 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
传播学毕业生求职信
2013/10/11 职场文书
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
单位承诺书格式
2014/05/21 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
Python实战之疫苗研发情况可视化
2021/05/18 Python
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python