使用path和animateMotion构建有趣的SVG动画

SVG 基本形状

SVG 提供了一些基本的图形供用户选择:

  • 矩形rect
  • 圆形circle
  • 椭圆ellipse
  • 直线line
  • 折线polyline
  • 多边形polygon
  • 路径path

对于规则图形,基础的形状已足够使用,对于不规则的图形,path就派上了大用处。

Path

path 元素通过d属性定义图形的形状,以下是一个示例:

xml 复制代码
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-50.1 -16.9722 75.2 25.07">
	<path d="M -50 8
                 L -25 8 
                 L -25 -1 
                 L 0 -1 
                 M 0 -1 
                 L 0 -8 
                 L 25 -8 
                 L 25 -15 
                 M -47 5 
                 C -39 -8 -22 -7 -15 -5 
                 C -8 -17 6 -19 15 -15" 
              stroke="#FF0000" stroke-width="0.1" fill="none"/>
</svg>

效果图如下:

动画animateMotion

如何使用SVG的标签完成动画效果呢?

xml 复制代码
<svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
  <path
    fill="none"
    stroke="lightgrey"
    d="M20,50 C20,-50 180,150 180,50 C180-50 20,150 20,50 z" />

  <circle r="5" fill="red">
    <animateMotion
      dur="10s"
      repeatCount="indefinite"
      path="M20,50 C20,-50 180,150 180,50 C180-50 20,150 20,50 z" />
  </circle>
</svg>

animateMotion元素将path的值设置的与路径的d值一样,那么这个circle元素就按照定义的轨迹运动。

基于此,我们可以构建复杂的运动轨迹来完成一些有趣的动画!

示例一:

示例二:

相关推荐
吃饺子不吃馅17 天前
[开源] 从零到一打造在线 PPT 编辑器:React + Zustand + Zundo
前端·svg·图形学
吃饺子不吃馅21 天前
Canvas 如何渲染富文本、图片、SVG 及其 Path 路径?
前端·svg·canvas
用户98402276679181 个月前
【React.js】渐变环形进度条
前端·react.js·svg
明远湖之鱼1 个月前
opentype.js 使用与文字渲染
前端·svg·字体
wsWmsw1 个月前
[译] 浏览器里的 Liquid Glass:利用 CSS 和 SVG 实现折射
前端·css·svg
CodeCraft Studio1 个月前
CAD文件处理控件Aspose.CAD教程:在 Python 中将 SVG 转换为 PDF
开发语言·python·pdf·svg·cad·aspose·aspose.cad
红烧code2 个月前
【Rust GUI开发入门】编写一个本地音乐播放器(4. 绘制按钮组件)
rust·gui·svg·slint
吃饺子不吃馅2 个月前
AntV X6图编辑器如何实现切换主题
前端·svg·图形学
吃饺子不吃馅2 个月前
深感一事无成,还是踏踏实实做点东西吧
前端·svg·图形学
吃饺子不吃馅2 个月前
AntV X6 核心插件帮你飞速创建画布
前端·css·svg