SVG动画的begin和end属性通过绝对时间、相对时间、事件触发等方式实现多元素时间协同,支持分号分隔多条件,需注意ID唯一性、单位强制性、大小写敏感及动态修改后需调用unpauseAnimations()。

SVG动画的begin和end属性是实现多元素时间协同的关键,它们不依赖JavaScript即可完成精确的触发与终止控制,但需注意时序逻辑和事件绑定的细节。
begin属性:定义动画启动时机
begin支持多种值类型,决定动画何时开始。常用形式包括:
-
绝对时间:如
begin="2s",表示加载后2秒启动; -
相对时间:如
begin="circle1.begin + 1s",依赖另一个动画的起始点; -
事件触发:如
begin="click"或begin="button1.click",响应用户交互; -
重复触发:配合
repeatCount或repeatDur,可写成begin="0s; circle1.end + 0.5s"实现循环衔接。
注意:begin值中多个时间点用分号隔开,表示“任一满足即触发”,适合构建多入口启动逻辑。
end属性:精准控制动画终止节点
end用于显式结束动画,常用于中断、暂停或联动收尾。典型用法有:
立即学习“前端免费学习笔记(深入)”;
-
时间点终止:如
end="5s",强制在第5秒停止(即使动画原定持续6秒); -
事件驱动终止:如
end="mouseout",鼠标移出时立即停播; -
关联其他动画:如
end="rect2.begin",让当前动画在矩形2开始前结束; -
组合条件:支持分号分隔,如
end="click; 8s",点击或满8秒任一满足即停。
特别提醒:end仅终止动画效果,不重置元素状态;如需复位,应配合fill="freeze"或额外动画回退。
begin与end协同实现同步节奏
真正的时间协调依赖两者配合。例如实现“圆形放大→方形旋转→文字淡入”的链式流程:
- 圆动画:
<animate begin="0s" dur="1s" ... /> - 方动画:
<animate begin="circle1.end" dur="1.5s" ... /> - 文动画:
<animate begin="square1.end" end="text1.begin + 2s" ... />
此时若想在文字出现1秒后整体重播,可为整个<g>组添加begin="text1.begin + 1s"并绑定repeatCount="indefinite",形成可控循环节拍。
常见陷阱与调试建议
实际使用中容易忽略以下问题:
-
ID必须唯一且已声明:引用
circle1.end前,<circle id="circle1">必须存在且无重复ID; -
时间单位不可省略:写
begin="2"无效,必须是begin="2s"或begin="2000ms"; -
事件名区分大小写:应为
click而非Click,mouseover而非MouseOver; -
动态修改需重新解析:通过JS改
begin属性后,部分浏览器需调用svgElement.unpauseAnimations()激活新规则。
调试时可在浏览器开发者工具中检查getStartTime()和getCurrentTime()返回值,验证时序是否按预期加载。


















