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

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

我已經蹦了啊,要么不能實現同時運動到目標值,要么不能實現鏈式運動,已經試了將判斷句放到各種位置,還是不能完美解決,哎!

我已經蹦了啊,要么不能實現同時運動到目標值,要么不能實現鏈式運動,已經試了將判斷句放到各種位置,還是不能完美解決,哎!

正在回答

3 回答

將“var flag=true;”放入定時器內部,for in 循環的外部,解決定時器不能停止的問題。部分代碼:

obj.timer=setInterval(function?(){//定時器????????????
????????var?flag?=?true;//放在這里
????????????for(var?attr?in?json)//for?in?循環
????????????{
????????????//for?in??內部
????????????}

具體解釋就是:第一次進入定時器,flag被定義,賦值為true,接著進入for in循環,for in中會判斷各個屬性是否達成目的,只要有一項未達成,將flag置為false,此時flag=false;跳出 for in循環后,判斷,flag是否為true,部分代碼:

????????????if(flag)//判斷
????????????{
????????????????clearInterval(obj.timer);//清空定時器

因為flag=false,所以if(flag)不成立,不清空定時器;燃火

第二次進入定時器,定時器內第一行,flag被置為true,接著進入for in循環,for in中繼續判斷,若有一項未達成,flag又被置為false;跳出for in循環后,判斷是否清楚定時器;。。。。第三次進入、第四次進入,如此反復,當for in中全部達成時,flag不會被置為false,此時flag=true;跳出 for in循環,判斷if(flag)成立,清除定時器,over。

鏈式運動問題:不能進行鏈式運動的最大阻礙是回調函數的參數傳遞問題;

方案A

這是替換定時器中判斷是否停止定時器那部分代碼:

????????????if(flag)
????????????{
????????????????clearInterval(obj.timer);
????????????????if(fn)
????????????????{
????????????????????fn(obj);//將本次對象作為參數傳入回調函數
????????????????????//fn.call(obj);//對象替換
????????????????}

添加方法時的代碼:

window.onload=function(){
????????var?oLi?=?document.getElementById('li1');
????????oLi.onmouseover=function(){
????????????startMove(oLi,{width:400,height:200,opacity:100},function(obj){//有參數
????????????????startMove(obj,{width:200,height:100,opacity:30},function(obj){//有參數
????????????????????//startMove(obj,{width:400,height:200,opacity:100});//傳遞參數
????????????????});
????????????});
????????}
}

方案B

定時器中:

if(flag)
????????????{
????????????????clearInterval(obj.timer);
????????????????if(fn)
????????????????{
????????????????????//fn(obj);//將本次對象作為參數傳入回調函數
????????????????????fn.call(obj);//對象替換
????????????????}

添加方法時的代碼:

window.onload=function(){
????????var?oLi?=?document.getElementById('li1');
????????oLi.onmouseover=function(){
????????????startMove(oLi,{width:400,height:200,opacity:100},function(){//無參數
????????????????startMove(this,{width:200,height:100,opacity:30},function(){//無參數
????????????????????//startMove(this,{width:400,height:200,opacity:100});//傳遞this
????????????????});
????????????});
????????}
}

其余代碼,參考老師寫的,這里是將對應的部位進行替換。如果運行有問題,稍微調試下,看看變量名、參數順序是否對應。我自己測試,沒有問題。

最后:下面這段代碼緊跟flag=false;后面較為合理

if(attr=='opacity')
{
????obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')';
????obj.style.opacity=(iCur+iSpeed)/100;
}
else
{
????obj.style[attr]=iCur+iSpeed+'px';
}


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

marshall_stan 提問者

非常感謝!
2015-11-12 回復 有任何疑惑可以回復我~
#2

木木380

方案A中不加參數,只需要將flag=true放入計時器中好像就可以了
2016-09-04 回復 有任何疑惑可以回復我~

不好意思寫錯了。只需要將定義的flag=true;放入計時器中即可以完美解決問題。記住重新在瀏覽器中打開。

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

東風破

大神,能給講一下為啥flag放入計時器中就解決了,非常感謝
2015-09-10 回復 有任何疑惑可以回復我~
#2

一布工程師

牛人,研究很久 終于解決該問題了
2015-09-14 回復 有任何疑惑可以回復我~

只需要將定義的flag=true;放入for循環即可以完美解決問題。記住重新在瀏覽器中打開。

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

舉報

0/150
提交
取消

我已經蹦了啊,要么不能實現同時運動到目標值,要么不能實現鏈式運動,已經試了將判斷句放到各種位置,還是不能完美解決,哎!

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

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

幫助反饋 APP下載

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

公眾號

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