Javascript 为什么scrollTop、pageYOffset和height都不起作用?

Javascript 为什么scrollTop、pageYOffset和height都不起作用?,javascript,height,scrollbar,offset,scrolltop,Javascript,Height,Scrollbar,Offset,Scrolltop,我试图检测浏览器窗口上是否有垂直滚动条(如果内容超过窗口高度并溢出)。我尝试了document.body.scrollTop,window.pageYOffset,以及document.body.style.height这些都不起作用在对使用这些属性初始化的变量执行窗口.alert测试时,pageYOffset始终返回0,无论是否有滚动条,其他两个返回的似乎是空字符串。我唯一的想法是,可能是CSS定位冲突导致了这一点,但似乎没有这样的冲突。。。有什么想法、解决方案和变通办法吗?这 window.

我试图检测浏览器窗口上是否有垂直滚动条(如果内容超过窗口高度并溢出)。我尝试了
document.body.scrollTop
window.pageYOffset
,以及
document.body.style.height
这些都不起作用

在对使用这些属性初始化的变量执行
窗口.alert
测试时,
pageYOffset
始终返回0,无论是否有滚动条,其他两个返回的似乎是空字符串。

我唯一的想法是,可能是CSS定位冲突导致了这一点,但似乎没有这样的冲突。。。有什么想法、解决方案和变通办法吗?

window.innerWidth - document.documentElement.clientWidth
返回浏览器窗口垂直滚动条的宽度,如果没有滚动条,则返回
0

所以,你可以有一个函数

function windowHasVerticalScrollbar () {
    return window.innerWidth - document.documentElement.clientWidth > 0;
}
不幸的是,IE8和IE7不支持
window.innerWidth
值,因此这种技术在这些浏览器中不起作用。(不过,它在IE9和所有其他浏览器中都能工作)


另外,由于
documentElement
元素(网页的根元素),如果在该元素上设置样式(如边距、绝对位置等),计算可能会返回不正确的结果。

太棒了!非常感谢你的努力。这似乎是一个严重的问题,许多人建议使用上述任何一种不起作用的方法。。。但这种方法非常有效。我现在唯一的问题是
innerWidth
offsetWidth
分别代表什么?@Ian Read on MDN:。注意:我现在使用的是
clientWidth
(而不是
offsetWidth
)-它现在可以在IE9中使用,可以了。谢谢你的帮助@Sime。