關于else if 的疑問
我用傳統 js 方法編寫小球動畫時發現三個球球速一個比一個快,而且不能回滾,第三個球一直在原位震動,后來發現是因為我把代碼里的 else { if... else...}當成了 else if.. else...,但我不知道這二者有什么區別,為什么最后動畫結果不一樣?
錯誤代碼:
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不管怎么判斷 ?多會一直調用自己本身,這是關鍵,你可以理解一下,當marginLeft==distance的時候函數還能調用本身的結果是什么,無限的cb()被調用,cb也就是ball2,ball3的函數, N個cb意味著ball2,ball3的marginLeft 增長速度爆炸。左右晃是因為ball3 改變distance的原因,他同時在執行兩個判斷,舊distance和新distance的判斷
2017-07-12
當條件不滿足 if時 就會執行else if里面的代碼。所以當第一個 求 滾動到初始位置之前 一直執行 elseif.
至于抖動是因為 小球滾動動到 9Px位置時,下一次又執行else if 又向前滾動,來回循環 所一看家的是抖動