為什么這段代碼有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)); } //設(shè)置速度 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); //?回調(diào)函數(shù) if?(fn)?{ fn(); } } } },30)
如果不設(shè)立標(biāo)桿。用if()else 有有bug
2016-04-20
首先,else要放在for循環(huán)外面,否則,一旦某一個(gè)attr達(dá)到目標(biāo)值,即icur==json[attr]成立,就完成了else的判斷.會(huì)運(yùn)行else的代碼.
其次,設(shè)立標(biāo)桿的目的是為了方便取值,為else里面的代碼進(jìn)行成立與否的判斷!!在for循環(huán)里面,程序會(huì)進(jìn)行分次判斷,有幾個(gè)attr就會(huì)判斷幾次,只要有一個(gè)false,返回值就是false,如果不設(shè)立標(biāo)桿,會(huì)出現(xiàn)某次是true,某次是false的結(jié)果,無(wú)法進(jìn)行后面的else判斷.
即只要有一個(gè)attr達(dá)到目標(biāo)值,icur==json[attr]的等式就會(huì)成立(就是說(shuō)這個(gè)等式無(wú)法作為else執(zhí)行判斷的依據(jù)),也就是else的代碼就會(huì)執(zhí)行,計(jì)時(shí)器就會(huì)清除.
2016-04-18
沒(méi)問(wèn)題呀