老师flag的定义会不会有错,flag变FALSE 就在变不回TRUE了

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

weibo_幸福长大了_0

2016-05-13 23:00

flag的定义会不会有错  执行一次后flag变成FALSE,之后flag的值就在不改变了呀 怎么可能会去清除定时器

写回答 关注

7回答

  • 墨曌
    2016-05-14 14:42:56
    已采纳

    那个确实写错了,应该把flag写进定时器里

    weibo_...

    非常感谢!

    2016-05-19 16:50:15

    共 1 条回复 >

  • 北方有海
    2016-06-05 10:18:12

    falg要放在定时器里面,不然每次重新执行定时器就不会更新为true.( if(flag)要在for循环外面)

  • lycheeling
    2016-05-30 00:25:19

    flag必然会变回true的因为定时器如果不关闭就会无限的重复执行,每次执行后就相当于又给flag赋值成true了

  • Lshah0
    2016-05-17 19:35:32

    以上都是我自己的理解  错误还是正确我也不知道

    weibo_...

    不管怎样还是谢谢了

    2016-05-19 16:47:22

    共 1 条回复 >

  • Lshah0
    2016-05-17 19:35:00

    像你这么写 和老师这么写都是一样的。因为都是在函数里面定义的,flag都是局部变量,由于闭包和作用域所以都能读取到这个变量。

  • Lshah0
    2016-05-17 19:32:06

    我的理解  在还没有全部到达 itarget之前,flag始终为false,当所有attr到达itarget时此时需要清除定时器,而清除定时器的条件是flag为true  。(为什么flag能变化是因为有定时器,每30ms就会更新里面的数据。)

  • weibo_幸福长大了_0
    2016-05-15 14:31:20

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

    那些微笑

    这样写是对的,定时器每执行一次都会把flag初始为true,下面判断如果所有动画执行完成,才会清除定时器,执行回调函数!

    2016-07-15 09:54:42

    共 1 条回复 >

JS动画效果

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

113925 学习 · 1443 问题

查看课程

相似问题