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

SVG使用animateMotion做步进动画calcMode=discrete不生效求解

问题原因

你为animateMotion设置calcMode="discrete"后仍出现插值过渡,是因为没有显式指定与路径顶点一一对应的关键帧映射规则:animateMotion的离散模式默认按路径总长度均匀切分步长,不会自动匹配你路径定义里的每个拐点位置。

解决方法

需要给animateMotion补充keyPoints和keyTimes两个属性,手动指定动画每一步要跳转到的路径位置以及对应的时间节点:

  • keyPoints:定义每一步落点在路径上的归一化位置(取值范围0~1,0为路径起点,1为终点),值之间用分号分隔,数量和路径顶点数一致
  • keyTimes:定义每一步跳转对应的时间节点(取值范围0~1,0为动画开始,1为动画结束),数量和keyPoints完全匹配

你的路径一共有14个顶点,对应13个步长间隔,修改后的完整代码如下:

<svg viewBox="0 0 15 21" fill='none' xmlns='http://www.w3.org/2000/svg'>
<path d="M 3 1 4 1 5 1 6 1 7 1 7 2 7 3 7 4 8 4 9 4 10 4 11 4 11 5 11 6" id='p1'/>
<rect width='1' height='1' fill='#000'>
    <animateMotion 
        dur="14s" 
        begin="0s" 
        calcMode='discrete'  
        fill="freeze"
        keyPoints="0;0.077;0.154;0.231;0.308;0.385;0.462;0.538;0.615;0.692;0.769;0.846;0.923;1"
        keyTimes="0;0.077;0.154;0.231;0.308;0.385;0.462;0.538;0.615;0.692;0.769;0.846;0.923;1"
    >
       <mpath href="#p1"/>
    </animateMotion>
</rect>
</svg>

如果要保持你第二份代码的7s时长,只需要把dur属性改为7s即可,步进逻辑不会变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:36:02