位置: 编程技术 - 正文

详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题(页面滚动到底部)

编辑:rootadmin

推荐整理分享详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题(页面滚动到底部),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:页面滚动加载如何实现,页面滚动到指定位置,页面滚动设置,页面局部滚动,页面滚动高度,页面滚动高度,页面滚动条设置,页面滚动条设置,内容如对您有帮助,希望把文章链接给更多的朋友!

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

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

实现滚动到某位置功能

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

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

关于getBoundingClientRect函数的具体用法可以参见以下链接:链接1,链接2。

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

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

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

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

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

FireFox与Chrome的scrollTop的兼容问题

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

1、原生接口测试

这里先提一下:

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

详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题(页面滚动到底部)

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

2、jquery接口测试

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

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

3、scrollTop动画实现测试

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

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

最终解决方案

遂最完美的实现方案是:

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

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

最终效果可以点击本篇文章顶部的目录链接来查看效果:

jQuery CSS 操作 - scrollTop() 方法

实例

设置 <div> 元素中滚动条的垂直偏移:

定义和用法

scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置。scroll top offset 指的是滚动条相对于其顶部的偏移。如果该方法未设置参数,则返回以像素计的相对滚动条顶部的偏移。

语法

参数 描述 offset 可选。规定相对滚动条顶部的偏移,以像素计。

提示和注释

注释:该方法对于可见元素和不可见元素均有效。注释:当用于获取值时,该方法只返回第一个匹配元素的 scroll top offset。注释:当用于设置值时,该方法设置所有匹配元素的 scroll top offset。

jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介 触摸事件(touch)在jQueryMobile中有一些触摸事件是可定制的。然而,这些事件仅当与支持触摸功能的设备进行交互的用户访问您的jQueryMobile网站时才可用。

jQuery+jsp下拉框联动获取本地数据的方法(附源码) 本文实例讲述了jQuery+jsp下拉框联动获取本地数据的方法。分享给大家供大家参考,具体如下:JQuery下拉框联动很好的体现了Ajax的按需取数据的要求,减

JQuery移动页面开发之屏幕方向改变与滚屏的实现 方向改变事件(orientationchange)当设备的方向变化(设备横向持或纵向持)此事件被触发。绑定此事件时,你的回调函数可以加入第二个参数,作用为描述

标签: 页面滚动到底部

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

上一篇:jQuery 1.9.1源码分析系列(十五)之动画处理(jquery源码分析)

下一篇:jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介(jquery点击移动div)

  • 建筑企业印花税的计税依据
  • 个税申报专项扣除怎么填
  • 已经作为损失的资产以后纳税年度收回的会计处理
  • 其他应收款科目未经财务会计部门和运行管理部门
  • 进项税抵扣销项税怎么做账
  • 小企业会计准则适用于哪些企业
  • 长期股权投资的初始投资成本
  • 外币账户怎么操作
  • 股息红利需要企业交税吗
  • 公司车子的保养费怎么算
  • 增值税当月抵扣吗
  • 往年的制造费用怎么算
  • 固定资产清理属于
  • 生产企业出口退税流程
  • 核定征收的小微企业企业所得税计算
  • 租赁合同印花税税率2023
  • 关于增值税专用发票
  • 金融性负债总额是什么
  • 已交税的无票收入后期怎么补开发票?
  • 购买汽车可以开普通发票吗
  • 工会经费结余怎么记账
  • 电子汇款收入是什么意思
  • 土地增值税含房产吗
  • 费用报销交通费
  • win10怎么恢复被系统删除的文件
  • 含税价什么意思?
  • 什么是comsol
  • 车间整改的目的
  • 增值税年末结转是结转全年吗
  • 公司旅游费用怎么入账
  • mac休眠后黑屏无法开机正常吗
  • 在php中,字符串有哪些表示形式
  • 差旅费是否可以所得税前扣除
  • 小规模纳税人和一般纳税人哪个好
  • php的工作流程
  • 预收账款可以挂账多久
  • Honeybee flying over crocuses in the Tatra Mountains, Poland (© Mirek Kijewski/Getty Images)
  • 用库存现金支付装卸费
  • 核定征收开票超过限额
  • 我国的增值税是价外税消费税是价内税
  • Yii2 assets清除缓存的方法
  • vue的样式穿透
  • django中httpresponse
  • css媒体查询不起作用
  • ps闪退是什么原因win11
  • 印花税申报完成如何缴纳
  • 预收账款怎么变成应收
  • 织梦如何开启会员功能
  • 开具红字增值税普通发票
  • 以摊余成本计量的债权投资与以公允价值计量且其变动
  • 电子税务局增值税抵扣流程
  • 税金及附加减半征收金额按哪个
  • 已经认证抵扣的发票会计分录
  • 哪些票据属于会计票据
  • 折旧完的固定资产出售
  • 专利权转让的条件
  • 股东投入固定资产怎么做账
  • 健身中心开的服装店
  • 税收滞纳金计入营业外收入的哪里
  • 员工体检的发票在哪里开
  • 公务机票保险费能报销吗
  • 教育行业会计科目表
  • 积分中的换元怎么使用
  • 教你彻底消灭牛身上的蜱虫
  • Win7 64位系统没有超级终端软件的解决方法
  • RadioSvr.EXE - RadioSvr是什么进程 有什么用
  • opengl图形裁剪
  • javascript零基础
  • python中元组和列表
  • python中生成随机小数的函数
  • python怎么弄中文
  • JavaScript中的数据类型分哪为两大类?
  • 基于javascript的毕业设计
  • java项目怎么变成web项目
  • Android使用领域(移动端,PC,服务端)
  • 关联企业之间借款的税收处理
  • 深圳大学各专业组代码
  • 免抵税额在增值税申报表附表
  • 消费税是单一环节征税吗
  • 企业应交个人所得税分录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设