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