定时器没有关闭
定时器不会关闭了,一定都在运行,只是speed是0不在增加而已,
怎么样让定时器关闭呢
定时器不会关闭了,一定都在运行,只是speed是0不在增加而已,
怎么样让定时器关闭呢
2015-03-06
分析:var flag = true; 应该放进for(var attr in json){} 中去 如果不放进去的话 虽然效果是一样的 但是定时器一直就没有停止下来 可以分别在两个 if( iCur !=json[attr]) 和 if(flag) 里面添加console.log(); 来调用查看定时器是否关闭
原因: 如果var flag = true; 放在 setInterval();的外面 . 在if(iCur !=json[attr])中 flag=flase; 由于flag一直等于flase 就无法执行if(flag)里面的内容
解决: 1.可以将var flag = true ; 放进for(var attr in json){} 里面 2.可以在if(iCur!=json[atter]) 后面加上一个else{ flag = true;}
这样解决了timer没关闭的问题。每次循环中如果有一个属性没有达到目标值,则flag为false
function startMove(obj,json,fn){
var flag = true;
clearInterval(obj.timer);
obj.timer = setInterval(function(){
for(var attr in json){
var cur = 0;
iTarget = json[attr];
if(attr == 'opacity'){
cur = Math.round(parseFloat(getStyle(obj,attr))*100);
}else{
cur = parseInt(getStyle(obj,attr));
}
var speed = (iTarget - cur)/8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if( cur == iTarget ){
flag = true;
}else{
flag = false;
}
if( attr == 'opacity'){
obj.style.filter = 'alpha(opacity' + cur + speed + ')';
obj.style.opacity = (cur + speed)/100;
}else{
obj.style[attr] = cur + speed + "px";
}
}
if(flag){
clearInterval(obj.timer);
if(fn){
fn();
}
}
},30);
}
举报