ブラウザウィンドウにスクロールバー(垂直方向と水平方向の両方)があるかどうかを検出できる必要があります。私はこのコードを使用していますが、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以降、Opera10以降です。
スクロールバーがあるかどうかを知る必要がある理由に興味がある場合は、CSS3トランジションが回転しているため、(回転の性質上)一時的に現在のドキュメントサイズの端を超える可能性があります(したがって、ドキュメントが作成されます)。一時的に大きくなります)。最初にスクロールバーが存在しなかった場合、CSS3トランジションにより、トランジション中にスクロールバーが表示され、トランジションが終了すると消えて、スクロールバーが醜く点滅する可能性があります。スクロールバーが存在しないことがわかっている場合は、overflow-xまたはoverflow-yをhiddenに設定するクラスを一時的に追加して、CSS3の移行中にスクロールバーが点滅しないようにすることができます。スクロールバーがすでに存在する場合は、少し動く可能性があるため何もする必要はありませんが、移行中にオン/オフになることはありません。
スクロールバーが一般的に必要かどうかだけでなく、実際にそこにあるかどうかを実際に知ることができる場合のボーナスポイント。