放在外面我测试了一下是可以的,逻辑上来说,变成了false之后就变不回true了,然后得等mouseout来清楚,但是如果放在for in 上面的话,只要其中一个参数到达了目标值,flag就是false然后就clear定时器了,不是就无效了么

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

protry

2016-05-17 20:26

放在外面我测试了一下是可以的,逻辑上来说,变成了false之后就变不回true了,然后得等mouseout来清楚,但是如果放在for in 上面的话,只要其中一个参数到达了目标值,flag就是false然后就clear定时器了,不是就无效了么

写回答 关注

3回答

  • 不再热情似火
    2016-05-17 22:18:15
    已采纳

     flag放在函数外面也行,但是每次执行都必须初始化 flag 为 true,其次,flag 的 初始化 必须放在 for in 循环上面

    (不管你在哪定义flag)。 因为是for in 循环,参数达到目标之后,确实不执行你说的 icur != json[changeType] ; 

    但是,其余的for 循环时,会对其他的元素进行这个判断 if (attr !== json[attr] ) ;如果不等,flag 就变成了false;

    你可能看错了一个地方,if(flag === true){.....} 是放在整个for 循环外面的,并没有在for 循环里面。所以在循环

    的 n 次过程中,只要有一次 不等于目标值,flag 就成了false, 循环结束之后,才判断 if(flag === true){.....},如果都到了目标,就是没有执行 flag = false 的if语句 ,flag = true ,才会终止计数器

    蓝蜗牛778...

    谢谢 不再热情似火

    2016-08-18 17:12:33

    共 4 条回复 >

  • 慕UI1487848
    2016-07-21 00:08:28

    我也觉得很迷。。。

    慕UI148...

    我刚刚想明白了: 正确的是:flag放在定时器内,for..in上面时。 进入定时器,flag进来设置成true,并且for..in循环里所有的属性-值判断都“共用”一个flag,没达到的就把flag设置成了false,达到的就 不作为,无论哪个,只要有一个没达到,flag都是false,就继续跑定时器。 自我总结:开始是没看清楚,它们都共用一个flag,还有老师视频是把flag声明放在定时器外,我试了试这样写链式运动会失效。

    2016-07-21 01:43:32

    共 1 条回复 >

  • 不再热情似火
    2016-05-17 21:35:03

    老师写的是if (attr !== json[attr] ) { flag = false; } 然后清除定时器时的语句是 if( falg === true){..........}

    如果有一个没有达到目标值,(外面有一个for循环)flag 就会变成false,就不会执行for循环之后的 if(flag) 语句,

    定时器的function结束之后,flag被撤销,在次执行的时候,重新生成了新的flag(true),然后再次进行判断。

    不存在你说的一个到达了目标flag就变成了true的情况

    不肖生 回复protry

    我也正在纳闷这个额问题,但是他们的解释好像都不能很好地回答。不知道你现在弄明白了没有。

    2016-07-16 21:33:37

    共 3 条回复 >

JS动画效果

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

113923 学习 · 1443 问题

查看课程

相似问题