flag的定义会不会有错 执行一次后flag变成FALSE,之后flag的值就在不改变了呀 怎么可能会去清除定时器
那个确实写错了,应该把flag写进定时器里
falg要放在定时器里面,不然每次重新执行定时器就不会更新为true.( if(flag)要在for循环外面)
flag必然会变回true的因为定时器如果不关闭就会无限的重复执行,每次执行后就相当于又给flag赋值成true了
以上都是我自己的理解 错误还是正确我也不知道
像你这么写 和老师这么写都是一样的。因为都是在函数里面定义的,flag都是局部变量,由于闭包和作用域所以都能读取到这个变量。
我的理解 在还没有全部到达 itarget之前,flag始终为false,当所有attr到达itarget时此时需要清除定时器,而清除定时器的条件是flag为true 。(为什么flag能变化是因为有定时器,每30ms就会更新里面的数据。)
obj.timer=setInterval(function () {
var flg =true; //像这样吗 ?感觉也不对,flag变false后,还是不会再变回true呀?
for (var attr in json) {
//获取当前值
var icur = 0;
if (attr == 'opacity') {
icur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
}
else {
icur = parseInt(getStyle(obj, attr));
}
//算速度
var speed = 0;
speed = (json[attr] - icur) / 8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
//检测停止
if (icur != json[attr]) {
flg=false;
}
if (attr == 'opacity') {
//针对IE浏览器
obj.style.filter = 'alpha(opacity:' + (icur + speed) + ')';
//针对其他
obj.style.opacity = (icur + speed) / 100;
}
else {
obj.style[attr] = icur + speed + 'px';
}
}
if (flg){
clearInterval(obj.timer);
if (fn){
fn()
}
}
},30)
}
像这样吗 ?感觉也不对,flag变false后,还是不会再变回true呀?郁闷呀,这逻辑不对呀