關(guān)于else if 的疑問
我用傳統(tǒng) js 方法編寫小球動畫時發(fā)現(xiàn)三個球球速一個比一個快,而且不能回滾,第三個球一直在原位震動,后來發(fā)現(xiàn)是因為我把代碼里的 else { if... else...}當(dāng)成了 else if.. else...,但我不知道這二者有什么區(qū)別,為什么最后動畫結(jié)果不一樣?
錯誤代碼:
function?animation(ball,?distance,?cb){
setTimeout(function(){
var?marginLeft?=?parseInt(ball.style.marginLeft,?10);
???? if?(marginLeft?===?distance){
???? cb?&&?cb();
???? ????}?
???? else?if?(marginLeft?<?distance){
????????????marginLeft++;
???? }?
???? ?????else?{
???? marginLeft--;
???? }
?????????????ball.style.marginLeft?=?marginLeft?+?'px';
?????????????animation(ball,?distance,?cb);
???? },?13)
}正確代碼:
function?animation(ball,?distance,?cb){
setTimeout(function(){
var?marginLeft?=?parseInt(ball.style.marginLeft,?10);
???? if?(marginLeft?===?distance){
???? cb?&&?cb();
???? ????}?
???? else{?if?(marginLeft?<?distance){
????????????marginLeft++;
???? }?
???? ?????else?{
???? marginLeft--;
???? }
?????????????ball.style.marginLeft?=?marginLeft?+?'px';
?????????????animation(ball,?distance,?cb);
?????????}
???? },?13)
}求解答
2017-08-14
你這個if 和else if 和else不管怎么判斷 ?多會一直調(diào)用自己本身,這是關(guān)鍵,你可以理解一下,當(dāng)marginLeft==distance的時候函數(shù)還能調(diào)用本身的結(jié)果是什么,無限的cb()被調(diào)用,cb也就是ball2,ball3的函數(shù), N個cb意味著ball2,ball3的marginLeft 增長速度爆炸。左右晃是因為ball3 改變distance的原因,他同時在執(zhí)行兩個判斷,舊distance和新distance的判斷
2017-07-12
當(dāng)條件不滿足 if時 就會執(zhí)行else if里面的代碼。所以當(dāng)?shù)谝粋€ 求 滾動到初始位置之前 一直執(zhí)行 elseif.
至于抖動是因為 小球滾動動到 9Px位置時,下一次又執(zhí)行else if 又向前滾動,來回循環(huán) 所一看家的是抖動