divの範囲が外にスクロールされるとウィンドウの下部に「固定」されます。ユーザーがページの上半分を表示しているときだけ、この動作が必要です。ユーザーがページの下部にいるときに、fixed
状態がdivに適用されないようにします。上記の特定のdivの場合にのみ呼び出す関数
短く - 問題は、ページ位置に関係なく、divが表示範囲外のときにfixed
状態が適用されていることです。
デモhttps://jsfiddle.net/DTcHh/19352/
$(window).scroll(function() {
if (isScrolledIntoView($('#myDivWrapper'))) {
if (!initSet) {
initSet = true;
}
$("#myDiv").removeClass('fixed');
} else if (initSet) {
$("#myDiv").addClass('fixed');
}
});
function isScrolledIntoView(elem) {
var $elem = $(elem);
var $window = $(window);
var docViewTop = $window.scrollTop();
var docViewBottom = docViewTop + $window.height();
var elemTop = $elem.offset().top;
var elemBottom = elemTop + $elem.height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
おかげ - これの問題点は、上部が正確である場合にのみ動作することですページの半分。半分より大きければ、これはうまくいきません。https://jsfiddle.net/DTcHh/19378/質問のタイトルが改名されたので、それほどリテラルではありません。 –
ええ、私はアプローチの欠陥を知っています。私はちょうど文字通りタイトルを取った:) –