我有一个包含多行div的容器,我想从左到右依次进行动画处理,每个项目之间的时间间隔较短,但仅当该行位于滚动视口中时才可以。我不想将它们分组为html中的行,因为这些项目需要是每行4个项目,每行3个项目等等...基于屏幕大小。

我基本上想做下面的代码,但只在视口中的行上,当向下滚动页面时,为视口中的下一行设置动画...

$('.gallery-item').each(function(i){
    $(this).delay((i++) * 200).fadeTo(400, 1);
});


为了看到我想要达到的效果,请在firstborn studios工作页面上抢劫
http://www.firstborn.com/work/featured

任何帮助将不胜感激。

最佳答案

为什么不简单地添加一条线来检查元素是否在视口之外呢?我们可以假设视口中的所有元素都位于视口之外的元素之前(希望如此),因此您可以执行以下操作:

$('.gallery-item').each(function(i){
    if($(this).offset().top > window.innerHeight)
        return false;
    $(this).delay((i++) * 200).fadeTo(400, 1);
});


一旦元素在视口之外,我们就简单地取消循环。您甚至可以仔细检查,以便对视口内的所有元素进行检查,而不管其在流中的位置如何:

$('.gallery-item').each(function(i){
    if(
        $(this).offset().top < window.scrollTop + window.innerHeight
        && $(this).offset().top + $(this).height() > window.scrollTop
    ) $(this).delay((i++) * 200).fadeTo(400, 1);
});


仅当元素的顶部在视口内或它的底部在视口内时才执行。

关于javascript - 在滚动视口(viewport)中时,按顺序对元素进行动画处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35321269/

10-13 02:20