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

如何在PixiJS中实现进度条的平滑补间动画效果

方案1:PIXI原生Ticker实现帧同步补间(零依赖、性能最优)

PIXI自带的Ticker和渲染循环完全同步,不会出现定时器和渲染帧率不匹配导致的掉帧、卡顿问题,是进度条补间的首选方案:

// 作用域内提前定义变量
let currentProgress = 0 // 当前实际渲染的进度值
let targetProgress = 0 // 最终要到达的目标进度值
const easeFactor = 0.12 // 动画缓动系数,数值越小动画越平缓,可自行调整

// 缓入缓出三次函数,输入t范围0-1,输出0-1,需要非线性缓动时可以用
function easeInOutCubic(t) {
  return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2
}

// 绑定到PIXI全局渲染循环,每帧自动执行
PIXI.Ticker.shared.add(() => {
  // 线性缓动计算,需要非线性效果可替换为上面的easeInOutCubic做映射
  currentProgress += (targetProgress - currentProgress) * easeFactor
  // 修正浮点误差,快到目标值时直接对齐避免无限逼近
  if (Math.abs(targetProgress - currentProgress) < 0.01) {
    currentProgress = targetProgress
  }
  // 同步更新进度条位置
  progressBar.x = x + currentProgress
  progressBar.y = y
})

// 后续进度更新时,只需要修改targetProgress即可,不需要直接操作position
// 示例:进度更新到70%时执行
targetProgress = 70
方案2:补间库实现(少写代码、支持复杂效果)

如果需要更丰富的缓动效果、动画回调、暂停/取消控制,可直接用兼容PIXI的补间库,内部已经做了性能优化,仅需少量代码即可实现:

// 进度更新时调用,0.3为动画时长(单位:秒),可自行调整
gsap.to(progressBar.position, {
  x: x + newProgress,
  y: y,
  duration: 0.3,
  ease: "power3.inOut" // 内置数十种缓动效果可直接选用
})
注意事项
  • 不要用setInterval实现补间,定时器的执行时机和PIXI渲染帧不同步,容易出现卡顿、跳帧问题
  • 若存在多个进度条同时动画,把所有进度的更新逻辑合并到同一个Ticker回调中执行,性能比每个进度单独开回调更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:04