位置: 编程技术 - 正文

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

  • 印花税计税依据含不含增值税
  • 代扣代缴境外增值税可以抵扣
  • 结转增值税会计凭证
  • 兼职人员的工资怎么算
  • 个体户做了定额还需要申报个税吗
  • 发票上盖了老税号怎么办
  • 外包工加工工资怎么结算
  • 减半征收附加税会计分录
  • 出口企业免抵税额在增值税申报表填写附表5
  • 法人存入公户实收资本可以还其他应付款吗
  • 汇算清缴补交的所得税怎么记帐
  • 公司成立后有哪些开支
  • 出口商品一定要有条形码吗
  • 通讯费要计入应付账款吗
  • 减免税费期末如何结转
  • 大中小型企业标准划分表
  • 手工发票有效期多久
  • 房屋抵债如何确定契税计税依据?
  • 速冻食品增值税税率
  • 个税如何绑定新公司
  • 垃圾清运属于什么大类
  • 怎么关闭iphone手机
  • 企业所得税征收标准
  • 企业银行存款如何管理
  • win10的病毒隔离有用吗
  • 公司向私人借款利息可以入账吗
  • 我辞职了公积金怎么交
  • uniapp示例
  • php课堂笔记
  • 出租不动产预缴增值税计算公式
  • 发票开错重新开票怎么做账务处理?
  • thinkphp框架结构
  • vue3项目实战
  • vue数据表
  • python0基础
  • spring5和6差别大吗
  • 暂估少了冲销时怎么办
  • 卖出周转材料的分录怎么做
  • 营业外支出贷方在利润表怎么体现
  • 外贸企业代理出口退税给谁
  • 个人所得税大病医疗夫妻双方怎么扣除
  • 开办费计入哪个会计科目
  • 织梦如何使用
  • 企业购买商铺会查征信吗
  • java sc
  • php网站修改
  • dedecms v6
  • 企业可以一次性现金的方式发放工资
  • mysql集群配置
  • 单位食堂账目
  • 表彰奖励奖金规定
  • 代扣代缴的增值税怎么做账
  • 资产负债表各项目占比
  • 生产成本是直接成本吗
  • 公司卖掉软件计入成本吗
  • 免费领课程有什么陷阱
  • 本年利润的会计分录
  • 怎么测试windows摄像头
  • freebsd安装pkg
  • windows8.1玩英雄联盟
  • windows注销登录会怎样
  • windows log在哪里
  • win7 64位系统无法清空回收站的故障原因及解决方法
  • win10系统如何去除记住密码
  • WIN10补丁白屏
  • 3dmax创建图形怎么用
  • js发送ajax请求
  • linux监控网络请求
  • angularjs删除数组元素
  • android开发基础知识
  • shell 数组操作
  • javascript运用
  • php爬取网页数据
  • 工会经费申报表在哪里查询
  • 办理税务迁移的流程
  • 北京市国家税务局发票查询平台
  • 内蒙古总工会工会经费
  • 上海市网上税务局如何登录
  • 四川企业退休人员80岁高龄补贴
  • 土地增值税采取什么税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设