SVG SMIL 动画(基本动画 、变换动画)

简介: SVG SMIL 动画(基本动画 、变换动画)

一、简介

  • 动画标签:<animate>、<animateTransform>、<animateMotion> ...
  • 动画元素、属性定位以及动画参数设置:
  • attributeNameattributeType
  • fromtodurrepeatCountfill
  • calcMode

二、使用方式

  • 定位动画目标
  • Internal Resource Identifier 定位,指定需要生效动画的标签
<animate xlink:href="url(#rect1)"></animate>
  • 包含在目标元素内,对包含的父元素生效动画
<rect x="0" ...>
    <animate></animate>
</rect>
  • 设置要进行动画的属性以及变化范围、时间长度
<animate xlink:href="url(#rect1)"
    attributeType="XML"
    attributeName="x"
    from="0" to="100"
    dur="2s"
    repeatCount="1">
</animate>

三、基本动画

  • animate 支持叠加动画,也就是同一个标签支持添加多个 animate 动画标签。
  • 效果

  • 代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    html,body {
      margin: 0;
      padding: 0;
      background-color: #001122;
      /* 全屏 */
      width: 100%;
      height: 100%;
      /* 清空字号,免得影响 svg */
      line-height: 0;
      font-size: 0;
    }
  </style>
</head>
<body>
  <!-- animate
    attributeType: 标签类型
    attributeName: 需要支持动画的属性
    begin: 动画开始时机
    from: 开始值
    to: 结束值
    dur: 动画时间
    fill: freeze(停留在最后)、none(默认,回到起点)
    repeatCount: 动画次数,indefinite(无限次),默认 1
    -->
  <!-- svg -->
  <svg width="100%" height="100%">
    <!-- 1 平移动画 -->
    <rect x="50" y="10" width="40" height="40" fill="red">
      <!-- 动画 -->
      <animate attributeType="XML"
        attributeName="x"
        from="50" to="200"
        dur="1s"
        repeatCount="indefinite"/>
      <!-- 颜色变化 -->
      <animate attributeType="XML"
        attributeName="fill"
        from="red" to="yellow"
        dur="1s"
        repeatCount="indefinite"/>
    </rect>
    <!-- 2 平移动画 - 往返 -->
    <rect x="50" y="80" width="40" height="40" fill="red">
      <!-- 动画 -->
      <animate id="goright1" attributeType="XML"
        attributeName="x"
        begin="0; goleft1.end"
        from="50" to="200"
        dur="1s"
        fill="freeze"/>
      <animate id="goleft1" attributeType="XML"
        attributeName="x"
        begin="goright1.end"
        from="200" to="50"
        dur="1s"
        fill="freeze"/>
      <!-- 颜色变化 -->
      <animate attributeType="XML"
        attributeName="fill"
        from="red" to="yellow"
        dur="1s"
        repeatCount="indefinite"/>
    </rect>
    <!-- 3 平移动画 - 往返 - 暂停 -->
    <rect x="200" y="150" width="40" height="40" fill="red">
      <!-- 动画 -->
      <animate id="goleft2" attributeType="XML"
        attributeName="x"
        begin="0; goright2.end + 1s"
        from="200" to="50"
        dur="1s"
        fill="freeze"/>
      <animate id="goright2" attributeType="XML"
        attributeName="x"
        begin="goleft2.end + 1s"
        from="50" to="200"
        dur="1s"
        fill="freeze"/>
      <!-- 颜色变化 -->
      <animate attributeType="XML"
        attributeName="fill"
        from="red" to="yellow"
        dur="1s"
        repeatCount="indefinite"/>
    </rect>
  </svg>
</body>
</html>

四、变换动画

  • animateTransform 支持叠加动画,也就是同一个标签不能添加多个 animateTransform 动画标签。
  • 效果

  • 代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    html,body {
      margin: 0;
      padding: 0;
      background-color: #001122;
      /* 全屏 */
      width: 100%;
      height: 100%;
      /* 清空字号,免得影响 svg */
      line-height: 0;
      font-size: 0;
    }
  </style>
</head>
<body>
  <!-- animateTransform
    attributeType: 标签类型
    attributeName: 需要支持动画的属性
    type: 子属性
    begin: 动画开始时机
    from: 开始值
    to: 结束值
    dur: 动画时间
    fill: freeze(停留在最后)、none(默认,回到起点)
    repeatCount: 动画次数,indefinite(无限次),默认 1
    -->
  <!-- svg -->
  <svg width="100%" height="100%" viewBox="-400 -400 800 800">
    <!-- 1 原地旋转 -->
    <rect x="0" y="0" width="40" height="40" fill="red">
      <!-- 动画 -->
      <animateTransform attributeType="XML"
        attributeName="transform"
        type="rotate"
        from="0"
        to="360"
        dur="3s"
        repeatCount="indefinite">
    </rect>
    <!-- 1 原地旋转 - 缩放 - 不支持多个动画叠加 -->
    <rect x="0" y="80" width="40" height="40" fill="red">
      <!-- 动画 -->
      <!-- <animateTransform attributeType="XML"
        attributeName="transform"
        type="rotate"
        from="0"
        to="360"
        dur="3s"
        repeatCount="indefinite"> -->
      <animateTransform attributeType="XML"
        attributeName="transform"
        type="scale"
        from="1"
        to="2"
        dur="3s"
        repeatCount="indefinite">
    </rect>
  </svg>
</body>
</html>

五、轨迹 Path 动画(animateMotion)

六、Scripting Animation(脚本动画)

七、参考文档


相关文章
|
1月前
Threejs实现动画
这篇文章讲解了如何使用Three.js实现动画效果,并介绍了如何控制动画的时间轴。
47 3
Threejs实现动画
|
1月前
|
JavaScript 开发者
HarmonyNext动画大全03-帧动画
HarmonyNext动画大全03-帧动画
16 2
|
1月前
|
JavaScript
ThreeJs实现简单的动画
这篇文章介绍了如何使用Three.js实现简单的动画效果,并提供了利用requestAnimationFrame动态改变模型状态的代码示例。
54 0
ThreeJs实现简单的动画
|
11月前
|
图形学 iOS开发
Unity——动效与缓动动画
Unity——动效与缓动动画
146 0
|
前端开发
CSS动画篇之404动画
CSS动画篇之404动画
149 0
SVG SMIL 轨迹 Path 动画(animateMotion)
SVG SMIL 轨迹 Path 动画(animateMotion)
109 0
|
前端开发
css实现画面转场以及边框线条动画
css实现画面转场以及边框线条动画
246 0
|
存储 文件存储 云计算
不瞒了,我们和追光动画有一个《杨戬》!
不瞒了,我们和追光动画有一个《杨戬》!
189 0
|
图形学
unity动画之帧动画使用
使用unity实现lol寒冰帧动画
unity动画之帧动画使用
|
前端开发
你可以学会的svg动画
你可以学会的svg动画