javascript:一个2D旋转图的实现

  今天从图书馆回寝室的路上,突然灵感迸发,想做一个旋转图(2D),于是就有了下文。

     首先说一下思路吧, 我觉得做程序最重要的就是思路了,思路对了,代码那就是手到拈来。-_-!

  1、 CSS布局:  我采用了4长图片,在CSS设置里,他并不是绝对定位。

  2、采用布局转换:在javascript中设置img的position:absolute,同时加上他们的left和top;

  3、当点击按钮开始时,开始进行旋转。 

  4、旋转时的逻辑是,由当前图片的索引,运动到下一张图片的索引位置。 特别注意的是: 最后一张应该运到到第一张的位置,也就是aImg[0]的位置.

  5、还有一点也很重要。 那就是层级z-index. 这里我采用一个办法。设置了一个变量times,每当点击的时候,times就+1,这样我们就能知道每张图片应该在的位置,相应的索引值也应该改变. 那么怎么获取图片所在的位置呢? 其实aImg[i]所在的位置,就是原来aImg[(i+times)%aImg.length]所在的位置了(关键在于取模)。

     第一次也博客,书写和表达可能不太清楚,大家见谅, 以下为js代码部分: 

   

 1 window.onload = function(){
 2     var MyApp = {
 3         dom: {
 4             aImg: document.getElementsByTagName('img'),
 5             oBtn: document.getElementById('btn')
 6         },
 7         times: 0,
 8         Switch: true,
 9         First: true
10     };
11     absoluted(MyApp.dom.aImg);
12     setPosition(MyApp.dom.aImg[0], 200, 200, 2);
13     setPosition(MyApp.dom.aImg[1], 351, 300, 3);
14     setPosition(MyApp.dom.aImg[2], 502, 200, 2);
15     setPosition(MyApp.dom.aImg[3], 351, 122, 1);
16     MyApp.dom.oBtn.onclick = function(){
17         if(MyApp.Switch||MyApp.First){
18             MyApp.Switch = false;
19             MyApp.First = false;
20             var a = MyApp.dom;
21             MyApp.times++;
22             for(var i=0;i<a.aImg.length;i++){
23                 a.aImg[i].style.zIndex = a.aImg[(i+MyApp.times)%a.aImg.length].index;
24             }
25             changePosition(a.aImg, function(){
26                 MyApp.Switch = true;
27             });
28         }
29     }
30 }
31 function setPosition(obj, left, top, index){
32     obj.style.left = left + 'px';
33     obj.style.top = top + 'px';
34     obj.style.zIndex = index;
35     obj.index = index;
36 }
37 function changePosition(wrap, fn){
38     for(var i=0;i<wrap.length;i++){
39         if(i==3){
40             MOVE:Buffer_Move(wrap[3],{left: wrap[0].offsetLeft, top: wrap[0].offsetTop});
41         }else{
42             MOVE:Buffer_Move(wrap[i],{left: wrap[i+1].offsetLeft, top: wrap[i+1].offsetTop}, fn);
43         }
44     }
45 }
46 function absoluted(wrap){
47     for(var i=0;i<wrap.length;i++){
48         wrap[i].style.left = wrap[i].offsetLeft + 'px';
49         wrap[i].style.top = wrap[i].offsetTop + 'px';    
50     }
51     for(var i=0;i<wrap.length;i++){
52         wrap[i].style.position = 'absolute';    
53     }
54 }

另外可能有些同学会问这个MOVE:Buffer_Move是什么东西, 其实,这是我写的一个运动框架,有缓冲和弹性运动。如果有朋友感兴趣的话可以到我的博客里看看!

以下为HTML代码部分:

1 <body>
2 <img src="images/21.jpg" />
3 <img src="images/22.jpg" />
4 <img src="images/23.jpg" />
5 <img src="images/24.jpg" />
6 <input type="button" id="btn" value="测试"/>
7 </body>

以上就是这个2D旋转图的代码啦。。 过些天我灵感来了,我写一个3D的,这估计会用到css3,谁知道呢,到时候在说吧! -_-!

posted @ 2013-06-22 15:47  不羁的风、  阅读(714)  评论(0编辑  收藏  举报