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

GSAP Draggable轮播设置repeat:-1后拖拽异常的修复求助

修复GSAP horizontalLoop无限循环后的拖拽错乱问题

当给GSAP的horizontalLoop设置repeat: -1开启无限循环后,拖拽轮播会出现位置错乱,核心原因是:无限循环时动画进度会无限累加(比如第二圈进度为1-2、第三圈为2-3……),但horizontalLoop内置的拖拽逻辑默认基于0-1范围的单次循环进度计算位置,两者不匹配导致失控。

以下是两种可行的修复方案:

方法一:拖拽开始时修正进度(无需修改horizontalLoop源码)

不直接在horizontalLoop参数中传repeat: -1,而是手动开启循环后,监听拖拽开始事件,将时间线进度重置为当前循环周期内的相对进度:

// 创建轮播实例(暂不设置repeat)
const loop = horizontalLoop(boxes, { paused: false, draggable: true });
// 开启无限循环
loop.repeat(-1);
// 修复拖拽逻辑
loop.draggable.addEventListener("dragstart", () => {
  let currentProgress = loop.progress();
  // 取模得到0-1范围内的循环进度,兼容反向播放的负数情况
  currentProgress = currentProgress % 1;
  if (currentProgress < 0) currentProgress += 1;
  loop.progress(currentProgress);
});

方法二:修改horizontalLoop内部同步逻辑(更彻底)

找到horizontalLoop函数中负责同步拖拽与动画进度的sync方法,将进度计算改为基于循环后的相对进度:

// 替换原sync方法中的进度获取代码
// let progress = this.progress();

// 修改为:
let progress = this.progress() % 1;
if (progress < 0) progress += 1;

修改后,无论动画循环多少次,拖拽逻辑都会基于当前周期内的0-1进度计算位置,从根源避免错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:07:12