猿问

宽度和透明度实现同时运动,可是高度差了两个像素。

//封装函数,获取样式,解决offset全部属性下的BUG

function getStyle(obj,attr){

if(obj.currentStyle){

return obj.currentStyle[attr];

}else{

return getComputedStyle(obj,false)[attr];

}

}


//封装动画框架

function startMove(obj,json,fn){   //(对象,改变的属性,目标值,回调函数)

clearInterval(obj.timer);

obj.timer = setInterval(function(){

for(var attr in json){  //JSON实现同时运动

//取到当前值

var icur = 0;

var flag = true;//假设

if(attr == "opacity"){

icur = Math.round(parseFloat(getStyle(obj,attr))*100);//处理透明度

}else{

var icur = parseInt(getStyle(obj,attr));

}

//计算速度

var speed = (json[attr] - icur)/10;

speed = speed>0?Math.ceil(speed):Math.floor(speed);

//是否所有的运动都达到目标值

if(json[attr]!=icur){

flag = false;

}

if(attr == "opacity"){

icur += speed;

obj.style.opacity = icur/100;

obj.style.filter = 'alpha(opacity:'+icur+')';

}else{

obj.style[attr] = icur + speed +"px";

}

}

if(flag){

clearInterval(obj.timer);

if(fn){

fn();

}

}

},50)

}



伴山客
浏览 979回答 2
2回答

QQ_随意

你是几个动画一起执行的,一个动画执行完之后了,就会停掉整个定时器。所以就会有的还没执行完,每个动画分开执行就好了。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答