не могу решить задачу воспроизведения разовой анимации при скроле. Находил пример, только когда блок полностью в зоне видимости. Но надо как только он появляется в зоне видимости. Вот небольшой код:
$(".load-marker").addClass('load-not-active');
var $win = $(window);
var $marker = $('.load-marker');
$win.scroll(function() {
$marker.each(function() {
if ($win.scrollTop() + $win.height() >= $( this ).offset().top &&) {
...
} else {
...
}
});
});
но анимация у меня при этом срабатывает и для всех блоков выше текущего. То есть если пользователь обновит страницу и скролл останется по центру страницы, то анимация сработает и для все элементов, что выше его. А надо, чтобы анимация срабатывала только для того, что появляется в зоне видимости.
Тебе нужно определить высоту страницы, высоту элементов, высоту прокрутки и отступ элемента от края страницы. Попробуй вот такой код, здесь каждый див будет подсвечиваться только когда он полностью окажется в области видимости:
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<style type="text/css">
div {
width: 400px;
height: 400px;
margin-right: 100%;
background: #eee;
margin-bottom: 10px;
}
</style>
<script type="text/javascript">
var window_height = (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight));
window.addEventListener('scroll', function() {
var elements = document.querySelectorAll('div');
var top = document.body.scrollTop;
var find = false;
elements.forEach(function(el) {
var el_top = el.offsetTop;
if(el_top > top && ((el.clientHeight + el_top) < (top + window_height))) {
el.style.backgroundColor = "#999";
}
});
});
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости