位置: 编程技术 - 正文

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

  • 其他应收款的对方科目有哪些
  • 交通补贴和通讯补贴怎么发合理
  • 个人独资公司可以控股其他公司吗
  • 印花税按什么征收
  • 上级拨付的固定资产增加类型是什么
  • 银行卡待报解预算收入是什么钱
  • 子公司注销资产负债表如何合并
  • 税务局代开的增值税专票可以红冲吗?
  • 自己开发自己施工的建筑单位怎么样
  • 厂房转让企业所得税计算方法
  • 税控盘怎么打票
  • 租赁到期日 英语
  • 纯出口企业要交税吗
  • 深圳制造业税收
  • 企业网银使用
  • 投资收益税前扣除标准
  • 增值税发票压线能用吗
  • 1697508669
  • 税局代开专票作废怎么做账
  • 少付的运费如何做分录
  • 1697510839
  • 取得失控发票
  • windows10你需要trustedinstaller提供的权限才能更改
  • 攀岗的企业性质有哪些
  • 华为手机网络拒绝接入怎么解决
  • linux命令df -h结果详解
  • 无法添加用户和组
  • PHP:xml_error_string()的用法_XML解析器函数
  • php使用js
  • 当月费用下月付款怎么做账
  • Windows 2003 SP2 简体中文版下载地址
  • 公司收入算认缴出资吗
  • 年度所得税报表在哪里查到
  • 领用自产库存商品
  • win7打开启动
  • php linux常用命令
  • 应收的罚款收入计入什么科目
  • 未分配利润可以转实收吗
  • zabbix 执行命令
  • spring boot整合hibernate
  • 前端开发工程师是干嘛的
  • js怎样遍历对象中的每个元素
  • php的序列化操作生成的哪种格式
  • 客户的赔偿金会计分录
  • 什么是子公司 和控股的区别
  • 金税盘登录密码和口令从哪查
  • 工程结算是否算成本
  • 固定资产每月计提还是每年计提
  • 企业汇总纳税的原则
  • 消耗品清单
  • 餐饮行业加盟模式
  • 开出银行承兑汇票一张用于支付材料采购款
  • 企业买期货账务处理
  • 销售一批产品给丙公司,该批产品标价200万yuan
  • 教育行业会计科目表
  • 收到银联商务客户短信
  • mysql8.0免安装
  • mysql未知的服务器主机
  • 微软2016是window多少
  • win7怎么创建新用户
  • 如何创建ubuntu安装教程
  • linux内核模块编译步骤
  • fedora使用
  • windows8家庭版和专业版区别
  • 开机慢怎么解决 w8
  • WIN10系统摄像头在哪打开
  • windows补丁kb3033929
  • vsftpd怎么配置
  • windows10玩游戏卡吗
  • unity集训
  • unity3d需要什么语言
  • 三个文件怎么汇总到一个里
  • shell脚本 ftp
  • wxpython怎么用
  • javascript模块化与非模块化开发区别
  • jquery ajax结合thinkphp的getjson实现跨域的方法
  • 企业所得税税率10%
  • 税务局航天信息的操作流程
  • 广西电子税务局电话人工客服电话
  • 江西发票查询真伪查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设