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

flag说是定义在定时器外不对,可是放在里边,觉得也不对,flag变false后,还是不会再变回true呀

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呀?郁闷呀,这逻辑不对呀


正在回答

2 回答

从true变为false后可以变成true的,

if(icur != json[attr])

{

     flag=flase;

}

setInterval函数不是只执行一次的,最终达到运动目标再执行setInterval函数时,此时flag=初始值也就是true ,icur==json[attr],所以flag不会变成false了

1 回复 有任何疑惑可以回复我~
#1

weibo_幸福长大了_0 提问者

非常感谢!
2016-05-19 回复 有任何疑惑可以回复我~

每30ms    flag都会被赋值一次true

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

flag说是定义在定时器外不对,可是放在里边,觉得也不对,flag变false后,还是不会再变回true呀

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信