javascript – 如何检测浏览器窗口中是否有滚动条?

前端之家收集整理的这篇文章主要介绍了javascript – 如何检测浏览器窗口中是否有滚动条?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要能够检测浏览器窗口上是否有滚动条(垂直和水平).我一直在使用这段代码,但它在Firefox 5中无法正常运行.
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过渡期间滚动条闪烁.如果滚动条已经存在,我不需要做任何事情,因为它们可能会移动一点,但它们不会在转换期间打开/关闭.

如果一个人实际上不仅可以告诉滚动条通常是否需要,而且它们是否实际存在,那么奖励积分.

解决方法

使用David在某些浏览器(Safari和IE)中提出的滚动版本遇到闪烁问题后,我已经确定了这个没有闪烁问题的代码
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并首先检查它.

猜你在找的JavaScript相关文章