Vivus是一款可以执行SVG路径动画的轻量级Javascript库。Vivus可以绘制SVG图形的外观。Vivus提供各种不同的动画参数来让你定制你自己的SVG路径动画。类似的动画效果还有:html5 svg线条动态绘制文字轮廓边框动画 和 html5 svg线条动态绘制iphone边框动画效果。
可以通过Bower或jsDelivr来安装该SVG路径动画插件。
bower install vivus //cdn.jsdelivr.net/vivus/0.1.2/vivus.min.js
Vivus提供三种SVG路径动画方式。下面用图片的方式来说明这三种SVG路径动画方式。在图中粉红色的线条代表duration
值,蓝色的线条是delay
值。
每一个路径元素都在同一时间开始绘制。这是默认的绘制动画方式。
每一条SVG线条都异步进行绘制。它们开统一时间开始和结束绘制动画,因此称之为“异步”。
SVG线条一条接一条开始绘制动画。这种绘制线条方式是最好的用户体验。
要制作这种SVG线条绘制效果,需要使用CSS 的strokeDashoffset
属性。该属性用于控制SVG图形中每一条边的线条描边的偏移值。我们还需要通过javascript来更新这些值让它们开始动画。
然而,strokeDashoffset
属性仅仅在路径元素上起作用。如果SVG图像中有许多复杂的元素,如circle
、rect
、line
、polyline
,那么动画将不能正常执行。为了解决这个问题,插件中提供了另一个可用的类pathformer
。该类能够将你的SVG文件中的所有对象都转换为path
元素,这样就能够使用strokeDashoffset
属性来制作路径动画了。
路径动画总是使用SVG标签中定义的参数来执行绘制动画。
下面是一些你在使用SVG文件时需要注意的问题:
stroke
属性而且不能填充图形。因为插件只是绘制图形的轮廓而不会去检查它的颜色。例如:fill: "none";
,stroke: "#FFF";
。text
元素,它们不能被转换为path
元素。Vivus不需要依赖任何js库,你需要做的仅仅是像下边这样调用它:
new Vivus('my-svg-id', {type: 'delayed', duration: 200}, myCallback);
Vivus 的构造函数包括三个参数:
Vivus 有如下一些可用参数:
delayed
, async
, oneByOne
或 script
true
,只在IE中有效。Vivus有是哪个控制动画的方法:
这些方法都返回对象,你可以使用链式编程:
var myVivus = new Vivus('my-svg-id'); myVivus .stop() .reset() .play(2)
这个SVG路径动画插件允许我们使用脚本来控制SVG,定制的值要直接放在DOM的SVG元素中。
你需要做的工作是通过data-start
和data-duration
来定义动画的开始和持续时间。如果你没有定义,插件将使用构造函数中的默认值。这些值最好由你根据需要来定制。你不必遵循SVG的顺序,你甚至可以从最后一个元素开始动画。
你必须为SVG中的每一个路径元素都定义规则:
<svg> <path data-start="0" data-duration="10" .../> <path data-start="20" data-duration="10" .../> <path data-start="20" data-duration="20" .../> <path data-start="0" data-duration="30" .../> </svg>
这种方式是十分灵活的编码方式。使用这种动画类型,它的效果和oneByOne
一样。但是你可以在指定的路径上定义一些属性如duration、开始的延时时间。
例如:有一个简单的SVG包含5个元素,它使用的参数是:{duration: 20, delay: 0}
,我们可以得到下面的时间轴:
同步模式看起来和oneByOne
动画一样,但它可以额外定制一些参数:
<svg> <path data-duration="10" .../> <path data-delay="10" data-async .../> <path data-delay="15" .../> <path data-duration="10" data-delay="45" data-async .../> <path data-duration="50" data-delay="5" .../> </svg>
上面代码的时间轴如下:
在IE浏览器中一些SVG动画不能正常执行。解决的方案是复制和替换哪些不能执行的元素。插件中提供了回调来处理这些问题,这些回调只在IE浏览器中起作用,你可以通过forceRender
设置为false
来关闭它。