千家信息网

HTML5中SVG 用户交互性动画介绍及应用是怎样的

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,今天就跟大家聊聊有关HTML5中SVG 用户交互性动画介绍及应用是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。交互性SVG拥有良好的用
千家信息网最后更新 2025年01月20日HTML5中SVG 用户交互性动画介绍及应用是怎样的

今天就跟大家聊聊有关HTML5中SVG 用户交互性动画介绍及应用是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

交互性
SVG拥有良好的用户交互性,例如:
1. SVG能响应大部分的DOM2事件。
2. SVG能通过cursor良好的捕捉用户鼠标的移动。
3. 用户可以很方便的通过设置svg元素的zoomAndPan属性的值来实现缩放等效果。
4. 用户可以很方便的把动画和事件结合起来,完成一些复杂的效果。
通过给SVG元素挂接事件,我们可以使用脚本语言方便的完成一些交互任务。SVG支持大部分的DOM2事件,例如:onfocusin, onfocusou, onclick, onmousedown, onmouseup, onmousemove, onmouseout, onload, onresize, onscroll等事件。除了这些,SVG还提供了独有的动画相关的事件,比如:onroom,onbegin,onend,onrepeat等。
事件大家比较熟悉,就不多说了。

动画的方式
SVG采用的是使用文本来定义图形,这种文档结构非常适合于创建动画。要改变图形的位置、大小和颜色,只需要调整相应的属性就可以了。事实上,SVG有为各种事件处理而专门设计的属性,甚至很多还是专门为动画量身定做的。在SVG中,实现动画可以有下面几种方式:
1. 使用SVG的动画元素。这个下面会重点介绍。
2. 使用脚本。采用DOM操作启动和控制动画,这个已经是一门成熟的技术了,后面有一个小例子。
3. SMIL(Synchronized Multimedia Integration Language)。这个有兴趣的请参考:http://www.w3.org/TR/2008/REC-SMIL3-20081201/。
下面的例子包含了SVG中几种最基本的动画

代码如下:


xmlns="http://www.w3.org/2000/svg" version="1.1">
基本动画元素
fill="none" stroke="blue" stroke-width="2" />

fill="rgb(255,255,0)">
begin="0s" dur="9s" fill="freeze" from="300" to="0" />
begin="0s" dur="9s" fill="freeze" from="100" to="0" />
begin="0s" dur="9s" fill="freeze" from="300" to="800" />
begin="0s" dur="9s" fill="freeze" from="100" to="300" />




font-family="Verdana" font-size="35.27" visibility="hidden">
It's alive!
begin="3s" dur="6s" fill="freeze" />
begin="3s" dur="6s" fill="freeze" />
from="rgb(0,0,255)" to="rgb(128,0,0)"
begin="3s" dur="6s" fill="freeze" />
type="rotate" from="-30" to="0"
begin="3s" dur="6s" fill="freeze" />
type="scale" from="1" to="3" additive="sum"
begin="3s" dur="6s" fill="freeze" />




把这段代码放到html文档的body中运行一下就可以知道动画的效果。

动画元素的公共属性
第一类:指定目标元素和属性
xlink:href
这个应该是很熟悉了,指向执行动画的元素。这个元素的必须是在当前的SVG文档片段中定义的。如果没有指定这个属性的话,动画会应用到自己的父元素上。
attributeName = ""
这个属性指定了应用动画的属性。如果该属性有namespace的话(不要忘了,SVG本质是XML文档),这个namespace也要加上。例如下面的例子中分别给xlink起了不同的别名,这里animate指定属性的时候就带了namespace:

代码如下:


xmlns:xlink="http://www.w3.org/1999/xlink">
Demonstration of the resolution of namespaces for animation








attributeType = "CSS | XML | auto(默认值)"
这个属性指定了属性取值的命名空间,这几个值的含义如下:
CSS:代表attributeName指定的属性是CSS属性。
XML:代表attributeName指定的属性是XML默认命名空间下的属性(注意svg文档本质上是xml文档)。
auto:代表先在CSS属性中查找attributeName指定的属性,如果没找到,则在默认的XML命名空间下寻找该属性。
第二类:控制动画时间的属性
下列属性都是动画时间属性;它们控制了动画执行的时间线,包括如何开始和结束动画,是否重复执行动画,是否保存动画的结束状态等。
begin = "begin-value-list"
该属性定义了动画的开始时间。可以是分号分开的一系列时间值。也可以是一些其他触发动画开始的值。比如事件,快捷键等。
dur = Clock-value | "media" | "indefinite"
定义了动画的持续时间。可以设置为以时钟格式显示的值。也可以设置为下列两个值:
media:指定动画的时间为内部多媒体元素的持续时间。
indefinite:指定动画时间为无限。
时钟格式指的是下列这些合法的取值格式:

代码如下:


:30:03= 2 hours, 30 minutes and 3 seconds
:00:10.25 = 50 hours, 10 seconds and 250 milliseconds
:33 = 2 minutes and 33 seconds
:10.5 = 10.5 seconds = 10 seconds and 500 milliseconds
.2h= 3.2 hours = 3 hours and 12 minutes
min = 45 minutes
s = 30 seconds
ms = 5 milliseconds
.467= 12 seconds and 467 milliseconds
.5s = 500 milliseconds
:00.005 = 5 milliseconds


end = "end-value-list"
定义了动画的结束时间。可以是分号分开的一系列值。
min = Clock-value | "media"
max = Clock-value | "media"
设置了动画持续时间的最大最小值。
restart = "always" | "whenNotActive" | "never"
设置了动画能否随时重新开始。always代表动画可以随时开始。whenNotActive代表只能在没播放的时候重新开始,比如前一次播放结束了。never表示动画不能重新开始。
repeatCount = numeric value | "indefinite"
设置了动画重复的次数。 indefinite代表无限重复。
repeatDur = Clock-value | "indefinite"
设置重复的总的动画时间。indefinite代表无限重复。
fill = "freeze" | "remove(默认值)"
设置了动画结束后元素的状态。freeze表示动画结束后元素停留在动画的最后状态。remove代表动画结束以后元素回到动画前的状态,这个是默认值。
第三类:定义动画值的属性
这些属性定义了被执行动画的属性的取值情况。其实是定义了关键帧和插值的一些算法。
calcMode = "discrete | linear(默认值) | paced | spline"
定义了动画插值的方式:discrete:离散的,不插值;linear:线性插值;paced:步长插值;spline:样条插值。默认是linear(线性插值),但是如果属性不支持线性插值,则会采用discrete插值方式。
values = ""
定义了以分号分隔的动画关键帧的值列表。支持向量值。
keyTimes = ""
定义了以分号分隔的动画关键帧的时间列表。这个和values是一一对应的。这个值是受插值算法影响的,如果是线性(linear)和样条插值(spline),则keyTimes的第一个值必须是0,最后一个值必须是1。对于离散(discrete)的不插值的方式,keyTimes的第一个值必须是0。对于步长插值方式,很显然是不需要keyTimes。而且如果动画的持续时间设置为indefinite,则忽略keyTimes。
keySplines = ""
这个属性定义了样条插值(贝塞尔插值)时的控制点,显然只有在插值模式选择为spline才起作用。这个列表中的值取值范围是0到1。
from = ""
to = ""
by = ""
定义动画属性的起始值,结束值和步长值。这里需要注意:如果values已经制定了相关的值,则任何的from/to/by值都会被忽略。
第四类:控制动画是否是增量式的属性
有时候,如果相关的值设置的不是绝对值,而是增量值是非常有用的,使用additive属性可以达到这个目的。
additive = "replace(默认值) | sum"
这个属性控制了动画是否是增量式的。sum表示动画会较大相关的属性值或者其他低优先级的动画上。replace是默认值,表示动画会覆盖相关的属性值或者其他低优先级的动画。看一个小例子:

代码如下:



additive="sum"/>


这个例子演示了矩形width递增的动画效果。
有时候,如果重复的动画结果是叠加起来的,也非常有用,使用accumulate属性可以达到这个目的。
accumulate = "none(默认值) | sum"
这个属性控制了动画效果是否是累积的。none是默认值,表示重复的动画不累积。sum表示重复的动画效果是累积的。对于单次执行的动画,该属性没有意义。看个小例子:

代码如下:



additive="sum" accumulate="sum" repeatCount="5"/>


这个例子演示了矩形的长度在每次迭代中都在增加。
动画元素小结
SVG提供了下列动画元素:
1. animate元素
这个是最基本的动画元素,可以直接为相关属性提供不同时间点的值。
2. set元素
这个是animate元素的简写形式,支持所有的属性类型,尤其是当对非数字型的属性(例如visibility)进行动画时很方便。set元素是非增量的,相关的属性对之无效。 to指定的动画结束值类型一定要符合属性的取值类型。
3. animateMotion元素
路劲动画元素。这个元素大多数属性都和上面一样,只有下面几个稍微有点区别:
calcMode = "discrete | linear | paced | spline"
这个属性的默认值不同,在该元素中默认的是paced。
path = ""
动画元素移动的路径,格式与path元素的d属性的值的格式是一致的。
keyPoints = ""
这个属性的值是一系列分号给开的浮点数值,每个值的取值范围是0~1。这些值代表了keyTimes属性指定的对应时间点移动的距离,这里距离具体是多少是由浏览器自己决定的。
rotate = | auto | auto-reverse"
这个属性指定了元素移动时旋转的角度。默认值是0,数字代表旋转的角度,auto表示随着路劲的方向转动物体。auto-reverse表示转向与移动方向相反的方向。
此外animateMotion元素的from,by,to,values的值都是坐标对组成的;x值与y值之间用逗号或空格分开,每个坐标对之间用分号隔开比如from="33,15"表示起点x坐标为33,y坐标为15。
指定运动路径的方式有两种:一种为直接给path属性赋值,一种为使用mpath元素作为animateMotionde的子元素指定路径。如果同时使用这两种方式,则使用mpath元素优先级高。这两种方式优先级都比values,from,by,to高。
看一个小例子:

代码如下:



"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
xmlns="http://www.w3.org/2000/svg" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink" >
fill="none" stroke="blue" stroke-width="2" />
fill="none" stroke="blue" stroke-width="7.06"/>



fill="yellow" stroke="red" stroke-width="7.06">






4. animateColor元素
颜色动画元素。这是一个过时的元素,基本上所有功能都可以用animate代替,所以还是不要用了。
5. animateTransform元素
变换动画元素。看看特殊的一些属性:
type = "translate | scale | rotate | skewX | skewY"
这个属性指定了变换的类型,translate是默认值。
from,by和to的值相应的都是对应变换的参数,这个还是与前面讲的变换是一致的。values则是一组分号隔开的这样的值系列。
支持动画效果的元素和属性
基本上所有图形元素(path,rect,ellipse,text,image...),容器元素(svg, g, defs, use, switch, clipPath, mask...)都支持动画。基本上大多数的属性都支持动画效果。详细的说明请参看官方文档。
使用DOM实现动画
SVG动画也可以使用脚本完成,DOM的详细内容后面会介绍,这里简单看一个小例子:

代码如下:



"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
xmlns="http://www.w3.org/2000/svg"
onload="StartAnimation(evt)" version="1.1">

fill="none" stroke="blue" stroke-width="2"/>

SVG


看完上述内容,你们对HTML5中SVG 用户交互性动画介绍及应用是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

动画 属性 元素 时间 插值 代表 事件 例子 方式 代码 效果 支持 文档 控制 用户 分号 格式 类型 移动 交互性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安学习软件开发需要多少钱 街头篮球服务器下载 梁溪区计算机网络技术哪里买 网络安全隔离控制配置 dota 2连接服务器延缓 检察院招计算机网络技术员吗 软件开发劳务费 惠州pc软件开发 福建时代网络技术经验丰富 网络安全利大于弊辩论辩词 服务器上的虚拟浏览器 吴忠网络技术推荐厂家 广东省网络技术大赛竞赛题 美团外卖有数据库吗 软件开发的就业渠道 订单的数据库三线表如何画 域服务器的445端口有什么用 神经元网络技术用于物联网 若依配置不同数据库的多数据源 备份出的数据库的后缀 it培训软件开发好就业么 广州百单网互联网科技成都 南网总调网络安全处 奥的斯井道自学习服务器步骤 ssh是远程连接数据库 苏州软件开发公司报价 渝北区常规软件开发流程报价表 炫酷网络技术股份有限公司 岗位培训软件开发方案 民权网络安全检查
0