11年刚干这行的时候,看到这种什么百叶窗的动画,以为都是flash实现的,最近突然灵光一闪,想到了用js实现(虽然我不是做前端的,本人做.net)。代码虽然实现了,但是比较乱,先上个图:
代码主要就是一些数学的计算,然后结合html,css打造出类似flash的效果。
下面贴出主要的部分代码:
1 function all(books){ 2 for(var i=0;i<self.rows;i++) { 3 for (var j = 0; j < self.columns; j++) { 4 if(!books[i][j])return false; 5 } 6 } 7 return true; 8 } 9 function resetBooks(books){10 for(var i=0;i<self.rows;i++) {11 for (var j = 0; j < self.columns; j++) {12 books[i][j]=false;13 }14 }15 return true;16 }17 var self=this,timer=null,_iindex= 0;18 var initdir=[[[0,1],[1,0]],[[-1,0],[0,1]],[[0,-1],[-1,0]],[[0,-1],[1,0]],[[0,-1],[1,0],[0,1],[-1,0]]],dir=initdir[0];19 var weight=[1,1,1,1,6];20 var initpos=[[{x:0,y:-1}],[{x:self.columns-1,y:-1}],[{x:self.columns-1,y:self.rows}],[{x:0,y:self.rows}],[{x:self.columns/2,y:self.rows/2}]];21 timer=setInterval(function(){22 var n=[];23 for(var i=0;i<self.preDivs.length;i++){24 var _div=null,x= 0,y=0;25 for(var j=0;j<dir.length;j++){26 x=self.preDivs[i].x+dir[j][0];27 y=self.preDivs[i].y+dir[j][1];28 if(x>=0&&y>=0&&x<self.columns&&y<self.rows&&!self.books[y][x]){29 self.books[y][x]=true;30 _div=self.zzDivStatck[y][x];31 n.push({x:x,y:y});32 _div.style.backgroundImage = "url(" + self.zzImages[_iindex] + ")";33 _div.style.backgroundPositionX = (-x * self.zzDivW) + "px ";34 _div.style.backgroundPositionY = (-y * self.zzDivH) + "px";35 }36 }37 38 }39 40 self.preDivs=n;41 if(all(self.books)){42 resetBooks(self.books);43 var _r=util.randomWeight(weight);44 self.preDivs = initpos[_r];45 dir=initdir[_r];46 _iindex++;47 }48 if(_iindex>=+self.zzImages.length){49 _iindex=0;50 }51 52 },100);
View Code
源码附上:http://files.cnblogs.com/files/csbt/DDZ.zip
原标题:一个js的动画,以前以为只有flash可以实现
关键词:JS