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+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
Jul 15 Javascript
javascript封装的sqlite操作类实例
Jul 17 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
Aug 11 Javascript
js友好的时间返回函数
Aug 24 Javascript
jQuery之动画效果大全
Nov 09 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
Jun 11 Javascript
微信小程序webSocket的使用方法
Feb 20 Javascript
小程序实现左滑删除的效果的实例代码
Oct 19 Javascript
JavaScript中遍历的十种方法总结
Dec 15 Javascript
JS数组索引检测中的数据类型问题详解
Jan 11 Javascript
Vue ECharts实现机舱座位选择展示功能
May 15 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
用PHP制作静态网站的模板框架
2006/10/09 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
laravel学习教程之存取器
2016/07/30 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
python获取交互式ssh shell的方法
2019/02/14 Python
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
C#面试题
2016/05/06 面试题
入团者的自我评价分享
2013/12/02 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
经典演讲稿汇总
2014/05/19 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
护士辞职信怎么写
2015/02/27 职场文书
员工手册编写范本
2015/05/14 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书