Как определить, есть ли полосы прокрутки в окне браузера?

Мне нужно иметь возможность определять, есть ли полосы прокрутки (как вертикальные, так и горизонтальные) в окне браузера. Я использовал этот код, но он не работает надежно в 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 как скрытый и, таким образом, предотвратит мигание полосы прокрутки во время перехода CSS3. Если полосы прокрутки уже присутствуют, мне не нужно ничего делать, потому что они могут немного двигаться, но они не будут включаться / выключаться во время перехода.

Бонусные баллы, если можно действительно сказать не только, будут ли полосы прокрутки обычно требуются, но независимо от того, есть они на самом деле или нет.

6
задан jfriend00 7 July 2011 в 04:02
поделиться