亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于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)
	}

求解答

正在回答

2 回答

你這個if 和else if 和else不管怎么判斷 ?多會一直調用自己本身,這是關鍵,你可以理解一下,當marginLeft==distance的時候函數還能調用本身的結果是什么,無限的cb()被調用,cb也就是ball2,ball3的函數, N個cb意味著ball2,ball3的marginLeft 增長速度爆炸。左右晃是因為ball3 改變distance的原因,他同時在執行兩個判斷,舊distance和新distance的判斷

0 回復 有任何疑惑可以回復我~

當條件不滿足 if時 就會執行else if里面的代碼。所以當第一個 求 滾動到初始位置之前 一直執行 elseif.

至于抖動是因為 小球滾動動到 9Px位置時,下一次又執行else if 又向前滾動,來回循環 所一看家的是抖動

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
進擊Node.js基礎(二)
  • 參與學習       76735    人
  • 解答問題       242    個

本教程帶你攻破 Nodejs,讓 JavaScript流暢運行在服務器端

進入課程

關于else if 的疑問

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號