服了,有没有人遇到了就是链式代码只执行了第一个函数,函数内部的函数都不执行?比如说给一个div先把宽度从200增加到400,这是执行一次的方法对吧,宽度增加完了以后再把高度增加到500,但是这里我遇到的问题就是,第一次执行,宽度增加了,但是高度却不被执行,也就是内部的方法代码并没执行,调试发现直接被跳过了。。原来我在判断有没有方法的时候也就是if(fn){}这里,我把这个判断语句写在了clearInterval(timer)前面去了。。。我靠,就这样,代码没报错,到处去搜去问。。最后把位置颠倒一下就好了。。也就是把clearInterval这句停止定时器的代码先于if(fn)执行。。。。
2018-05-02
关于flag定义时的三个位置问题
1flag位于for循环的内部
flag在里面的话,只要flag未设false,并立刻跳出for循环,就导致定时器的终止,即对于解决老师提到的宽度201问题毫无帮助
2flag位于for外部,定时器内部
正确,在几个属性值到达自己的目标值前,不会提前终止定时器。
3flag位于定时器外,function函数内
可以运行,但有问题。
flag没用,只是因为没有关闭定时器,所以三个属性都到达了自己的目标值,与flag没有关系
检验方法:跳出for循环后的if语句内部加入alert(flag),最好放在清除定时器前,你就能看到,if内部并没有执行,网页中也没有提示框
1flag位于for循环的内部
flag在里面的话,只要flag未设false,并立刻跳出for循环,就导致定时器的终止,即对于解决老师提到的宽度201问题毫无帮助
2flag位于for外部,定时器内部
正确,在几个属性值到达自己的目标值前,不会提前终止定时器。
3flag位于定时器外,function函数内
可以运行,但有问题。
flag没用,只是因为没有关闭定时器,所以三个属性都到达了自己的目标值,与flag没有关系
检验方法:跳出for循环后的if语句内部加入alert(flag),最好放在清除定时器前,你就能看到,if内部并没有执行,网页中也没有提示框
2018-03-18
没必要搞那么麻烦,可以直接定义一个itrue判断已达到目标值的属性个数,itrue定义在定时器外itrue=0;
if(icur!=json[attr]{继续执行运动函数}
else itrue++;
if(itrue==json.length) {关闭定时器;fn();}
if(icur!=json[attr]{继续执行运动函数}
else itrue++;
if(itrue==json.length) {关闭定时器;fn();}
2018-02-28