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

来源:6-2 完美运动框架

weibo_幸福长大了_0

2016-05-15 14:34

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回答

  • 为难自己干嘛
    2016-05-15 20:08:10
    已采纳

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

    if(icur != json[attr])

    {

         flag=flase;

    }

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

    weibo_...

    非常感谢!

    2016-05-19 16:49:11

    共 1 条回复 >

  • 慕之光
    2016-05-16 15:11:15

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

JS动画效果

通过本课程JS动画的学习,从简单动画开始,逐步深入各种动画框架封装

113923 学习 · 1443 问题

查看课程

相似问题