帮我理清了添加简单视差行为的正确逻辑。视差 - 偏移元素,与滚动相关
我想在页面上有多个元素,它们的顶部偏移一定的距离(例如300px)。然后,当您向下滚动页面时,一旦显示元素的顶部,它将缓慢向上移动(连接到滚动),直到元素的顶部到达视口的中间,此时它的顶部偏移量为0并保持原位。
我尝试使用第三方脚本(滚动魔术,星等),但是当我无法得到它,现在我想自定义代码:
https://jsfiddle.net/louiswalch/5bxz8fku/1/
var $Window = $(window);
var offset_amount = 400;
var window_height = $Window.height();
var window_half = (window_height/2);
var sections = $('SECTION.reveal');
sections.each(function() {
var element = $(this);
// Make sure we always start with the right offset
element.css({top: offset_amount});
$Window.bind('scroll', function() {
var viewport_top = $Window.scrollTop();
var viewport_middle = viewport_top + (window_height/2)
var viewport_bottom = viewport_top + window_height;
var element_top = element.offset().top;
if (element_top > viewport_top && element_top <= viewport_bottom) {
var distance_to_middle = (element_top - viewport_middle);
var amount_to_middle = (distance_to_middle/window_half);
console.log(amount_to_middle);
if (amount_to_middle >= 0) {
element.css({top: (offset_amount * amount_to_middle)+ 'px'});
} else {
// ? Lock to end position ?
}
}
});
});
感谢您的帮助,关于并发的想法!你的演示看起来不错,但它应该停止在最终位置,一旦进入框架50%并停止移动。所以一旦它滚动到位,当你向下滚动时,它们仍然粘在一起。基本上只显示,不做任何事。 –
对不起,以为它是“直到元素的顶部到达视口的中间,此时它的顶部偏移量为0,并且它保持原位”。无论如何,请不要急于求助,花点时间欣赏帮助。它非常接近。 –
@LouisW添加了一个演示,一旦两个元素触摸就保留0 Y位置! –