Анимация, если блок в зоне видимости

314
04 июля 2017, 22:31

не могу решить задачу воспроизведения разовой анимации при скроле. Находил пример, только когда блок полностью в зоне видимости. Но надо как только он появляется в зоне видимости. Вот небольшой код:

$(".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 {
            ...
        }
    });
});

но анимация у меня при этом срабатывает и для всех блоков выше текущего. То есть если пользователь обновит страницу и скролл останется по центру страницы, то анимация сработает и для все элементов, что выше его. А надо, чтобы анимация срабатывала только для того, что появляется в зоне видимости.

Answer 1

Тебе нужно определить высоту страницы, высоту элементов, высоту прокрутки и отступ элемента от края страницы. Попробуй вот такой код, здесь каждый див будет подсвечиваться только когда он полностью окажется в области видимости:

<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";
        }
    });
});

READ ALSO
Генерация CSS кода

Генерация CSS кода

Недавно увидел сайт, у которого внутри одного файла стилей ~7000 строк CSS кодаТа вот, вопрос: весь этот код пишется вручную или чем-то сгенерирован?

364
Вытеснение с под fixed

Вытеснение с под fixed

Имеется страница, состоящая из двух основных блоков (header и

291
Как убрать отступы в textarea (Safari для iPad)?

Как убрать отступы в textarea (Safari для iPad)?

Столкнулся с такой проблемой, что у элемента textarea не получается полностью убрать отступ в Safari (iPad)Даже при margin: 0; padding: 0; border: 0; текст все равно...

320
Некорректно работает псевдоэлемент :before

Некорректно работает псевдоэлемент :before

При добавлении псевдоэлемента :before (добавил текст) добавленный элемент дублируетсяНе могу понять, почему

275