パーセント数(0.0-2.0 / 0%-200%)を計算して、divが表示されたり表示されなくなったりするときに不透明度を変更できるようにしています。
- ウィンドウが表示可能領域の上にある場合、パーセントは0以下です
- ウィンドウが表示可能領域の正確な中心にある場合、パーセントは1.0です。
- また、ウィンドウが表示可能領域の下にある場合、パーセントは2.0以上です。
そして、ビューの内外にスクロールしている間、それはその一部になります。
どういうわけか、ウィンドウの垂直方向の中心を領域の垂直方向の中心と比較する必要がありますが、計算を正しく行うのに苦労しています。
これまでのところ私は
var p = {
scrollTop: $(window).scrollTop(),
documentHeight: $(document).height(),
windowHeight: $(window).height(),
contentTop: $('.content').position().top,
contentHeight: $('.content').height()
};
if (p.windowHeight / 2 + p.scrollTop < p.contentHeight / 2 + p.contentTop) {
p.percent = (p.windowHeight / 2 + p.scrollTop) / (p.contentHeight / 2 + p.contentTop);
}
else if (p.windowHeight / 2 + p.scrollTop > p.contentHeight / 2 + p.contentTop) {
p.percent = (p.windowHeight / 2 + p.scrollTop) / (p.contentHeight / 2 + p.documentHeight - p.contentHeight - p.contentTop);
}
else p.percent = 1;
$('.content').animate({
opacity: 1 - Math.abs(p.percent - 1)
}, 1);
しかし、私はドキュメントの高さを考慮していないので、何かが足りないことがわかります。また、これはif/elseなしで1つの方程式で実行できると思います
これが私が取り組んでいる機能していないフィドルです:http://jsfiddle.net/nxdTn/
より適切に示すために、以下の例を参照してください。
黄色はドキュメント、透明な灰色はウィンドウ、青色は表示可能領域です。
青は不透明度0になります:
100%の不透明度で:
そして0に戻ります: