我需要能够检测是否有滚动条(包括垂直和水平)在浏览器窗口上。我一直在使用这段代码,但它在Firefox5中不能可靠地工作。
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
});
}有没有一种更好的方法可以跨浏览器工作。我的浏览器目标是Firefox4-5,Chrome,Safari 4+,Opera 10+。
如果您对我为什么需要知道是否有滚动条感兴趣,这是因为我有一些旋转的CSS3过渡(由于其旋转的性质)可能会暂时超出当前文档大小的边缘(从而使文档暂时变大)。如果最初没有显示滚动条,CSS3转换可能会导致滚动条在转换期间显示,然后在转换完成后消失,从而导致难看的滚动条闪烁。如果我知道没有滚动条,我可以临时添加一个类,将overflow-x或overflow-y设置为隐藏,从而在CSS3转换期间阻止滚动条闪烁。如果滚动条已经存在,我不需要做任何事情,因为它们可能会稍微移动,但在转换过程中不会打开/关闭。
加分,如果一个人实际上不仅可以知道滚动条是否通常是必需的,而且它们是否真的存在。
发布于 2011-07-10 13:34:05
在一些浏览器(Safari和IE)中遇到David提出的滚动版本的闪烁问题后,我决定使用以下没有闪烁问题的代码:
function getScrollBarState() {
var result = {vScrollbar: true, hScrollbar: true};
try {
var root = document.compatMode=='BackCompat'? document.body : document.documentElement;
result.vScrollbar = root.scrollHeight > root.clientHeight;
result.hScrollbar = root.scrollWidth > root.clientWidth;
} catch(e) {}
return(result);
}它是我使用的衍生工具,一般的技术在fanfavorite发布的帖子中被引用。它似乎在我尝试过的所有浏览器中都有效,甚至在IE6中也是如此。出于我的目的,我希望任何失败都返回有一个滚动条,所以我以这种方式编写了失败条件。
注意:此代码不会检测是否已使用CSS强制打开或关闭滚动条。此代码检测是否调用了自动滚动条。如果您的页面可能具有控制滚动条的CSS设置,则可以获取CSS并首先对其进行检查。
发布于 2011-07-07 11:11:38
发布于 2011-07-07 12:12:51
这其实很简单。这将在所有现代浏览器中运行:
// try scrolling by 1 both vertically and horizontally
window.scrollTo(1,1);
// did we move vertically?
if (window.pageYOffset != 0) {
console.log("houston, we have vertical scrollbars");
}
// did we move horizontally?
if (window.pageXOffset != 0) {
console.log("houston, we have horizontal scrollbars");
}
// reset window to default scroll state
window.scrollTo(0,0);https://stackoverflow.com/questions/6605367
复制相似问题