马黑PHP整站系统

svgdr教程·动画

位置: 首页 > svgdr[ 发布时间: 2024.11.12  作者: 马黑  阅读: 25 ]

动画

指令:animate()

参数:name, options

语法:animate(name, options)

注意: 本指令返回上文对象,即要运行动画的元素

参数解释:

① name - SVG动画名称,必须,共四种:set、animate、animateMotion、animateTransform
② options - 动画属性键值对数据集合,以键值对方式组织,例:{ attributeName: 'transfrom', begin: '0s', ... } * 凡以 {...} 组织键值对数据,健名若出现短横线(例如 stroke-width)的,均应使用小角单或双引号包裹,这是JS相关规则

下面对四种动画进行演示:

(一)set 动画 : 为元素的任何属性设定简易动画,效果类似于CSS的:hover简单交互

//矩形
dr.rect(10,10,190,100,'gray');
dr.animate('set', {
	attributeName: 'fill', /* 填充色动画 */
	to: 'fuchsia',  /* 变为紫红色 */
	dur: '1s',  /* 变化过程时长 */
	begin: '2s; click',  /* 触发机制 :2秒后、单击 */
});
//圆 :参照矩形理解动画各参数含义
dr.circle(300,60, 40, 'teal').animate('set', {
	attributeName: 'cx',
	to: 750,
	dur: '1s',
	begin: '2s; click',
});
	

效果演示(打开2秒后运行动画,或单击图像触发动画):

svgdr绘制指令生成的SVG代码:

(二)animate 动画 :set() 动画的成人版,提供完整的基于元素属性的可控动画,不包含transform形变动画(另开有动画体系)

svgdr 绘制代码:

dr.rect(10,10,190,100,'gray').animate('animate', {
	attributeName: 'fill',
	to: 'fuchsia',
	dur: '1s',
	begin: '2s; click',
	repeatCount: 10,
	restart: 'whenNotActive', /* 重启动画 :always | whenNotActive | never */
});
dr.circle(300, 60, 40, 'tan').animate('animate', {
	attributeName: 'cx',
	values: '300; 750; 300',
	dur: '2s',
	begin: '2s; click',
	repeatCount: 10,
	restart: 'whenNotActive',
});
	

效果(动画结束后可单击重启动画):

最终生成的SVG代码:

(三)animateTransform 动画 :SVG transform 形变动画,包含 rotate、translate、scale 和 skew

svgdr 绘制代码:

dr.rect(40,40,100,100,'peru').animate('animateTransform', {
	attributeName: 'transform',  /* 动画名称永远是 transform */
	type: 'rotate',  /* 动画类型 : translate | rotate | scale | skew */
	from: '0 90 90',  /* 旋转原点 :x + width / 2, y + height / 2*/
	to: '360 90 90',
	dur: '3s',
	begin: '2s; click',
	repeatCount: 10,
	restart: 'whenNotActive',
});
dr.circle(260, 90, 50, 'peru').animate('animateTransform', {
	attributeName: 'transform',
	type: 'translate',  /* 平移 */
	values: '0; 480; 0', /* translate位移距离:从移动0开始,移动480px,再反向移动 */
	dur: '3s',
	begin: '2s; click',
	repeatCount: 10,
	restart: 'whenNotActive',
});
	

效果演示(动画若已停止可点击元素继续):

svgdr 绘制指令生成的SVG代码:

(四)animateMotion 动画 :路径动画,设置元素沿路径运动

一个简单的实例效果(动画停止后单击元素重启动画):

svgdr 绘制指令:

//路径 M 指令规定了元素运动起点,元素实际运动时会受到元素初始位置的影响
dr.rect(0,0,30,20,'peru').animate('animateMotion', {
	path: 'M100 100 V320 H400 L200 200 H520 V20 H750 V320',  /* 路径 */
	dur: '10s',
	begin: '2s;click',
	fill: 'freeze',  /* 结束时保持的状态  freeze | remove(缺省默认) */
	restart: 'whenNotActive',
	rotate: 'auto', /* 元素是否按路基走向调整自己的朝向 auto | auto-reverse | 角度数值 */
});
	

svgdr生成的SVG代码:

【说明】animateMotion 路径动画还有一个子标签 mpath 用以取代动画属性 path,svgdr 尚未实现,敬请期待。

本节的内容,因篇幅关系,未能详细介绍svg动画全方位知识,对svg动画感兴趣的朋友可以查询相关资料进行学习研究并在svgdr中灵活应用。

返回目录

前一篇: svgdr教程·渐变
下一篇: svgdr教程·draw + addTo

发表评论:

       

评论列表 [2条]

#2 | 小希 于 2024-11-12 19:20 发布: 这几种动画居然还不一样,原来还有这么详细的区分。。好看,动画总是可爱的,特别是最后的路径动画

#1 | 悄然 于 2024-11-12 14:48 发布: values: '0; 480; 0', /* translate位移距离:从移动0开始,移动480px,再反向移动 */ 看到这句的注解了,看来我昨晚上对values="0;1;0"理解的是错误的。。

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com