位置: 编程技术 - 正文

解决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)

  • 金税盘证书密码被锁死
  • 财产租赁所得怎么交税
  • 如何确定开票税率是否正确
  • 外贸企业出口退税流程图
  • 增值税应纳税额的计算
  • 企业所得税汇算清缴退税怎么做账
  • 公司出让上一任股东拥有的公司25%股权如何做账?
  • 建筑公司租赁费会计分录
  • 工会经费应税项怎么算
  • 发票第二年是否可以作废
  • 税控盘锁死提示什么
  • 上季度弥补以前年度亏损与本季度亏损
  • 包装物一次摊销的会计分录
  • 客户可以把现金存入对公户吗
  • 修理厂专票怎么开
  • 职工福利费包括五险一金吗
  • 差额征税的差额怎么算
  • 物业税额
  • 团建费用是什么意思
  • 出租房屋免租期如何确认收入
  • 无发票的费用怎么处理
  • linux如何将命令结果输出到文件
  • 每月计提的工资包含社保吗
  • 预收账款预提费用是什么
  • 固定资产报废如何计算
  • 重庆四日游最佳攻略超详细
  • 发票金额大于报销金额违法吗
  • 绝地求生闪退怎么解决win10
  • 讲述人功能怎么关闭
  • PHP:Memcached::append()的用法_Memcached类
  • 绣球花的叶子出现了斑点,这是怎么了?
  • win7系统禁用u盘
  • 为什么要进行税费改革
  • 利润表利息费用怎么填
  • 论文如何学
  • speedtest教程
  • thinkphp session存放位置
  • iozone测试结果分析
  • 活动补助会计分录
  • 施工企业内部常设置?主要出实验报告
  • 普票专票的销售额怎么理解
  • phpcms文档
  • 企业租赁厂房需要交什么税
  • 怎么查电子发票真伪
  • 一般纳税人应交税费二级科目有哪些
  • 航空公司可以开发票吗
  • 未满一年需要工商年报吗
  • 税务师工作年限证明材料
  • 未达起征点增值税申报表怎么填
  • 幼儿园的经费支出主要包括哪几个方面
  • 会计账簿有哪些作用
  • 股票期权的所得税处理
  • 一般纳税人购买原材料会计分录
  • 当月的银行日记账漏计怎么办
  • 公司注销留抵税额怎么做进项转出
  • 一般纳税人购进税控设备如何抵扣
  • 酒店开办费包括哪些项目
  • 考试出题
  • sqlserver数据库建库建表
  • solaris教程
  • zmweb.exe是什么进程
  • win10补丁导致无法开机
  • 该程序无法正常启动
  • ubuntu系统中文
  • Mac系统怎么设置开机密码
  • 怎么设置pe系统
  • sunasServ.exe - sunasServ是什么进程 有何作用
  • linux怎么查网络走向
  • root什么玩意
  • win7系统安装程序无法启动
  • javascript例子
  • express常用中间件
  • css怎么设置表单居中
  • 3dsMax插件开发环境配置
  • jQuery+ajax实现实用的点赞插件代码
  • 你家预收租金到哪里去了
  • 合伙企业如何申报税务报表
  • 购买房屋交契税
  • 重庆社保60%退休工资
  • 商品代码是啥
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设