svg多线条动画
svg多线条动画
by cacti xu
HTML
<div id="myobj" width="100%" height="100%">
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
<path id="i0" fill="none" stroke="#050505" stroke-width="3.3513" stroke-miterlimit="10" d="M83.565,418.587
c0,0,22.344-55.854,65.073-55.854s56.691,57.255,56.691,57.255h89.93c0,0,20.104-51.108,59.765-51.108s53.344,57.529,53.344,57.529
l46.919-2.795c0,0,19.214-3.116,21.616-37.44c2.402-34.332,2.124-81.808,2.124-81.808s-1.4-22.621-18.714-29.324
c-17.313-6.702-297.428-19.27-345.463-7.821c-22.622,10.335-89.092,73.173-93,135.454c10.61,17.588,12.567,15.356,18.989,17.588
C78.26,418.587,83.565,418.587,83.565,418.587z"/>
<path id="i1" fill="none" stroke="#050505" stroke-width="3.3513" stroke-miterlimit="10" d="M106.815,269.733
c0,0,81.761-222.866,151.58-232.92c0,0,127.91-18.992,184.883,40.774c11.73,27.371,13.962,41.334,13.962,41.334l-2.268,154.942"/>
<path id="i2" fill="none" stroke="#050505" stroke-width="3.3513" stroke-miterlimit="10" d="M457.034,132.906"/>
<path id="i3" fill="none" stroke="#050505" stroke-width="3.3513" stroke-miterlimit="10" d="M179.367,115.57"/>
<path id="i4" fill="none" stroke="#050505" stroke-width="3.3513" stroke-miterlimit="10" d="M294.144,262.593"/>
<path id="i5" fill="none" stroke="#050505" stroke-width="3.3513" stroke-miterlimit="10" d="M149.477,393.177
c0,0,35.746,4.844,30.718,42.448c-2.232,20.108-26.808,33.514-40.772,28.486c-13.965-5.026-34.633-16.193-29.605-44.123
C120.178,401.287,128.252,393.177,149.477,393.177z"/>
<path id="i6" fill="none" stroke="#050505" stroke-width="3.3513" stroke-miterlimit="10" d="M355.653,396.516
c0,0,35.745,4.844,30.718,42.448c-2.231,20.107-26.811,33.513-40.772,28.486c-13.968-5.027-32.885-15.52-27.857-43.45
C323.082,402.007,332.822,396.037,355.653,396.516z"/>
<path id="i7" fill="none" stroke="#050505" stroke-width="3.3513"...
JavaScript
var current_frame, total_frames, path, length, handle, myobj;
myobj = document.getElementById('myobj').cloneNode(true); //.cloneNode创建节点的拷贝,并返回该副本如果您需要克隆所有后代,请把 deep 参数设置 true,否则设置为 false。
var init = function() {
current_frame = 0;
total_frames = 60;
path = new Array();
length = new Array();
for(var i=0; i<10;i++){
path[i] = document.getElementById('i'+i); //获取每个path路径的id
l = path[i].getTotalLength(); // 获取每个path路径的长度
length[i] = l; //将长度放入数组中
path[i].style.strokeDasharray = l + ' ' + l;
path[i].style.strokeDashoffset = l;
}
handle = 0;
}
var draw = function() {
/////// 控制绘画速度
var progress = current_frame/total_frames;
if (progress > 1) {
window.cancelAnimationFrame(handle);
} else {
current_frame++; //1,2,3,4
for(var j=0; j<path.length;j++){
path[j].style.strokeDashoffset = Math.floor(length[j] * (1 - progress)); //当progress==1的时候strokeDashoffset==0绘画结束
}
handle = window.requestAnimationFrame(draw);
}
};
init();
draw();