我需要能够检测浏览器窗口是否有滚动条(垂直和水平)。我一直在使用这段代码,但在Firefox 5中它无法可靠地工作。
有没有更好的方法可以跨浏览器实现这个功能。 我的浏览器目标是 Firefox 4-5、Chrome、Safari 4+ 和 Opera 10+。
如果您想知道为什么需要知道是否存在滚动条,那是因为我有一些旋转的CSS3过渡效果(由于它们的旋转特性),可能会暂时超出当前文档大小的边缘(从而使文档暂时变大)。 如果最初没有滚动条,则CSS3过渡效果可能会在过渡期间导致滚动条出现,然后在过渡结束时消失,从而产生丑陋的滚动条闪烁现象。 如果我知道不存在滚动条,则可以临时添加一个设置overflow-x或overflow-y为hidden的类,并在CSS3过渡期间防止滚动条闪烁。 如果已经存在滚动条,则无需做任何事情,因为它们可能会移动一点,但在过渡期间不会开/关。
额外加分如果能够判断滚动条是否必需并且是否实际存在。
JFL.GetScrollbarState = function () {
var myWidth = 0;
var myHeight = 0;
if (document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
myHeight = document.documentElement.clientHeight;
} else {
myWidth = document.body.clientWidth;
myHeight = document.body.clientHeight;
}
return ({
vScrollbar: document.body.scrollHeight > myHeight,
hScrollbar: document.body.scrollWidth > myWidth
});
}
有没有更好的方法可以跨浏览器实现这个功能。 我的浏览器目标是 Firefox 4-5、Chrome、Safari 4+ 和 Opera 10+。
如果您想知道为什么需要知道是否存在滚动条,那是因为我有一些旋转的CSS3过渡效果(由于它们的旋转特性),可能会暂时超出当前文档大小的边缘(从而使文档暂时变大)。 如果最初没有滚动条,则CSS3过渡效果可能会在过渡期间导致滚动条出现,然后在过渡结束时消失,从而产生丑陋的滚动条闪烁现象。 如果我知道不存在滚动条,则可以临时添加一个设置overflow-x或overflow-y为hidden的类,并在CSS3过渡期间防止滚动条闪烁。 如果已经存在滚动条,则无需做任何事情,因为它们可能会移动一点,但在过渡期间不会开/关。
额外加分如果能够判断滚动条是否必需并且是否实际存在。
offsetHeight
而不是clientHeight
吗? - kazinix