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 相关文章推荐
window.showModalDialog使用手册
Jan 11 Javascript
Extjs学习笔记之六 面版
Jan 08 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
Dec 28 Javascript
JavaScript语言精粹经典实例(整理篇)
Jun 07 Javascript
浅析Jquery操作select
Dec 13 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
Jan 06 Javascript
js如何获取网页所有图片
May 12 Javascript
vue使用keep-alive实现数据缓存不刷新
Oct 21 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
jQuery仿移动端支付宝键盘的实现代码
Aug 15 jQuery
Vue.js实现的购物车功能详解
Jan 27 Javascript
使用layui实现树形结构的方法
Sep 20 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
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
2013/07/01 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
php中给js数组赋值方法
2014/03/10 Javascript
Express.JS使用详解
2014/07/17 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
python操作列表的函数使用代码详解
2017/12/28 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
python Celery定时任务的示例
2018/03/13 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
季度思想汇报
2014/01/01 职场文书
县优秀教师事迹材料
2014/01/31 职场文书
公司节能减排方案
2014/05/16 职场文书
音乐教师求职信
2014/06/28 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
呼兰河传读书笔记
2015/06/30 职场文书