写一个方法获取滚动条距离窗口顶部的距离

function getScrollTop() {
  /**
   * 获取滚动条距离窗口顶部的距离。
   *
   * @returns {number} 滚动条距离顶部的像素值。
   */
  if (typeof window.pageYOffset !== 'undefined') {
    // 对于现代浏览器,pageYOffset 是首选方式
    return window.pageYOffset;
  } else if (typeof document.documentElement.scrollTop !== 'undefined') {
    // 对于 IE 文档模式低于 9 的情况
    return document.documentElement.scrollTop;
  } else if (typeof document.body.scrollTop !== 'undefined') {
    // 对于旧版浏览器,例如 Quirks 模式下的 IE
    return document.body.scrollTop;
  } else {
    // 如果以上方法都失败,返回 0
    return 0;
  }
}


// 示例用法:
window.addEventListener('scroll', function() {
  const scrollTop = getScrollTop();
  console.log("滚动条距离顶部:", scrollTop);

  // 可以根据 scrollTop 的值执行其他操作,例如:
  if (scrollTop > 100) {
    // 当滚动条距离顶部大于 100px 时,显示“返回顶部”按钮
    // ...
  } else {
    // 隐藏“返回顶部”按钮
    // ...
  }
});


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

解释:

  • window.pageYOffset: 这是获取滚动条垂直位置最标准和推荐的方式,兼容大多数现代浏览器。

  • document.documentElement.scrollTop: 在标准模式下 (几乎所有现代浏览器默认都是标准模式),documentElement 表示 <html> 元素。如果 pageYOffset 不可用,则使用此方法。

  • document.body.scrollTop: 在 quirks 模式下 (旧版浏览器或未声明文档类型),body 元素可能被滚动。为了兼容性,也需要检查这个值。

  • || 0: 如果以上所有方法都返回 undefined,则返回 0,避免出现错误。

使用方法:

调用 getScrollTop()getScrollTopSimple() 函数即可获取当前滚动条距离顶部的像素值。 通常在 scroll 事件监听器中使用,以便动态更新滚动条位置。

更进一步:考虑兼容性与简洁性

虽然简洁的写法更方便,但为了更好的代码可读性和维护性,推荐使用第一种写法,清晰地展现了不同情况的处理逻辑。 如果项目对代码体积有严格要求,或者确定目标浏览器都支持 pageYOffset,则可以使用简洁写法。

posted @   王铁柱6  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示