我试图动画所有与班级匹配的元素"客户"在我们的页面上滚动进入视图。
我当前的版本:
$(window).on('scroll', function() {
if(!$('.customers').hasClass('animated')) {
if($('.customers').isOnScreen(0.45, 0.45)) {
TweenMax.staggerTo($('.customer'), 0.3, {bottom:"+=50px", opacity:1, ease: Power2.easeOut}, 0.15);
$('.customers').addClass('animated');
}
}
})
用于在第一个元素进入屏幕时为其设置动画,不幸的是,当它们在屏幕外时,它们也会激活其他元素。我想要发生的是每个匹配"客户"滚动到视图时动画。
(请注意,isOnScreen是一个在窗口中进行元素检测的自定义函数。)
我尝试过使用jquery的每个功能:
$(window).on('scroll', function() {
$('.customers').each(function( i ) {
if(!this.hasClass('animated')) {
if(this.isOnScreen(0.45, 0.45)) {
TweenMax.staggerTo($('.customer'), 0.3, {bottom:"+=50px", opacity:1, ease: Power2.easeOut}, 0.15);
this.addClass('animated');
}
}
})
我也尝试过包装每个"这个"声明为jquery元素为$(this)。
我得到了意想不到的行为,因为当我滚动时,元素会继续动画,即使他们应该有他们的动画"删除了类(我希望它们仅在第一次进入屏幕时进行动画处理。)
我认为我可能需要做的是创建一组客户,然后对阵列中的每个元素执行TweenMax,但我不确定这是否有效。
答案 0 :(得分:1)
这就是我认为你需要做的事情。
scroll
对象上有一个window
事件的监听器。陈述显而易见的。.customers
循环遍历each
元素。.customers
元素中的每个是否已经有animated
个类。如果,他们这样做,那么没有任何反应,但如果他们不这样做,其余的就会发生。.customers
检查当前.isonScreen()
元素是否在定义的视口区域中。TweenMax
动画在我们当前正在循环的当前.customer
元素中找到的.customers
个元素。请注意.customers
,父元素和子.cusotmer
元素之间的区别。请记住,我们在循环中,因此每个.customers
元素都会循环,然后我们会进一步尝试在每个元素中找到.customer
个元素。帮助我们找到内部.customer
元素的jQuery是:$(this).find('.customer')
。opacity: 0;
元素注释了.customer
行。我重新注释了它。.staggerFromTo
TweenMax
方法来定义一组初始属性以开始我们的补间,并结束另一组属性,所有这些都有一点错开< / em>在动画之间,所以他们不会同时出现,他们也不会在下一个播放之前等待彼此完成。这是一个重叠的动画。y
属性的属性,这是TweenMax
提供的一个特殊属性,它基本上是动画translateY(...)
属性的捷径。如果你用CSS做到了。.animated
元素上应用.customers
类。<强> JavaScript的:强>
$(window).on('scroll', function() {
$('.customers').each(function() {
if (!$(this).hasClass('animated')) {
if ($(this).isOnScreen(0.45, 0.45)) {
TweenMax.staggerFromTo($(this).find('.customer'), 0.3, {
y: 200,
opacity: 0
}, {
y: 0,
opacity: 1,
ease: Power2.easeOut
}, 0.15);
$(this).addClass('animated');
}
}
});
});
Here 是小提琴。希望这会有所帮助。