位置: 编程技术 - 正文

解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法(js页面滚动到指定位置)

编辑:rootadmin

推荐整理分享解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法(js页面滚动到指定位置),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js控制滚动条到页面某个位置,js控制滚动条到页面某个位置,js前端页面滚动事件,js页面滚动到指定div,js前端页面滚动事件,解决js页面滚动问题,解决js页面滚动问题,js页面滚动到指定div,内容如对您有帮助,希望把文章链接给更多的朋友!

最近在做博客的目录功能,发现一个在现代浏览器间的一个bug,或是称之为差异,即页面滚动值(scrollTop)的获取与设定。

在此之前先说一下关于页面元素的坐标获取,这张图的经典性不必再提。

实现滚动到某位置功能

一个最主要的功能就是实现点击标题页面滚动,因为我们要滚动到页面某个标题,所以需要计算出滚动这个元素的具体绝对位置,而常用的offsetTop是获取到当前元素与之最近的决定其定位的元素的偏移量,此处不适用。

此处应使用浏览器原生提供的 getBoundingClientRect 接口,此函数返回的是元素距离浏览器各边距的绝对位置,跟是什么定位类型的无关,非常适合制作页面滚动效果。

获取滚动需要的数据, body 的 scrollTop 即页面已经被滚动所隐藏的高度,再根据上面提到的接口获取元素距离浏览器顶部的距离,可以算出需要的滚动的高度,关系图如下:

遂,页面要滚动到的位置就是:

这里顺带说下getBoundingClientRect().top 获取的元素在被滚动隐藏与非滚动时的区别:

如上图可以看出,即使要滚动到的元素部分在浏览器边界外,获取到的top即为负数,遂计算出来的页面高度依然是正确的。

点击目录跳转的功能就做完了,至今为止都很完美。

FireFox与Chrome的scrollTop的兼容问题

直到我今天在FireFox测试时发现,火狐下页面滚动的跳转功能无法使用。

解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法(js页面滚动到指定位置)

1、原生接口测试

这里先提一下:

document.documentElement 即 <html> 元素,而 document.body 即 <body> 元素。

测试结果,在火狐上只能通过html元素来获取和设定页面滚动高度,而在谷歌上反之只能用body元素来获取和设定。

2、jquery接口测试

上面是使用原生的scrollTop属性来获取与设定,而jquery自己也实现了对scrollTop属性的封装,可以试试他的兼容性。

发现采用 $(document) 可以实现对获取和设定scrollTop的兼容,大喜。

3、scrollTop动画实现测试

虽然实现了兼容,但为了有更好的效果,我希望采用动画的方式滚动到页面的某位置,而不是直接跳转,这里采用jquery的 animate 函数来实现。

发现虽然可以采用$(document)来实现获取和设定,但动画效果都无法使用,还是只能用body元素和html元素来实现。

最终解决方案

遂最完美的实现方案是:

获取或直接设定当前页面滚动高度:

有动画效果的设定当前页面高度:

标签: js页面滚动到指定位置

本文链接地址:https://www.jiuchutong.com/biancheng/387092.html 转载请保留说明!

上一篇:JS使用post提交的两种方式(javascript post语法)

下一篇:java必学必会之static关键字(javastudio)

  • 公司股东分红要交哪些税
  • 预缴税款如何抵扣苗木款
  • 水果店个体户怎么交税 广州
  • 业务招待费进项税
  • 银行对账单用英语怎么说
  • 摊销直线法会计分录怎么写?
  • 提取法定盈余公积会计分录
  • 其他货币资金包括
  • 材料折扣率
  • 高新技术企业一定是先进制造业吗
  • 农产品收购发票是普票还是专票
  • 货款和发票金额不符
  • 银行手续费要发票什么时候开始的
  • 一般纳税人企业是什么意思
  • 纳税人首次办税补充信息表怎么填
  • 企业收到要发放给员工的补贴
  • 公司注销了之后银行账户还能用吗
  • 现金短缺或溢余的账务处理业务题
  • 利得入什么科目
  • 一般纳税人房产税是按季还是按月申报
  • 一般纳税人企业所得税政策最新2023
  • 怎么查询企业的注册资金
  • 出售单位车辆如何处理业务?
  • 股东不发工资只给员工钱
  • 工程筹建期间发票怎么开
  • 如何在qq好友旁边打字
  • php的file函数
  • 在建工程如何转为成本费用
  • 未分配利润可以用来干什么
  • 税务登记 申报
  • php jsondecode
  • 将款项汇往外地采购专用账户会计分录
  • laravel 分层
  • 自然人税收管理系统扣缴客户端怎么操作
  • 什么叫点云数据
  • python单子
  • 股权转让怎样能不交税 认缴
  • 不动产固定资产的进项税抵扣新规定
  • 应付职工薪酬相关认定有哪些
  • 怎么从营业执照判断是一般纳税人
  • 进项税额转出会计分录
  • 个税的代扣代缴
  • 增值税普通发票查询
  • 企业所得税营业外收入
  • /kill @p
  • 小规模纳税人季报需要报什么
  • 固定资产一次性扣除政策
  • 建筑行业小规模纳税人和一般纳税人
  • 装修室内设计效果图
  • 应收账款的账期是什么意思
  • 一般纳税人固定资产处置税率
  • 简易计税方法缴纳城建税和教育税
  • 咨询费如何缴税
  • 债券分期付息到期还本的意思
  • 不同税率的产品可以开在同一张发票上吗
  • 结转存货跌价准备是什么意思
  • 哪些行业不适用作业法
  • 服务业差旅费是什么科目
  • sql server语句查询
  • mysql未知的服务器主机
  • 教你设置陌陌耳返
  • mac屏保怎么换
  • window102021年更新计划
  • win10 mobile 1709
  • window8怎么样
  • window10应用商店
  • win8玩游戏
  • 微信小程序自动跳转怎么关闭
  • excel乱码怎么转换
  • unity用visual
  • jquery easyui开发指南
  • 《噩梦》
  • python xml.dom.minidom模块生成xml
  • Python 专题四 文件基础知识
  • javascript数据类型有哪些
  • html做一个新闻app首页
  • js使用类
  • css怎么设置
  • jquery基本知识
  • 外经证开错了怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设