You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个GSAP函数,实现ScrollTrigger联动多元素动画?

解决GSAP ScrollTrigger同时控制多个元素动画的问题

你可以通过GSAP Timeline实现同一个ScrollTrigger控制多个元素的动画,既能复用触发配置,又能保证动画同步执行。

修正后的代码

const anim_img = document.querySelectorAll('.info__block_img');
const anim_text = document.querySelectorAll('.info__block_text');

for (let i = 0; i < anim_text.length; i++) {
  // 创建时间线并绑定ScrollTrigger
  gsap.timeline({
    scrollTrigger: {
      trigger: anim_text[i],
      markers: true,
      start: '-40% center',
      end: 'center center',
      scrub: 1
    }
  })
  // 添加图片动画
  .to(anim_img[i], {
    scale: 1,
    opacity: 1
  })
  // 添加文本动画,第二个参数0表示和上一个动画同时启动
  .to(anim_text[i], {
    margin: 0,
    opacity: 1
  }, 0);
}

关键说明

  • Timeline的作用:把多个动画整合到一个时间线中,只需给时间线配置一次ScrollTrigger,所有子动画都会共享这个触发逻辑,避免重复配置。
  • 同步执行动画:第二个.to()方法里的, 0参数,让文本动画和图片动画在时间线的0时刻同时启动,保证两者动画同步触发;如果需要先后执行,去掉该参数即可。

另一种简化方式(适合多元素有共同属性的场景)

如果两个元素有大量共同动画属性,也可以直接把多个元素放在同一个.to()的目标参数里:

for (let i = 0; i < anim_text.length; i++) {
  gsap.to([anim_img[i], anim_text[i]], {
    scrollTrigger: {
      trigger: anim_text[i],
      markers: true,
      start: '-40% center',
      end: 'center center',
      scrub: 1
    },
    opacity: 1, // 两个元素共同的属性统一设置
    // 针对不同元素的单独属性,用回调函数处理
    onUpdate: () => {
      anim_img[i].style.scale = '1';
      anim_text[i].style.margin = '0';
    }
  })
}

不过这种方式可读性不如Timeline,更适合属性高度重合的场景。

内容的提问来源于stack exchange,提问作者ghost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:10:33