Мне нужно переместить несколько элементов вдоль оси Y примерно на 2 пикселя для каждого прокручиваемого 1 пикселя НО только после того, как элемент появился в поле зрения И элементы могут быть относительными или абсолютными ,
Моя цель - создать эффект параллакса с несколькими элементами, основанными на классе.
Вот код, который проверяет, отображается ли элемент
function isInViewport(node) {
var rect = node.getBoundingClientRect()
return (
(rect.height > 0 || rect.width > 0) &&
rect.bottom >= 0 &&
rect.right >= 0 &&
rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.left <= (window.innerWidth || document.documentElement.clientWidth)
)
}
Далее идет код, который проходит через каждый элемент с указанным c классом
$(window).scroll(function() {
var scrolled = $(window).scrollTop()
$('.parallax').each(function(index, element) {
// Check if the element is in the viewport.
var visible = isInViewport(this)
if(visible) {
// Move element up or down (depending on the scroll) by twice as many pixels as being scrolled
} else {
// Reset to original position
}
})
})
Отсюда я заблудился. Я испробовал много разных подходов, но ни один из них не сработал.
Пример: как только elementA появляется в поле зрения (делая это отправной точкой), позиция Top элемента должна меняться на каждый прокручиваемый пиксель плюс 2. Таким образом, как только элемент виден, мы начинаем с 0, и с этой точки для каждого прокручиваемого пикселя мы добавляем к нему 2 и перемещаем элемент на много пикселей от его начальной позиции.