<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="智能社 - zhinengshe.com" />
<meta name="copyright" content="智能社 - zhinengshe.com" />
<title>智能社 - www.zhinengshe.com</title>
<style>
*{margin:0;padding:0;list-style:none;}
#ul1{width:516px;height:516px; margin:10px auto; position:relative;}
#ul1 li{float:left;width:150px; height:150px; border:1px solid #000; background:#ccc; margin:10px;}
</style>
<script src="move.js"></script>
<script>
window.onload = function(){
var oBtn = document.getElementById("btn1");
var oUl = document.getElementById("ul1");
var aLi = oUl.children;
//布局转换
var aPos = [];
for(var i = 0; i < aLi.length; i++){
aPos[i] = {left:aLi[i].offsetLeft,top:aLi[i].offsetTop};
aLi[i].style.left = aPos[i].left + "px";
aLi[i].style.top = aPos[i].top + "px";
}
for(var i = 0; i < aLi.length; i++){
aLi[i].style.position = "absolute";
aLi[i].style.margin = "0";
}
var timer = null;
oBtn.onclick = function(){
var i = 0;
clearInterval(timer);
timer = setInterval(function(){
(function(index){
move(aLi[i],
{width:20,height:20,left:200,top:200,opacity:0},
{complete:function(){
//alert(index);
if(index == aLi.length - 1){
//alert("运动完成");
i = aLi.length - 1;
clearInterval(timer);
timer = setInterval(function(){
move(aLi[i],
{
width:150,height:150,
left:aPos[i].left,top:aPos[i].top,
opacity:1
}
);
i--;
if(i == -1){
clearInterval(timer);
}
},100);
}
}
});
})(i);
i++;
if(i == aLi.length){
clearInterval(timer);
}
},100);
};
};
</script>
</head>
<body>
<input id="btn1" type="button" value="收起来"/>
<ul id="ul1">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</body>
</html>
//版权 北京智能社©, 保留所有权利
function getStyle(obj,name){
return (obj.currentStyle || getComputedStyle(obj,false))[name];
}
function move(obj,json,options){
options = options || {};
options.duration = options.duration || 700;
options.easing = options.easing || "ease-out";
var start = {};
var dis = {};
for(var name in json){
start[name] = parseFloat(getStyle(obj,name));
dis[name] = json[name] - start[name];
}
var count = Math.round(options.duration/30);
var n = 0;
clearInterval(obj.timer);
obj.timer = setInterval(function(){
n++;
for(var name in json){
var cur = start[name] + dis[name]/count*n;
switch(options.easing){
case "linear":
var a = n/count;
var cur = start[name] + dis[name]*a;
break;
case "ease-in":
var a = n/count;
var cur = start[name] + dis[name]*Math.pow(a,3);
break;
case "ease-out":
var a = 1 - n/count;
var cur = start[name] + dis[name]*(1 - Math.pow(a,3));
break;
}
if(name == "opacity"){
obj.style.opacity = cur;
obj.style.filter = "alpha(opacity:"+cur*100+")";
} else {
obj.style[name] = cur + "px";
}
}
if(n == count){
clearInterval(obj.timer);
options.complete && options.complete();
}
},30);
}