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

SVG.js 如何实现元素往返位置动画循环?新手技术问询

嘿,刚接触SVG.js的话,这个往返循环动画其实超容易实现!我给你分享两种实用方案,你可以根据自己的需求来选:

方法一:动画反转 + 循环回调

这种方式逻辑很直观:先让元素移动到目标位置,动画结束后再让它原路返回,最后把这个往返过程设置成无限循环。

// 先创建SVG画布
const draw = SVG().addTo('body').size(300, 200)

// 生成一个要做动画的矩形(你也可以换成其他元素)
const movingRect = draw.rect(50, 50).fill('#ff6347').move(20, 75)

// 第一步:定义"移动到目标位置"的动画(1秒完成)
const moveToTarget = movingRect.animate(1000).move(230, 75)

// 第一步动画结束后,执行返回动画并设置循环
moveToTarget.after(() => {
  // 回到初始位置的动画,loop(true)表示无限循环
  movingRect.animate(1000).move(20, 75).loop(true)
})
方法二:关键帧动画(更简洁灵活)

如果你想一次性定义完整的往返路径,用SVG.js的关键帧动画会更省心,代码也更紧凑:

const draw = SVG().addTo('body').size(300, 200)
const movingRect = draw.rect(50, 50).fill('#ff6347').move(20, 75)

// 用关键帧定义整个往返过程,直接设置循环
movingRect.animate({
  duration: 2000, // 整个往返过程耗时2秒
  loop: true,     // 开启无限循环
  ease: 'linear'  // 匀速运动,可选换成'in-out'实现缓动效果
}).keyframes({
  0: { x: 20 },   // 动画开始时的初始位置
  50: { x: 230 }, // 动画进行到50%(1秒时)到达目标位置
  100: { x: 20 }  // 动画结束时回到初始位置
})

小提示

  • 如果你不需要无限循环,把loop: true换成具体数字就行,比如loop: 3就是循环3次
  • 除了x轴移动,你也可以在关键帧里添加y轴、透明度、缩放等属性,实现更复杂的动画
  • 调整ease参数可以改变动画的节奏,比如'ease-in-out'会让动画的开始和结束阶段更平缓

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:36:25