此页面介绍如何使用 anime.js 动画 SVG 元素。SVG(可缩放矢量图形)是一种创建独立于分辨率的图形的强大格式,而 anime.js 提供了专门的工具来动画 SVG 元素、属性、路径和描边。有关通用动画信息,请参阅基本用法;有关 JavaScript 对象动画技术,请参阅JavaScript 对象动画。
Anime.js 提供了几种专门的 SVG 动画工具
fill、stroke、stroke-width 等。该库提供了一个专用的 svg 对象,其中包含实用函数,可帮助实现复杂的 SVG 动画。
来源: lib/anime.esm.js349 lib/anime.esm.js1576-1616
Anime.js 在提供 SVG 元素作为动画目标时会自动检测它们。检测过程结合使用符号和类型检查来识别和正确处理 SVG 元素。
该库使用 isSvgSymbol 来标记 SVG 元素并跟踪其状态。当 SVG 元素注册为目标时,其属性和特性将与常规 DOM 元素不同地进行处理。
来源: lib/anime.esm.js348 lib/anime.esm.js496
Anime.js 可以动画化大多数 SVG 属性,包括
fill 和 stroke(颜色)stroke-width 和 stroke-dasharray(描边属性)r、cx、cy(圆形属性)x、y、width、height(位置和大小)d(路径数据)该库根据目标元素类型和属性名称,确定属性是作为属性还是 CSS 属性进行动画化。
对于 SVG 特定的属性,anime.js 使用 setAttribute 方法,而不是 style 属性。
来源: lib/anime.esm.js954-956 types/index.js590-592
morphTo 函数支持 SVG 路径之间的平滑变形。这对于创建形状变化动画特别有用。
该函数的工作方式是
SVG 路径变形可用于 <path> 元素和具有 points 属性的元素,例如 <polygon> 和 <polyline>。
来源: lib/anime.esm.js1582-1607 lib/anime.umd.js1582-1607
createDrawable 函数提供了一种强大的方式来创建线条绘制动画。它通过操作 stroke-dashoffset 和 stroke-dasharray 属性来控制路径的可见度。
该函数创建了一个围绕 SVG 元素的代理对象,该对象公开了一个特殊的 draw 属性,该属性可以从 0 动画到 1 来控制绘制进度。
来源: lib/anime.esm.js1608-1630 lib/anime.umd.js1608-1630
createMotionPath 函数允许元素沿 SVG 路径进行动画。这对于创建难以通过标准关键帧描述的复杂运动模式很有用。
该函数返回一个对象,其中包含 translateX、translateY 和 rotate 属性,这些属性可用于动画。每个属性都是一个函数,在沿路径的给定位置返回相应的值。
来源: lib/anime.esm.js1631-1638 lib/anime.umd.js1631-1638
Anime.js 使用 isSvg 函数检测 SVG 元素
当元素注册为目标时,它会被标记为带有多个符号
这些符号有助于库跟踪和管理 SVG 特定的状态和行为。
来源: lib/anime.esm.js347-349 types/index.js47-51
对于 SVG 元素,anime.js 使用 isValidSVGAttribute 函数来确定属性是作为属性还是 CSS 属性进行动画化。
这使得该库能够正确地将 fill、stroke 和 d 等属性作为 SVG 属性正确处理。
来源: lib/anime.esm.js1576-1583 lib/anime.umd.js1576-1583
您可以组合多种 SVG 动画技术来实现复杂的效果
这种方法允许通过不同动画类型之间的精确计时和协调来创建复杂的 SVG 动画。
SVG 动画,特别是路径变形和绘制,对于复杂的路径来说可能非常耗费性能。以下是一些优化 SVG 动画的技巧
SVG 动画功能在现代浏览器中得到了很好的支持。该库为不同环境提供了回退和兼容性检查。
Anime.js 使用此代码检测浏览器环境和 SVG 支持
这确保了 SVG 特定功能仅在支持时才使用。
来源: lib/anime.esm.js300-301 lib/anime.esm.js496
Anime.js 提供强大的 SVG 动画工具,通过
morphTo 将一个路径转换为另一个路径createDrawable 创建路径绘制效果createMotionPath 沿路径移动元素这些功能使得在保持库的简单、声明式语法的同时,能够创建复杂、引人入胜的 SVG 动画。