SMIL

SMIL是指同步多媒体集成语言(Synchronized Multimedia Integration Language)SVG相关的动画都是基于这种语言标准实现的

SMIL允许你做下面这些事情:

  • 动画元素的数值属性(X, Y, …)
  • 动画属性变换(平移或旋转)
  • 动画颜色属性
  • 沿着运动路径运动

其中前面三条CSS3都是可以实现的,就是最后一条,暂时还不能实现。当然啦SMIL这门标准的订立不是为了解决CSS3的缺陷的。

SVG的动画元素是和SMIL开发组合作开发的。SMIL开发组和SVG开发组合作开发了SMIL动画规范,在规范中制定了一个基本的XML动画特征集合。SVG吸收了SMIL动画规范当中的动画优点,并提供了一些SVG继承实现。

SVG 动画标签参数详解

前面章节中,我们了解了SVG具有四种主要的动画标签<set>,<animate>,<animateTranform>,<animateMotion>。

这一章主要讲其中参数的作用:

attributeName = <attributeName>

要变化的元素属性名称,可以是SVG标签上的属性,如font-size,width,height等,也可以是CSS属性,如opacity这些。这个属性跟下面的attributeType 一起使用。

attributeType=“CSS | XML | auto”

attributeType支持三个固定参数"CSS | XML | auto",用来表明定义在attributeName上面的属性值。比如我们定义的属性是属于SVG标签上的属性,那么直接设置attributeType=‘xml’,如果是设置css属性,则设置type值为css。auto为默认值,自动判别attributeName的属性是属于XML还是CSS(实际上是先当成CSS处理,如果发现不认识,直接XML类别处理)。因此,如果你不确信某属性是XML类别还是CSS类别的时候,我的建议是不设置attributeType值,直接让浏览器自己去判断,几乎无差错。

之所以需要这个attributeType,是因为有些属性,其实即是属于XML也是属于CSS,因此在设置的时候就需要标明一些属性的类别。

from,to,by,values

上面4个属性是一个系列的,用于表示动画执行过程的状态

from = “<value>” 动画的起始值。

to = “<value>” 指定动画的结束值。

by = “<value>” 动画的相对变化值。

values = “<list>” 用分号分隔的一个或多个值,可以看出是动画的多个关键值点。

from, to, by, values虽然属于一个家族,但是相互之间还是有制约关系的。有以下一些规则:

a. 如果动画的起始值与元素的默认值是一样的,from参数可以省略。

b. (不考虑values)to,by两个参数至少需要有一个出现。否则动画效果没有。to表示绝对值,by表示相对值。

c. 如果to,by同时出现,则by打酱油,只识别to。

e. values可以是一个值或多值。根据我在Chrome浏览器下的测试,是一个值的时候是没有动画效果。多值时候有动画效果。当values值设置并能识别时候,from, to, by 的值都会被忽略。 那values属性是干什么的呢?别看名字挺大众的,其还是有些功力的。我们实现动画,不可能就是单纯的从a位置到b位置,有时候,需要去c位置过渡下。此时,实际上有3个动画关键点。而from, to/by只能驾驭两个,此时就是values大显身手的时候了!

<svg width="600" height="600" xmlns="http://www.w3.org/2000/svg"><text font-size="120" y="150" x="160">SMIL<animate attributeName="x" values="160;40;160" dur="3s" repeatCount="indefinite" /></text>
</svg>

总结一下,可以设置的动画组合为from-to动画、from-by动画、to动画、by动画以及values动画。

begin, end

begin是指动画开始的时间。跟CSS3中的-delta有点像,但begin具备的功能比-delta多很多。

begin可以设置的值:

1、具体时间值 ‘h’ | ‘min’ | ‘s’ | ‘ms’这些,默认单位是’s’

2、偏移值,’+/-’,应该指相对于,某个操作的指,如begin=“x.end-1s”,

3、基于另一个动画的值,如某一个动画执行完成后开始执行,如begin=“x.end”

4、与事件关联的值,如点击时开始执行动画begin=“circle.click”

5、与某个动画执行次数相关的,比如某个元素执行2次后开始执行begin=“x.repeat(2)”

6、与键盘事件相关的,比如按下某个键开始执行 begin=“accessKey(s)”

<svg width="600" height="600" xmlns="http://www.w3.org/2000/svg"><text font-size="120" y="160" x="160">SMIL<animate attributeName="x" to="60" begin="accessKey(s)" dur="3s" repeatCount="indefinite" /></text>
</svg>
dur

动画执行的时长,可以设置的值为常规的时间值或者 ‘indefinite’。设置’indefinite’跟没有设置是一个意思。

calcMode, keyTimes, keySplines

用于设置动画执行的快慢,类似于CSS3中的 -timing-function

repeatCount, repeatDur

repeatCount表示动画执行次数,可以是合法数值或者”indefinite“(动画循环到电脑死机)。

repeatDur定义重复动画的总时间。可以是普通时间值或者”indefinite(”动画循环到电脑死机)。

fill

fill表示动画间隙的填充方式。支持参数有:freeze | remove. 其中remove是默认值,表示动画结束直接回到开始的地方。freeze“冻结”表示动画结束后像是被冻住了,元素保持了动画结束之后的状态。

accumulate, additive

accumulate是累积的意思。支持参数有:none | sum. 默认值是none。如果值是sum表示动画结束时候的位置作为下次动画的起始位置。

additive控制动画是否附加。支持参数有:replace | sum. 默认值是replace。如果值是sum表示动画的基础知识会附加到其他低优先级的动画上,

举个例子:

<animateMotion begin="0" dur="5s" path="M20,50 C20,-50 180,150 180,50 C180-50 20,150 20,50 z" additive="sum" fill="freeze" />
<animateMotion begin="5s" dur="5s" path="M 20,50 H 50 Q 30,80 30,50 Q 30,20 50,20 H 250 Q 280,20,280,50 Q 280,80,250,80Z" additive="sum" fill="freeze" />
<animateMotion begin="10s" dur="5s" path="M250,80 H40,30 20,10z" additive="sum" fill="freeze" />

这里轮到第二个动画的时候,路径是从第一个动画路径结束地方开始的,于是,3个动画完美无缝连接起来了。

<animateTransform attributeName="transform" type="scale" from="1" to="3" dur="10s" repeatCount="indefinite" additive="sum"/>
<animateTransform attributeName="transform" type="rotate" from="0 30 20" to="360 30 20" dur="10s" fill="freeze" repeatCount="indefinite" additive="sum"/>

这里,两个动画同时都是transform,都要使用一个type属性,好在这个例子additive="sum"是累加的而不是replace替换。于是,我们就可以是实现一边旋转一边放大的效果。

restart

用于设置动画是否可以重复执行。可设置的值为’always | whenNotActive | never’。always是默认值,表示总是,也就是点一次圈圈,马儿跑一下。whenNotActive表示动画正在进行的时候,是不能重启动画的。never表示动画是一波流。

min, max

表示动画执行的最短和最长时间。

动画暂停裕播放

SVG 提供一些js接口可以用于控制动画

// 暂停 svg.pauseAnimations();

// 重启动 svg.unpauseAnimations()

这一章主要是罗列一些动画标签的属性使用,涉及的值非常多。

SVG进阶-SMIL动画相关推荐

  1. 有关SVG中遮罩动画跳帧的问题分析

    0 结论 图片动画的 begin 参数值应设置 大于 0 的值,如 1s 具体可参考SVG SMIL动画的begin,end属性详解 1 问题代码分析 1.1 实现代码 首先看一个由SVG遮罩动画实现 ...

  2. svg配合css3动画_带有Adobe Illustrator,HTML和CSS的任何网站的SVG动画

    svg配合css3动画 A top trend in web design for 2020 is the increased use of SVG animations on web pages a ...

  3. 纯CSS实现帅气的SVG路径描边动画效果

    一.应该人人皆会的基础技术 简而言之,就是让SVG的描边像是有人绘制一样的动画效果. 国外很多相关介绍的文章,来看看一些效果gif吧~ 纯CSS实现帅气的SVG路径描边动画效果 纯CSS实现帅气的SV ...

  4. Flutter进阶—实现动画效果(四)

    在上一篇文章:Flutter进阶-实现动画效果(三)中,实现了一个随机高度.颜色的条形.这一篇文章我们会实现多个条形,同样是随机高度.颜色. 首先在bar.dart中创建BarChart类,并使用固定 ...

  5. Flutter进阶—实现动画效果(三)

    在上一篇文章:Flutter进阶-实现动画效果(二)的最后,我们实现了一个控件,其中包含各种布局和状态处理控件.以及使用自定义的动画感知绘图代码绘制单个Bar的控件.还有一个浮动按钮控件,用于启动条形 ...

  6. Flutter进阶—实现动画效果(二)

    在上一篇文章:Flutter进阶-实现动画效果(一)的最后,我们说到需要一个处理程序混乱的概念.在这一篇文章中,我们会引入补间,它是构建动画代码的一个非常简单的概念,主要作用是用面向对象的方法替代之前 ...

  7. Flutter进阶—实现动画效果(一)

    上一篇文章我们了解了Flutter的动画基础:Flutter进阶-解析动画,这一篇文章我们就来实现一个图表的动画效果. 首先,我们需要创建一个新项目myapp,然后把main.dart的内容替换成下面 ...

  8. CSS3 SVG波浪线条动画js特效

    下载地址 CSS3 SVG波浪线条动画特效是一款简单的线条波浪滚动,线条弯曲动画特效. dd:

  9. Unity3D-游戏ARVR开发进阶课程 - 动画系统-宋晓波-专题视频课程

    Unity3D-游戏ARVR开发进阶课程 - 动画系统-10610人已学习 课程介绍         本套视频培训课程中会深入学习Unity中的Mecanim动画系统.包括动画剪辑.动画控制器.动画状 ...

最新文章

  1. Github-Hexo-theme-NexT
  2. c#学习体会:使用 ref 和 out 传递数组
  3. CSDN公式编辑(latex语言应用)整理
  4. 744. 寻找比目标字母大的最小字母 golang
  5. mysql查询最小的id_Mysql查询表中最小可用id值的方法
  6. 5月21日伦敦见!荣耀20官宣:P30“同款”ToF镜头加持?
  7. UnderWater+SDN论文之六
  8. CSS学习总结(3)——CSS文本样式(属性)
  9. git 关于Git每次进入都需要输入用户名和密码的问题解决
  10. Ice简介+Qt代码示例
  11. jQuery形式可以计算,它包含了无线电的变化价格,select价格变化,删除行动态计算加盟...
  12. 最新emoji表情代码大全_7张最新有创意好看的早安问候动画表情图片 暖心的早上好问候祝福动态图片表情大全...
  13. mysql不是内部命令_mysql不是内部命令的错误解决方案
  14. 怎样用Python自制好看的指数估值图
  15. re,正则表达式,requests,爬取小猪短租网
  16. OneTab: 一键合并所有 Chrome 浏览器标签页
  17. 学术论文摘要写作技巧:
  18. Android实现QQ分享功能
  19. java 编程联系_《JAVA程序设计》结对编程联系_四则运算(第一周:阶段总结)...
  20. 一般什么企业需要开展等保三级测评工作

热门文章

  1. Arduino和Python实时监督控制和数据采集系统(SCADA)
  2. 四、WebScada-OSHMI的Modbus采集
  3. linux下一键部署mysql_linux下一键编译搭建mysql服务器脚本
  4. 什么是API测试?开发必知的8种API自动化测试类型
  5. Android 微信抢红包插件
  6. Raw use of parameterized class ‘xxxx‘ 警告
  7. ajax同步和异步区别
  8. 电脑怎么翻译图片中的文字?快速翻译图片文字的方法
  9. 优秀,是一种生活态度
  10. 大数据编程语言培训前景,怎么样?