これは私が思いついたものです。 scrollTopの値をキャッシュすると改善できると思いますが、これはかなり良いことです。私はboxtopsをキャッシュするためのフレームワークを含んでいますが、実装コードは含んでいません。私はdivを隠すためにスクロールダウンも実装しています。私はあなたのための運動としてアップスクロールでそれらをreshowingを残しました。
ウィンドウがスクロールされると、最後の非表示のdivが取得されます。このdivの前のすべてが既に隠されていることはわかっています。次に、 '次の要素が画面外にある間に'を使用して非表示にします。 divが画面から離れないとすぐに中止します。したがって、リスト全体を反復する時間を節約できます。
http://jsfiddle.net/kkv3h/2/
//track whether user has scrolled up or down
var prevScrollTop = $(document).scrollTop();
$(document).scroll(function() {
var currentScrollTop = $(this).scrollTop();
if (currentScrollTop > prevScrollTop) {
//down
var lasthiddenbox = $('.fadeboxhidden:last');
var nextbox = (lasthiddenbox.length > 0) ? lasthiddenbox.next('.fadebox') : $('.fadebox:first');
while (nextbox.length) {
console.log('box: ' + nextbox.offset().top + ' scroll: ' + currentScrollTop);
if (nextbox.offset().top < currentScrollTop) {
nextbox.animate({ opacity: 0 }, 3000).addClass('fadeboxhidden');
}
else { return; }
nextbox = nextbox.next('.fadebox:first');
}
} else {
//up
}
prevScrollTop = currentScrollTop ;
});
//create an object to hold a list of box top locations
var boxtops = new Object;
//gather all boxes and store their top location
$('.fadebox').each(function(index) {
//you may want to dynamically generate div ids here based on index. I didn't do this
//because i was already using the id for positioning.
var divid = $(this).prop('id');
boxtops[divid] = $(this).offset().top;
//console.log(boxtops[divid]);
});
あなたは、取ることができる最も最適である1知っているいくつかの方法があります:あなたのスクリプトは、(あなたが検出したいすべての要素の身元を知っているすなわち、それは一定の#です。要素)? – mattacular
私の質問に更新を見てください。 –
これは古い質問ですが、なぜあなたの背景色から0%の不透明度になるグラデーションであるcss要素がZ-インデックス99999などの画面の上部に固定されていないのでしょうか?余分なjや何かをロードする必要はありません。ちょっとした考え。 – Jacques