位置: 编程技术 - 正文

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

  • 劳务发票要交多少税费
  • 季度报表的利润表是填本月数填六月的书吗
  • 利息费用和利息支出的区别计算公式
  • 金三财务报表如何更正
  • 研发费用可以结转以后年度抵扣吗对吗
  • 预付款项包括哪些项目
  • 简易计税的销项税怎么处理
  • 购买金蝶软件计入什么费用
  • 预缴增值税转入流程
  • 商品过期可以向商家索要赔偿吗
  • 显示发票离线,应当如何处理
  • 购买房产,税费怎么计算
  • 288000元大写怎么写
  • 社保显示已录入什么意思
  • 房地产开发企业什么意思
  • 营业收入与主营业务收入的区别与联系
  • 电费发票和实际交的钱不一样怎样支付
  • u盘bios设置usb启动
  • 前端 vue
  • widows11预览版
  • 没有了睡眠功能
  • 销售已使用过的小汽车增值税
  • 企业接受股权投资概念政府基金
  • 建造一座污水处理池投资了45万元
  • 酒店行业存货周转率多少合适
  • 暴风雪的寒冷
  • 限售股交易征税是多少
  • 温哥华瀑布
  • 坎塔布莱恩
  • 生产车间工资计提
  • vue脚手架安装命令
  • 银行承兑汇票应由在承兑银行开立存款账户的存款人签发
  • CNN卷积神经网络/手写数字识别[VHDL][MATLAB]带源码
  • vuexy
  • opencv教程
  • 拿到领料单如何做账
  • 命令行查看git版本
  • python描述器有什么用
  • 应交增值税一般是多少
  • mysql的union语句
  • CentOS 6.5 x64系统中安装MongoDB 2.6.0二进制发行版教程
  • 织梦系统
  • 普通发票有什么
  • 电子发票和纸质发票的优缺点
  • mysql中删除语句怎么写
  • 残疾人保障金为负数
  • 应交税费的账务处理一般纳税人
  • 城镇土地使用税征收标准及计算方法
  • 发票抬头是个人的可以报销吗
  • 服装公司的会计怎么做账
  • 代理记账服务业务内容
  • 支付给劳务人员劳务费需缴纳印花
  • 个人所得税如果不补税会怎么样
  • 出差补贴算工资吗
  • 科技经费使用
  • 非包销的视同买断的账务处理是?
  • 预付账款借方如何结转
  • 小规模纳税人可以抵税吗
  • 职工教育经费可以结转几年继续抵扣吗
  • 什么是加计扣除农产品进项税额
  • 通过SQL绘制杨辉三角的实现方法介绍
  • win 9x
  • mac怎么用浏览器
  • service是什么程序
  • 苹果电脑如何缩小屏幕显示
  • winmgm32.exe - winmgm32 是什么进程
  • emule.td文件怎么打开
  • windows102021年更新
  • win7系统自动重启日志
  • opengl vs2017
  • Android游戏开发pdf
  • middle html
  • android系统架构由几部分组成
  • jQuery通过ajax快速批量提交表单数据
  • js中的!
  • python中字典怎么用
  • 安卓多线程有几种实现方法
  • javascript类定义
  • 国地税合并人员瘦身
  • 厦门市地方税务局市稽查局关于规范稽查有关规定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设