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

如何使用anime.js/velocity.js等库根据滚动位置设置动画进度?

方案说明

anime.js 本身就内置了你需要的进度控制能力,无需自行计算属性,也不需要引入更重的库,实现步骤如下:

  1. 改造原有动画声明,存储动画实例并禁用自动播放
    你原有的代码调整后如下,duration 可以随便设置,因为进度控制不会受动画时长影响:
const scrollAnimation = anime({
  targets: '.selector',
  opacity: 0.5,
  translateX: 200,
  duration: 1000,
  autoplay: false // 核心配置:禁止动画自动播放,完全由滚动控制进度
});
  1. 监听滚动进度直接控制动画进度
    anime.js 的动画实例支持直接修改 .progress 属性,传入 0-100 的数值即可对应动画的 0% 到 100% 进度,所有属性的中间值由 anime.js 自动计算:
window.addEventListener('scroll', () => {
  // 计算页面滚动进度,你也可以替换成任意滚动库的进度获取逻辑
  const totalScrollHeight = document.documentElement.scrollHeight - window.innerHeight;
  const currentScroll = window.scrollY;
  const scrollProgress = Math.min(100, Math.max(0, (currentScroll / totalScrollHeight) * 100));
  // 直接设置动画进度即可
  scrollAnimation.progress = scrollProgress;
});

效果验证

你提到的需求可以完全匹配:

  • 滚动进度 20% 时,opacity = 1 - (1-0.5)*0.2 = 0.9,translateX = 200 * 0.2 = 40px
  • 滚动进度 50% 时,opacity = 1 - (1-0.5)*0.5 = 0.75,translateX = 200 * 0.5 = 100px
    所有计算逻辑都由 anime.js 内部处理,不需要你手动维护属性计算规则。

其他轻量方案说明

如果你使用 velocity.js,也可以通过其内置的 progress 控制接口实现同等效果,但 anime.js 本身体积只有十几KB,已经是比 Gsap 轻量很多的选择,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:09:03