一个js的动画,以前以为只有flash可以实现

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

  源码附上:https://files.cnblogs.com/files/csbt/DDZ.zip

posted @ 2016-02-29 10:26  疯狂的超神  阅读(1080)  评论(0编辑  收藏  举报