为了账号安全,请及时绑定邮箱和手机立即绑定

完美运动框架中move.js文件里面没有定义一个变量obj.timer,为什么调用startMove函数时能直接清除定时器

完美运动框架中move.js文件里面没有定义一个变量obj.timer,为什么调用startMove函数时能直接清除定时器

once829 2016-07-03 14:21:18
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就是一个方法,然后就先可以清除这个方法了,防止出现多个定时器。

查看完整回答
1 反对 回复 2016-07-04
  • once829
    once829
    非常感谢。清除并不会报错这么一说就理解了,如果从代码编译的规范来说,是不是应该要先定义变量var timer = null;
  • 1 回答
  • 0 关注
  • 1268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信