1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style> 7 * { 8 margin: 0; 9 padding: 0; 10 } 11 12 div { 13 overflow: hidden; 14 border: 1px solid #ccc; 15 width: 300px; 16 height: 30px; 17 background: #0066FF; 18 position: absolute; 19 } 20 21 div a { 22 width: 40px; 23 height: 30px; 24 margin-right: 10px; 25 line-height: 30px; 26 text-align: center; 27 float: left; 28 text-decoration: none; 29 color: #000; 30 } 31 32 #move { 33 position: absolute; 34 top: 0; 35 left: 0; 36 width: 50px; 37 height: 30px; 38 background: rgba(0, 0, 0, .5); 39 z-index: 2; 40 } 41 .red{ 42 backrgound:red; 43 } 44 </style> 45 <script> 46 function getStyle(obj,name){ 47 if(obj.currentStyle){ 48 return obj.currentStyle[name];//兼容ie 49 }else{ 50 return getComputedStyle(obj,false)[name];//除ie以外的 51 } 52 } 53 function move1(obj,name,iTarget,time,fn){ 54 var start=parseFloat(getStyle(obj,name)); 55 var dis=iTarget-start; 56 var count=parseInt(time/30); 57 var step=dis/count; 58 var n=0; 59 clearInterval(obj.timer); 60 obj.timer=setInterval(function(){ 61 n++; 62 var cur=start+n*step; 63 if(name=='opacity'){ 64 obj.style.opacity=cur; 65 obj.style.filter='alpha('+cur*100+')'; 66 }else{ 67 obj.style[name]=cur+'px'; 68 } 69 70 if(n==count){ 71 clearInterval(obj.timer); 72 fn&&fn(); 73 } 74 },30); 75 } 76 //end 77 //多个move改变 78 function move(obj,json,complete){ 79 clearInterval(obj.timer); 80 complete=complete ||{}; 81 complete.time=complete.time || 3000; 82 complete.easeing = complete.easeing || 'ease-in'; 83 var start={}; 84 var dis={}; 85 for(var name in json){ 86 start[name]=parseFloat(getStyle(obj,name)); 87 dis[name]=json[name]-start[name]; 88 } 89 var count=parseInt(complete.time/30); 90 var n=0; 91 obj.timer=setInterval(function(){ 92 n++; 93 for(var name in json){ 94 switch(complete.easeing){ 95 case 'linear': 96 var a=n/count; 97 var cur =start[name]+dis[name]*a; 98 break; 99 case 'ease-in': 100 var a=n/count; 101 var cur =start[name]+dis[name]*a*a*a; 102 break; 103 case 'ease-out': 104 var a=1-n/count; 105 var cur =start[name]+dis[name]*(1-a*a*a); 106 break; 107 } 108 if(name=='opacity'){ 109 obj.style.opacity=cur; 110 obj.style.filter='alpha('+cur*100+')'; 111 }else{ 112 obj.style[name]=cur+'px'; 113 } 114 }; 115 if(n==count){ 116 clearInterval(obj.timer); 117 complete.fn&& complete.fn(); 118 } 119 120 },30); 121 } 122 window.onload = function () { 123 var oMove = document.getElementById('move'); 124 var oBox = document.getElementById('box'); 125 var aA = oBox.children; 126 var oOff = true; 127 var arr = []; 128 for (var i = 0; i < aA.length; i++) { 129 arr[i] = { 130 left: aA[i].offsetLeft, 131 top: aA[i].offsetTop 132 } 133 } 134 //console.log(arr); 135 //布局转换--float-->定位布局 136 for (var i = 0; i < aA.length; i++) { 137 aA[i].style.position = 'absolute'; 138 aA[i].style.left = arr[i].left + 'px'; 139 aA[i].style.top = arr[i].top + 'px'; 140 aA[i].style.margin = 0; 141 aA[i].style.zIndex = 5; 142 } 143 for (var i = 0; i < aA.length; i++) { 144 aA[i].index = i; 145 aA[i].onmouseover = function () { 146 move(oMove, {left: aA[this.index].offsetLeft}, {time: 500}); 147 this.onoff = false; 148 }; 149 aA[i].onmouseout = function () { 150 if (this.onoff) { 151 move(oMove, {left: aA[this.index].offsetLeft}, {time: 500}); 152 } else { 153 move(oMove, {left: 0}, {time: 500, easeing: 'ease-in'}); 154 } 155 }; 156 aA[i].onclick = function () { 157 this.onoff = true; 158 move(oMove, {left: aA[this.index].offsetLeft}, {time: 500}) 159 } 160 } 161 } 162 </script> 163 </head> 164 <body> 165 <div id="box"> 166 <span id="move"></span> 167 <a href="javascript:;" class="red">张茜</a> 168 <a href="javascript:;">大飞</a> 169 <a href="javascript:;">尊尊</a> 170 <a href="javascript:;">赵帅</a> 171 <a href="javascript:;">魁哥</a> 172 <a href="javascript:;">大汉</a> 173 174 </div> 175 </body> 176 </html>