日期:2014-05-16 浏览次数:20662 次
function Animation(obj){
this.ele = obj.ele;
this.maxheight = obj.maxheight||26;
this.minheight = obj.minheight||0;
this.delay = obj.delay || 0;
this.inter = null;
this.time = obj.time||200;
this.callback = obj.callback;
this.type = obj.type || "addh";
this.initialize.apply(this, arguments);
};
Animation.prototype={
constructor:Animation,
initialize:function(obj){
this.events = [];//动画状态数组
this.inittime = this.time;
},
start:function(){
this.events.push(this.type);
/*
判断主循环 是否在执行 在执行的话就 只保存需要执行的状态
这样就可以保证一个dom只有一个 主循环 从而保证不会出现死循环
*/
if(this.inter == null){
this.startAnimate();
}
},
startAnimate:function(){
this.time = this.inittime;
var t = this;
var type = t.events.pop();//获取最后一个动画
t.events = [];
//主循环
t.inter = setInterval(function(){
switch(type){
case "addh":
t.addh();
break;
case "delh":
t.delh();
break;
}
},50);
},
callBack:function(){
var len = this.events.length;
clearInterval(this.inter);
var t = this;
if(len == 0){
this.inter = null;
if(typeof this.callback == "function"){
setTimeout(function(){
t.callback();
},this.delay);
}
}
else{
setTimeout(function(){
t.startAnimate();
},this.delay);
}
},
addh:function(){
var h = this.ele.height();
var nh = Math.min(h+((this.time*this.time)/1000000)*10,this.maxheight);
if(nh >= this.maxheight){
this.callBack();
}
this.ele.height(nh);
this.time += 1000;
},
delh:function(){
var h = this.ele.height();
var nh = Math.max(h-((this.time*this.time)/1000000)*10, this.minheight);
if(nh <= this.minheight){
this.callBack();
}
this.ele.height(nh);
this.time += 1000;
}
};
<div style="border:1px solid red;width:100px;" id="div1" >
<div style="border:1px solid green;width:50px;margin:auto;" id="div2" ></div>
</div>
<input type="button" value="同时动" id="btn1" />
<input type="button" value="分开动" id="btn2" />
<script type="text/javascript" >
$(function(){
var div1 = new Animation({
ele:$("#div1"),
maxheight:200,
minheight:0,
delay:0
});
var div2 = new Animation({
ele:$("#div2"),
maxheight:100,
minheight:0,
delay:5000
});
$("#btn1").click(function(){
div1.type="addh";
div1.start();
div2.type="addh";
div2.start();
});
$("#btn2").click(function(){
div1.type="addh";
div1.start();
div1.callback=function(){
div2.type="addh";
div2.start();
};
});
});
</script>