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 相关文章推荐
sina的lightbox效果。
Jan 09 Javascript
兼容IE和FF的图片上传前预览js代码
May 28 Javascript
js获取客户端网卡的IP地址、MAC地址
Mar 26 Javascript
js实现回放拖拽轨迹从过程上进行分析
Jun 26 Javascript
基于jQuery实现动态数字展示效果
Aug 12 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
Nov 07 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
教你如何在Node.js中使用jQuery
Aug 28 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
Sep 05 Javascript
jQuery弹出层插件popShow(改进版)用法示例
Jan 23 Javascript
mui上拉加载更多下拉刷新数据的封装过程
Nov 03 Javascript
Bootstrap 树控件使用经验分享(图文解说)
Nov 06 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中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
php解析json数据实例
2014/08/19 PHP
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
详解Python使用tensorflow入门指南
2018/02/09 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
存储过程的优点有哪些
2012/09/27 面试题
语文教育专业推荐信范文
2013/11/25 职场文书
英语道歉信范文
2014/01/09 职场文书
销售业务员岗位职责
2014/01/29 职场文书
学习决心书
2014/03/11 职场文书
企业宣传标语
2014/06/09 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
大学辅导员述职报告
2015/01/10 职场文书
介绍信格式样本
2015/05/05 职场文书
同意落户证明
2015/06/19 职场文书
求职自我评价参考范文
2019/05/16 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers