缓动函数封装 详见



function animate(element,strrs,fn){
// 判断是否开启定时器 如果有清空定时器
if(element.timeId){
clearInterval(element.timeId);
}
// 开启定时器
element.timeId =setInterval(function(){
//设置标记记录是否都达到目标
var flag =true;
//遍历对象的数组 改变元素的属性值
for(var strr in strrs ){
//判断属性是否为zIndex
if(strr ==="zIndex"){
element.style.zIndex = strrs[strr];
}else if(strr ==="opacity"){
//判断属性是否为opacity
//获取当前opacity的属性值 转化为number并检测能力
var current=parseFloat(getStyle(element,strr))||0;
current*=100;
//让当前值乘100保证是个整数
//定义步长为目标-当前值的10分之1 步长会越来越小 当不为整数时要取整
var step =(strrs[strr]*100-current)/10;
step = step>0?Math.ceil(step):Math.floor(step);
//改变属性值
current+=step;
element.style[strr]= current/100;
//兼容ie8
element.style.filter="alpha(opacity="+current+")";
if(step!==0){//判断是否已到达目标
flag =false;
}

}else{
//获取当前属性的属性值 转化为number并检测能力
var current=parseInt(getStyle(element,strr))||0;
//定义步长为目标-当前值的10分之1 步长会越来越小 当不为整数时要取整
var step =(strrs[strr]-current)/10;
step = step>0?Math.ceil(step):Math.floor(step);
//改变属性值
current+=step;
element.style[strr]= current + "px";
if(step!==0){//判断是否已到达目标
flag =false;
}
}

}
if(flag){//判断是否都已到达目标 达到则清除计时器
clearInterval(element.timeId);
if(fn){//判断是否有回调函数 有则调用
fn();
}
}

},20)
}
原文地址:https://www.cnblogs.com/wjl3898/p/5771383.html