如果元素在视口中 - 停止滚动动画

Posted

技术标签:

【中文标题】如果元素在视口中 - 停止滚动动画【英文标题】:If element is in viewport- stop scroll animation 【发布时间】:2015-04-08 11:40:08 【问题描述】:

您好,我学习了一个教程:http://css-tricks.com/slide-in-as-you-scroll-down-boxes/

它工作得很好,但是,当一个元素已经在视口中时(比如如果浏览器很小并且页面已经加载),那么 jQuery 不会添加 CLASS 以进行转换,直到滚动之后。

有没有办法在加载时检查一个元素是否已经在视口中,然后添加一个“已查看”类?

【问题讨论】:

【参考方案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;
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

谢谢..它几乎为正文中的所有内容提供了 .already-viewed 的课程,因此它取消了一些课程-弄乱了我的 css ..有什么想法吗? 您好,抱歉,它工作了一秒钟,然后我删除了不必要的 JS 文件,现在所有元素都获得了“已查看”类。这是我正在开发的网站:www.ranchosanvalentin.com。如果该块已经在视图中,则该元素具有“animBlock”类,那么它应该将“已查看”类添加到它。因为现在,如果它在视图中,它不会出现在屏幕上,直到你滚动 如果可以的话,可以创建“stacksn-ps”blog.***.com/2014/09/…,jsfiddlejsfiddle.net来演示吗? 尝试将选择器更改为 document.querySelectorAll("animBlock") 是的!这有帮助!但它删除了该 div 上的另一个类。关于如何添加类(不删除)的任何方式。非常感谢!

以上是关于如果元素在视口中 - 停止滚动动画的主要内容,如果未能解决你的问题,请参考以下文章

在 konvajs 中动画阶段滚动

禁用 iPad 水平滚动

scrollreveal(页面滚动显示动画插件支持手机)

前端必知:如何判断元素出现在视口内(性能优化涉及)

前端必知:如何判断元素出现在视口内(性能优化涉及)

Flash - 停止动画循环