博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTML5的 2D SVG和SVG DOM的学习笔记(2)---SVG动画
阅读量:6243 次
发布时间:2019-06-22

本文共 3607 字,大约阅读时间需要 12 分钟。

SVG支持动画。可以通过以下几种方法获得动画效果:

  • 使用SVG动画元素。SVG可以描述随时间变化的图形对象,使用不同的动画元素可以定义运动路径,淡入淡出效果和对象的膨胀、收缩、旋转和变换颜色。
  • 使用SVG DOM。SVG DOM兼容DOM1和DOM2,而SVG又定义了一套附加的DOM接口,支持脚本动画。通过这个方法可以获得各种动画效果。脚本语言中的定时器对象可以用来启动和控制动画。
  • SVG被设计为支持未来版本的SMIL(Sychronized Multimedia Integration Language)。SMIL将被模块化而与SVG及其它基于XML的语言连接,产生动画效果。

一、SVG中的动画元素

SVG中的动画元素有五个,它们都可以随着时间的变化而改变SVG元素的属性或样式值,如下所示:

  • <animate>:改变数值的属性或样式的值;
  • <set>:改变非数据值的属性或样式的值,如visibility属性等;
  • <animateMotion> 
    沿着某路径移动SVG元素获得动画效果, 该元素提供一种通过指定路径移动元素的简单方法。路径数据与路径元素的 d 属性相同,但用路径元素指定。也可以用 xlink:href 将它链接到 animateMotion 元素。起点和终点由 from 和 to 属性确定,并且可以通过将 rotate 值设为 auto 来设置对象垂直对齐于路径。(也可以将 rotate 属性设为 auto-reverse 以将这个方位改变 180 度。或者可以给定一个特定角度)。如动画和交互性所示:
     
  • <animateColor>:改变某些元素与颜色有关的属性或样式的值; 
 
  • <animateTransform>:改变SVG元素进行坐标变换时候的动画效果;
  • set:剩下的这个元素可以很容易地设置一个元素在指定时间段内的特殊属性

     attributeName="<attributeName>":批明所作用的SVG元素中哪个属性或样式需要产生动画效果。 

attrbuteType="<XML|CSS|auto>":指明产生动画效果的属性或样式值是哪个命名空间定义的。“XML”表示“attributeName”的值是默认XML命名空间里定义的XML属性名;“CSS”表示“attributeName”的值是默认CSS属性的名称;“auto”是默认值,解析器解析时先在CSS属性列表中查找是否有匹配“attributeName”的属性名,然后再在XML的命名空间里找 

1.与时间控制相关的常用属性

begin="<clock-time-value>|wallclock-sync-value|indefinite|eventName":定义动画的开始时刻。

  • a.时间偏移值,如3S表示3秒后开始播放动画(hh:mm:ss.xxxx)
  • b.现实世界中的时间,定义后要保证SVG文档要在这个时间之前打开
  • c.Endefinite:表示这个动画不会自动开始,需要使用动态脚本调用"beginElement()"方法或指向动画元素
  • d.eventName:表示在某个事件触发时开始播放动画。如begin="mousedown"
    • 1.dur="<clock-time-value>|indefinite":定义动画的持续时间
    • 2.end="<clock-time-value>|indefinite":定义动画的结束时间
    • 3.restart="always|whenNotactive|never":是否重播
    • 4.repeatCount:重复播放次数 indefinite表示无限重播
    • 5.repeatDur:定义动画播放总时间
    • 6.fil="freeze|remove":定义动画播放完毕后是停留在播放的终点还是回到起始位置

2.与过程控制相关的常用属性

from="<value>":定义该动画元素所作用的属性值在开始变化时的值

to="<value>":定义该动画元素所作用的属性值在结束变化时的值

by="<value>":定义该动画元素所作用的属性值每次变化的步长值

calcMode="discrete|linear|paced|spline":定义动画关键点直接过渡的插值计算方式

  • discrete表示不采用插值算法,动画是从一个关键点跳跃到另外一个关键点
  • linear表示采用线性插值算法,这是<animate>元素和<set>元素采用的默认插值算法
  • paced表示采用在埋单上均匀变化的方法来插值
  • spline表示采用三次贝塞尔曲线的方式来插值,需要"KeySplines"属性的配合

 例子1:

例子2:

 

例子3:

 二、事件的脚本编制(DOM动画)

象 HTML 页面一样,可以设置 SVG 图像以捕获某些事件(如点击鼠标和滚动),并用它们启动脚本。在构建简单SVG 图像时,可以通过属性捕获这些事件。最常用的是onclick、onactivate、onmousedown、onmouseup、onmouseover、onmousemove、onmouseout、onload、onresize、onunload 和 onrepeat。 

当这些事件之一被触发,就可以将事件对象本身提供给脚本,脚本反过来再用它确定哪个对象触发了该事件(也就是点击了什么对象)。然后脚本可以操纵那个对象的特性,如它的属性。 

这一示例回到了图案示例,但在此例中,当用户点击椭圆时,其填充由白色变为使用图案。

Scripting the onclick event
View Code

三、基本的声明性 (SMIL) 动画

Simplest SVG Animation
SVG declarative animation is used to rotate a square.
View Code

同样的效果用javascript来实现:

    JavaScript SVG Animation    
View Code

用SVGDOM来实现:

    JavaScript SVG Animation  
View Code

参考:

转载于:https://www.cnblogs.com/JoannaQ/p/3989621.html

你可能感兴趣的文章
mysql字段类型范围说明:int、bigint、smallint、tinyint,char、varchar、nvarchar
查看>>
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
查看>>
C# Socket编程(5)使用TCP Socket
查看>>
SQL SERVER IN参数化处理
查看>>
Python MongoDB Spatial Query
查看>>
NetBeans IDE 7.4 Beta版本build JavaFX时生成的可执行jar包执行时找不到依赖的jar包
查看>>
笔记本wifi热点设置好后,手机连上但不能上网问题
查看>>
Run ASP.NET MVC site on mac (mono/xamarin studio)
查看>>
win8.1安装驱动出现“文件的哈希值不在指定的目录”的解决办法[zz]
查看>>
CRM 常用SQL 脚本
查看>>
备忘录--关于线程和IO知识
查看>>
【iCore3 双核心板】例程八:定时器PWM实验——呼吸灯
查看>>
jquery tmpl 详解
查看>>
docker学习笔记4:利用docker hub上的mysql镜像创建mysql容器
查看>>
【Xamarin开发 Android 系列 3】循序渐进的学习顺序
查看>>
自定义列表dl的使用原因和场合
查看>>
Oracle11G 卸载步骤
查看>>
PHP递归生成树形数组
查看>>
学习RSA公开密钥算法
查看>>
教你摆脱低级程序猿 项目中cocopads的安装使用
查看>>