首页 > 其他分享 >获取浏览器当前页面的滚动条高度的兼容写法

获取浏览器当前页面的滚动条高度的兼容写法

时间:2024-12-08 09:11:20浏览次数:8  
标签:浏览器 documentElement 兼容 滚动条 window scrollTop document 写法

获取浏览器当前页面的滚动条高度的兼容写法,需要考虑文档的documentElementbody元素,以及标准模式和怪异模式下的差异。以下是一种通用的兼容性写法:

function getScrollTop() {
  return Math.max(
    // Chrome, Firefox, IE (Edge) 标准模式下的兼容写法
    document.documentElement.scrollTop,
    // Chrome, Firefox, IE (Edge) 怪异模式下的兼容写法
    document.body.scrollTop,
    // iOS Safari 
    window.pageYOffset
  );
}

// 使用示例
let scrollTop = getScrollTop();
console.log("当前滚动条高度:", scrollTop);


// 另一种更简洁的写法,利用||运算符的短路特性
function getScrollTopConcise() {
  return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
}

// 使用示例
scrollTop = getScrollTopConcise();
console.log("当前滚动条高度 (简洁写法):", scrollTop);

解释:

  • window.pageYOffset: 这是获取滚动条高度的标准方法,在大多数现代浏览器中都支持,包括移动端浏览器。

  • document.documentElement.scrollTop: 在标准模式下,滚动条高度通常存储在documentElement(即<html>元素)的scrollTop属性中。

  • document.body.scrollTop: 在怪异模式下(没有声明DOCTYPE或声明了错误的DOCTYPE),滚动条高度可能存储在body元素的scrollTop属性中。

  • Math.max(...)||: 使用Math.max||运算符可以确保在不同浏览器和模式下都能获取到正确的值。 || 运算符利用了短路求值的特性,如果 window.pageYOffset 有值(非0),则直接返回该值;否则继续判断下一个,直到找到一个非0的值或返回 0。

  • 0 (在简洁写法中): 如果所有其他方法都失败,则返回 0,表示没有滚动。

建议:

优先使用 window.pageYOffset,因为它是最标准和最可靠的方法。简洁写法更方便,但在需要更精细的控制或需要处理一些特殊情况时,Math.max 的写法可能更清晰。

额外说明: 对于水平滚动条,可以使用 window.pageXOffsetdocument.documentElement.scrollLeftdocument.body.scrollLeft。 逻辑与垂直滚动条相同。

标签:浏览器,documentElement,兼容,滚动条,window,scrollTop,document,写法
From: https://www.cnblogs.com/ai888/p/18593018

相关文章

  • CEF 浏览器内核的嵌入与实例化
    在实际的CEF浏览器应用开发中,如何高效地嵌入和实例化CefBrowser对象,如何管理浏览器的生命周期,以及如何实现浏览器进程和主程序进程之间的通信是至关重要的技术点。本节将深入探讨如何创建和管理CefBrowser实例,如何进行浏览器进程与主程序进程的通信,确保数据交互流畅且稳......
  • Python Selenium 各浏览器驱动下载与配置使用(详细流程)
    1、安装pipinstallselenium2、浏览器驱动下载Chrome(google)浏览器驱动下载地址:http://chromedriver.storage.googleapis.com/index.html 或 https://sites.google.com/a/chromium.org/chromedriver/home. 下载地址:http://chromedriver.storage.googleapis.com/inde......
  • 您与该网站的连接不是私密连接,存在安全隐患,解决浏览器提示连接不安全的问题
    如果你只是普通访客,不用理睬,忽略即可。如果你是网站站上,请检查网站证书部署。当浏览器提示“您与该网站的连接不是私密连接,存在安全隐患”时,说明该网站的SSL证书存在问题,导致数据传输不安全。以下是一些解决方法:检查证书有效期:确认证书是否已过期。如果已过期,需要更新证......
  • 输出与文件编码的兼容性 在 .CMD 文件中,通过正确的编码方式(如 UTF-8),可以确保脚本与外
    在计算机科学和技术领域,.CMD和.BAT文件都属于批处理脚本文件格式,它们是Windows操作系统中用于执行命令的一种文件类型。虽然这两者非常相似,但.CMD文件有一些相对于.BAT文件的优势,特别是在Windows2000及以后版本中。下面将分析.CMD文件相对于.BAT文件的一些优势,并......
  • 商品展示滚动条及算法
     1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title></title>6<style>7*{8margin:0;9padding:......
  • node的事件循环和浏览器的事件循环有什么区别?
    Node.js和浏览器的事件循环虽然都是基于事件驱动的架构,但它们在实现和一些细节上有所不同。主要区别如下:1.I/O处理:浏览器:浏览器中的I/O操作主要依赖于WebAPIs(例如:fetch,XMLHttpRequest,setTimeout等)。浏览器负责管理这些API,并在操作完成后将相应的事件添加到事......
  • 如何让背景图片固定不随滚动条滚动?
    要让背景图片固定不随滚动条滚动,可以使用CSS的background-attachment:fixed;属性。以下是如何在你的CSS代码中实现它的方法:body{background-image:url("your-image.jpg");/*你的图片路径*/background-repeat:no-repeat;/*可选:控制图片是否重复*/backgr......
  • 虚拟机(VM)鸿蒙开发软件(DevEco Studio)不能同时使用Hyper-v/解决未开启Hyper-V,开启Hy
    目录问题一:方法:问题二:方法:问题三:方法:解决你的问题,先看问题三,如果没有问题三,再看问题一二!!!!!!问题一:如果你同时用虚拟机(VMware)和鸿蒙开发软件(DevEcoStudio),你在解决了我下面说的问题三后,虚拟机不能用了,显示:解决VMwareWorkstation与Hyper-V不兼容。请先从系......
  • 纯js可定制的跨浏览器日期时间选择器插件
    Rome是一款纯js可定制的跨浏览器日期时间选择器插件。该日期时间选择器不依赖于jquery,但它依赖于moments.js。可以通过CSS文件来自定义该日期时间选择器的外观样式。在线预览 下载  安装可以通过Bower或nmp来安装该日期时间选择器插件。npminstall--saveromebower......
  • 防止浏览器记住密码
    一、问题引入客户要求登录时,不能被浏览器截取记录密码  二、问题分析问题的根源就在于浏览器会捕捉你的password的输入记录,以最后一次为节点进行存储。所以不管我们对password做什么处理,只要是password进行了输入,都会被拦截。三、解决方案使用css属性-webkit-text-securi......