1

ブラウザウィンドウに垂直スクロールバーがあるかどうかを検出しようとしています(コンテンツがウィンドウの高さを超えてオーバーフローした場合)。document.body.scrollTop私は、、、window.pageYOffsetそしてdocument.body.style.height...  を試しましたが、これらはどれも機能していません!これらのプロパティで初期化された変数でテスト

を実行すると、スクロールバーの有無に関係なく常に0が返され、他の2つは空の文字列のように見えるものを返します。私の唯一の考えは、CSSの位置の競合がこれを引き起こしている可能性があるということですが、そのような競合はないようです...アイデア、解決策、回避策はありますか?window.alertpageYOffset

4

1 に答える 1

2

これ

window.innerWidth - document.documentElement.clientWidth

ブラウザウィンドウの垂直スクロールバーの幅を返し0ます。スクロールバーがない場合は返します。

だから、あなたは機能を持つことができます...

function windowHasVerticalScrollbar () {
    return window.innerWidth - document.documentElement.clientWidth > 0;
}

残念ながら、IE8とIE7はwindow.innerWidthこの値をサポートしていないため、この手法はこれらのブラウザーでは機能しません。(ただし、IE9および他のすべてのブラウザーでは機能します)。

また、documentElement<html>要素(Webページのルート要素)であるため、その要素にスタイル(マージン、絶対位置など)を設定すると、計算で誤った結果が返される場合があります。

于 2012-04-11T23:07:49.137 に答える