最新回答 / 传说中的小白龙
想了半天!终于知道了!跟我一样的小伙伴不明白的快点进来看!搞了半天,是javascript的问题,js里浮点数运算有一些小问题.具体情况你们加载这段代码就明白了.真是巨坑无比!<...code...>
2016-05-18
其实从原理上来想就很容易知道为什么了。定义flag主要目的是要达到三个都为true时,才清掉计时器。也就是说,只要有一个为false就不清,老师的思路也是这样,但老师忽略忘记了变量复位。
而变量复位的位置放在哪?当然是三次move都执行完之后,若为false就复位,并且再次判断。所以这个复位必然是放在定时器里面,for-in外面。
再接着考虑一下清除定时器的位置放在哪,如果在for-in里面,当第一个move为true时,由于变量复位了,后面的move都不会执行。
只有清除的位置放在for-in外面,同时又在复位之前,这样就是说三次运动结束后,再来判断是否清除定时器。
希望我解释清楚了~
而变量复位的位置放在哪?当然是三次move都执行完之后,若为false就复位,并且再次判断。所以这个复位必然是放在定时器里面,for-in外面。
再接着考虑一下清除定时器的位置放在哪,如果在for-in里面,当第一个move为true时,由于变量复位了,后面的move都不会执行。
只有清除的位置放在for-in外面,同时又在复位之前,这样就是说三次运动结束后,再来判断是否清除定时器。
希望我解释清楚了~
2016-05-18
已采纳回答 / 不再热情似火
flag放在函数外面也行,但是每次执行都必须初始化 flag 为 true,其次,flag 的 初始化 必须放在 for in 循环上面(不管你在哪定义flag)。 因为是for in 循环,参数达到目标之后,确实不执行你说的 icur != json[changeType] ; 但是,其余的for 循环时,会对其他的元素进行这个判断 if (attr !== json[attr] ) ;如果不等,flag 就变成了false;你可能看错了一个地方,if(flag === true){.....} 是放...
2016-05-17
已采纳回答 / Csunnnnn
思路上分析,可以肯定问题出现在条件判断上,即tmd == 0.3这个条件从来没成立过,实际上是永不成立,这是浮点数的锅。目前一切语言的浮点数计算都是近似计算,会精确到小数点16位以上。所以对于浮点数变量tmd来说,人为感觉是 tmd == 0.3的时候, tmd实际值则是 0.300000000000001之类的值,所以不等。想要看清tmd实际值,只需在 tmd = tmd - 0.1;这句话后面加alert(tmd),就看得一清二楚。
2016-05-17
老师把这句话写成了icur = parseFloat(getStyle(obj.attr))*100;半天没出来,应该是icur = parseFloat(getStyle(obj,attr))*100;
2016-05-16