У меня активирована анимация ключевого кадра CSS, когда элемент прокручивается в поле зрения путем добавления класса к элементам, которые я хочу анимировать, только когда они прокручиваются в поле зрения. Он работает как положено в Firefox, но по какой-то причине он не работает в Chrome. Инструменты разработчика показали, что к элементу не добавляется класс start
, даже если он находится в порту просмотра. Любые идеи, почему это не сработает в chrome?
JQuery:
function isElementInViewport(elem) {
var $elem = $(elem);
// Get the scroll position of the page.
var scrollElem = ((navigator.userAgent.toLowerCase().indexOf('webkit') != -1) ? 'body' : 'html');
var viewportTop = $(scrollElem).scrollTop();
var viewportBottom = viewportTop + $(window).height();
// Get the position of the element on the page.
var elemTop = Math.round($elem.offset().top);
var elemBottom = elemTop + $elem.height();
return ((elemTop < viewportBottom) && (elemBottom > viewportTop));
}
// Check if it's time to start the animation.
function checkAnimation() {
var $elem = $('.parent-content-block .slide-in');
// If the animation has already been started
if ($elem.hasClass('start')) return;
if (isElementInViewport($elem)) {
// Start the animation
$elem.addClass('start');
}
}
// Capture scroll events
$(window).scroll(function () {
checkAnimation();
});
document.addEventListener("DOMContentLoaded", function() {
var elements = document.querySelectorAll(".slide-in");
// Intersection observer
var observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.intersectionRatio > 0) {
entry.target.classList.add("start");
}
});
});
elements.forEach((el) => {
observer.observe(el);
});
});
<div>
<img class="slide-in slide1" src="img.png">
<div style="height: 200vh">
scroll down
</diV>
<img class="slide-in slide1" src="img.png">
<img class="slide-in slide2" src="img.png">
<!-- other html... -->
</div>