【问题标题】:document.body.scrollTop is always 0 in IE even when scrollingdocument.body.scrollTop 在 IE 中始终为 0,即使在滚动时也是如此
【发布时间】:2010-04-26 22:04:10
【问题描述】:

我在移动鼠标时在状态栏中显示 document.body.scrollTop 的值。在 IE 中该值始终为 0。为什么总是0?还有其他方法可以获取滚动条移动了多少?

【问题讨论】:

  • 我赞成选择的答案,因为似乎没有其他人这样做(除非有人反对它)。如果你能回答尼克的问题就好了。

标签: html css


【解决方案1】:

您可能想在 IE 中尝试使用旧文档类型:

var top = (document.documentElement && document.documentElement.scrollTop) || 
              document.body.scrollTop;

【讨论】:

  • 如果document.documentElement 未定义,那不是炸弹吗?我认为您在三元表达式的第一部分是指document.documentElement 而不是document.documentElement.scrollTop。 :)
  • @Vivin - 它不是未定义的,只是没有设置滚动属性,导致 0/false。
  • 这个可以简写成var top = document.documentElement.scrollTop || document.body.scrollTop;
  • 你以为你可以做一个简单的 ||手术?查克·泰斯塔。如果您尝试访问 documentElement 的属性 .scrollTop,它将会崩溃。最佳(阅读:非爆炸性)解决方案:var top = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
  • 在 iOS 中使用 document.documentElement.scrollTop 时要小心。它将始终报告 0。如果您需要实际测试 scrollTop==0 则此开关将不起作用。
【解决方案2】:

此函数提供了读取滚动偏移量的跨浏览器实现:

function posTop() {
            return typeof window.pageYOffset != 'undefined' ? window.pageYOffset: document.documentElement.scrollTop? document.documentElement.scrollTop: document.body.scrollTop? document.body.scrollTop:0;
        }

【讨论】:

  • 谢谢,这是唯一适用于旧版 IE 和最新版 Chrome 的答案。
【解决方案3】:

根据 DOCTYPE,您必须使用 document.body.scrollTopdocument.documentElement.scrollTop。你试过第二个吗?

你可以这样做:

var scrollTop = document.documentElement ? document.documentElement.scrollTop :
                                           document.body.scrollTop;

我在研究您的问题时遇到了这些链接:

这可能会对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2019-06-06
    • 2015-09-23
    • 2019-09-27
    • 2014-07-10
    相关资源
    最近更新 更多