2015-09-07 6 views
5

を返す理由を説明http://codepen.io/anon/pen/NGqPNzscrollTopスプライト()は常にここでは0

CSSを参照してください:

html { 
    height: 100%; 
    overflow-y: hidden; 
} 
body { 
    height: 100%; 
    overflow-y: auto; 
} 

JS:

$('body').bind("scroll", function() { 
    if ($('body').scrollTop()) { 
     console.log('triggered!'); 
    } else { 
     console.log($('body').scrollTop()); 
    } 
    }); 

スクロールイベントはbody要素の上に発射されています。スクロールバーはbody要素上にあり、html要素やwindow要素上にはありません。では、なぜdocument.body.scrollTopまたは$( 'body')。scrollTop()が0を返しますか?

これでスクロールバーの位置を検出できる方法はありますか、高さを100%にするにはどうしたらいいですか。オーバーフロー:html要素に隠されていますか?

ありがとうございます!

+0

私はそれがWebKitのバグだと思います。 Firefoxで動作します。 https://code.google.com/p/chromium/issues/detail?id=423935 – Shikkediel

+0

ありがとうございます!私はbodyをoverflow-y hiddenに設定し、height 100とoverflow-y autoのラッパーdivを追加し、scrollイベント/ scrollTopはdivで機能します。 – tdj

答えて

3

overflow-y: hidden;があるためです。これを削除してからscrollTop()が動作します

+0

心が吹かれた、私は実際にオーバーフローした - x:隠された.... –

6

Shikkedielのコメントのおかげで、Webkitのバグのようです。 divをbodyのすぐ内側に配置し、scrollイベントをdivにバインドすると、それは機能します。

http://codepen.io/anon/pen/bVderq

CSS:

html { 
    height: 100%; 
    overflow-y: hidden; 
} 
body { 
    height: 100%; 
    overflow-y: hidden; 
} 
.scroll-wrapper { 
    height: 100%; 
    overflow-y: auto; 
} 

JS:

$('.scroll-wrapper').bind("scroll", function() { 
    if ($('.scroll-wrapper').scrollTop()) { 
    console.log('triggered!'); 
    console.log($('.scroll-wrapper').scrollTop()); 
    } else { 
    console.log($('.scroll-wrapper').scrollTop()); 
    } 
}); 
関連する問題