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