Если элемент находится в области просмотра - остановить анимацию прокрутки

Привет, я следовал за учебником: http://css-tricks.com/slide-in-as-you-scroll-down-boxes/

Однако он работает очень хорошо, когда элемент уже находится в области просмотра (например, если браузер небольшой и страница загружена), тогда jQuery не добавляет КЛАСС для перехода до прокрутки ПОСЛЕ.

Есть ли способ проверить, находится ли элемент в окне просмотра уже при загрузке, а затем добавить класс "уже просмотренных"?

1 ответ

Решение

Пытаться

var viewed = Array.prototype.map.call(document.querySelectorAll("body *")
             , function (el, i) {
                return (el.getBoundingClientRect().bottom <= window.innerHeight 
                    && el.getBoundingClientRect().left <= window.innerWidth) 
                    && $(el).addClass("already-viewed") && el
             }).filter(Boolean);

$(document).ready(function () {
    var body = $("body");
    $.each(new Array(180), function () {
        body.append(
        $("<img>"))
    });
    
    var viewed = Array.prototype.map.call(document.querySelectorAll("body *"), function (el, i) {
        return (el.getBoundingClientRect().bottom <= window.innerHeight 
               && el.getBoundingClientRect().left <= window.innerWidth) 
               && $(el).addClass("already-viewed") && el
    }).filter(Boolean);
    body
    .append("total images: " + $("img").length 
                + ", already viewed: " + $(".already-viewed").length);
    console.log(viewed.length, $(viewed))
});
body {
    width : 1000px;
    height : 1000px;
}
img {
    width : 50px;
    height : 50px;
    background : navy;
}
.already-viewed {
    outline:0.15em solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

Другие вопросы по тегам