特效介绍
我爱模板网有个需求,做一个沿线路运动的光的动画,起初用GIF实现,发现动画质量太差了。只能用js将几十张png图片接连播放,如果网络差可能会有闪烁效果,当然也可以等所有图片都加载完再执行。但是,当我在网上闲逛时,发现了:canvas-keyframes.min.js,它是一款强大的可以将序列图片生成canvas并实现连续播放的js插件。而且它可以通过参数轻松配置动画的快慢,并且多次调用能在一个页面生成多个动画,由于生成的是canvas,控制样式也很方便。
使用方法
1、定义一个容器,用来显示canvas动画,控制其大小和帧一样大。如下:
.animate{width: 640px; height:480px; margin:auto;} <div class="animate"></div>2、引入
canvas-keyframes.min.js
<script src="js/canvas-keyframes.min.js"></script>3、在页面或您的公共js中加入下面的函数,这个函数是我爱模板网对调用的封装,传几个参数更加方便
function keyAnimate(dom,startnum,picnum,path,fps){ var count = 0; var imgArr = []; for(var i=0;i<=picnum;i++){ (function(i){ var img = new Image(); img.onload = function(){ img.onload = null; count++; // 有可能图片加载有快有满慢,所以用角标存 imgArr[i-1] = img; if(count==picnum){ keyFrames(imgArr); } } img.onerror = function(){ } img.src = path+(startnum+i)+'.png'; })(i); } var keyFrames; function keyFrames(imgArr){ keyFrames = new CanvasKeyFrames(document.querySelector(dom), 'array', imgArr, { fps:fps || 24 //动画速度 }); keyFrames.play(); } }参数说明:
dom:需要显示动画的div的选择器
startnum:起始帧图片的名字,不要扩展名
picnum:序列图数量
path:图片相对于当前页面的位置
fps:不用说都明白!不传的话,默认是每秒24帧
4、调用示例
keyAnimate('.animate',1,33,'img/',60);