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(){ var flag = true; for (var attr in json){ //1.取当前的值 var icur = 0; if (attr == 'opacity'){ icur = Math.round(parseFloat(getStyle(obj,attr))*100); }else{ icur = parseInt(getStyle(obj,attr)); } //2.算速度 var speed = (json[attr] - icur)/8; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); //3.检测是否全部完成 if (icur != json[attr]){ flag = false; } if (attr == 'opacity'){ obj.style.filter = 'alpha(opacity:' + (icur + speed) + ')'; obj.style.opacity = (icur + speed)/100; }else{ obj.style[attr] = icur + speed + 'px'; } } //4.检测停止 if(flag){ clearInterval(obj.timer); if (fn){ fn(); } } },30);}
1 回答
已采纳
玉林峰
TA贡献14条经验 获得超9个赞
那是给obj这个对象定义了一个方法,第一次运行,obj.timer=undefined, 清除undefined并不会报错,第二次运行obj.timer就是一个方法,然后就先可以清除这个方法了,防止出现多个定时器。
添加回答
举报
0/150
提交
取消