GSAP ScrollTrigger对多个相同class类名的元素独立应用滚动触发的动画效果

Web前端开发 / 123 次阅读

页面存在多个相同的模块,需要在滚动到各个模块的位置时独立触发该模块的动画效果,实现思路是使用 document.querySelectorAll 获取所有元素获取并通过 forEach 循环遍历元素,然后为每个元素单独创建动画和滚动触发器。

示例:为所有 .box .name 元素添加「滚动到元素时淡入」的效果

Html 代码:

<div class="box">
	<div class="name">Element 1</div>
</div>
<div class="box">
	<div class="name">Element 2</div>
</div>
<div class="box">
	<div class="name">Element 3</div>
</div>

Javascript 代码:

// 获取所有元素
const boxes = gsap.utils.toArray(".box");

// 遍历每个元素
boxes.forEach((box,index)=>{
    const name = box.querySelector('.name');	
    gsap.set(name, {
        y:'-50%',
    });
    gsap.to(name, {
        scale: 0.8,
        y:0,
        duration: 13,
        scrollTrigger: {
            trigger:box,
            start: 'top 50%',
            end: "top top",
            scrub: true,
            toggleActions: 'play reverse play reverse',
        },
    });
});

这样即可实现滚动到哪个box就触发那个的动画效果。