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

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

為什么這段代碼有Bug

function?MoveModelFn(obj,json,fn){
	//var?flag=true;
	clearInterval(obj.timer);
	obj.timer=setInterval(function(){
		for(var?attr?in?json){
			//?判斷屬性
			var?icur=0;
			if?(attr=='opacity')?{
				icur?=Math.round(parseFloat(getStyle(obj,attr))*100);
			}else{
				icur=parseInt(getStyle(obj,attr));
			}
			//設置速度
			var?speed=(json[attr]-icur)/10;
			var?speed=speed>0?Math.ceil(speed):Math.floor(speed);
			//?判斷停止
			if(icur!=json[attr]){
				//flag=false;
				if?(attr=='opacity')?{
					obj.style.filter='alpha(opacity:'+(icur+speed)+')';//icur原始值+變化值speed
					obj.style.opacity=(icur+speed)/100;
				}else{
					obj.style[attr]=icur+speed+"px";
				}		
			}else	{
					clearInterval(obj.timer);
				//?回調函數
					if?(fn)?{
						fn();
				}
			}
		}	
		
	},30)

如果不設立標桿。用if()else 有有bug

正在回答

2 回答

首先,else要放在for循環外面,否則,一旦某一個attr達到目標值,即icur==json[attr]成立,就完成了else的判斷.會運行else的代碼.

其次,設立標桿的目的是為了方便取值,為else里面的代碼進行成立與否的判斷!!在for循環里面,程序會進行分次判斷,有幾個attr就會判斷幾次,只要有一個false,返回值就是false,如果不設立標桿,會出現某次是true,某次是false的結果,無法進行后面的else判斷.

只要有一個attr達到目標值,icur==json[attr]的等式就會成立(就是說這個等式無法作為else執行判斷的依據),也就是else的代碼就會執行,計時器就會清除.

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

甫里 提問者

非常感謝!
2016-04-20 回復 有任何疑惑可以回復我~

沒問題呀

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

舉報

0/150
提交
取消

為什么這段代碼有Bug

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

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

幫助反饋 APP下載

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

公眾號

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