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

获取浏览器当前页面的滚动条高度的兼容写法,需要考虑文档的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。 逻辑与垂直滚动条相同。

posted @   王铁柱6  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示