页面存在多个相同的模块,需要在滚动到各个模块的位置时独立触发该模块的动画效果,实现思路是使用 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就触发那个的动画效果。