У меня есть следующая функция, которая уменьшает масштаб изображений после того, как они попадают в область просмотра. Прямо сейчас он присоединяет столько слушателей событий, сколько элементов. По соображениям производительности я хотел бы объединить их в один прослушиватель событий для всех элементов, но я не знаю как. Вот мой код:
HTML
<div class="image-wrapper">
<div class="image-container elem-1">
<div class="zoom-images">
<img class="zoom" src="test" alt="test">
</div>
</div>
<div class="image-container elem-2">
<div class="zoom-images">
<img class="zoom" src="test" alt="test">
</div>
</div>
<div class="image-container elem-3">
<div class="zoom-images">
<img class="zoom" src="test" alt="test">
</div>
</div>
</div>
JAVASCRIPT
$('.zoom').each(function() {
var el = $(this);
var inViewport = false;
var isZooming = false;
originY = 0;
window.addEventListener('scroll', throttle(zoomImage, 250), {passive: true});
function zoomImage() {
originY = $(window).scrollTop();
if (el.isInViewport()) {
if (!inViewport) {
inViewport = true;
}
} else {
if (inViewport) {
inViewport = false;
}
}
if (inViewport) {
if (!isZooming) {
window.requestAnimationFrame(function () {
el.addClass('is-zooming');
});
isZooming = true;
}
} else {
if (isZooming) {
window.requestAnimationFrame(function () {
el.removeClass('is-zooming');
});
isZooming = false;
}
}
};
$.fn.isInViewport = function() {
var elementTop = $(this).offset().top;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
return elementBottom > viewportTop && elementTop < viewportBottom;
};
});
Любая помощь будет принята с благодарностью! Большое спасибо!