關于else if 的疑問
我用傳統(tǒng) js 方法編寫小球動畫時發(fā)現(xiàn)三個球球速一個比一個快,而且不能回滾,第三個球一直在原位震動,后來發(fā)現(xiàn)是因為我把代碼里的 else { if... else...}當成了 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)用自己本身,這是關鍵,你可以理解一下,當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
當條件不滿足 if時 就會執(zhí)行else if里面的代碼。所以當?shù)谝粋€ 求 滾動到初始位置之前 一直執(zhí)行 elseif.
至于抖動是因為 小球滾動動到 9Px位置時,下一次又執(zhí)行else if 又向前滾動,來回循環(huán) 所一看家的是抖動