第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

flag = false 是什么時候被重置為true的?

照著視頻的代碼實踐了一次,發(fā)現(xiàn)沒有把flag重置為true的代碼,但是最后確確實實是清除了定時器,那么,flag是什么時候被重置的呢?

另外,看到有人回答,flag應該被聲明在定時器里面,這個是不對的。如果聲明在定時器里面,那么就會出現(xiàn)視頻中聲明flag之前的bug。

求大神解答一下。


上面的問題好像有點不清晰哈,下面說清楚一點。

flag=true是放在定時器外面的,對吧?定時器里面是沒有代碼把flag重置為true的,當?shù)谝淮未a執(zhí)行到

if(icur!=json[attr]){
????flag=false;
}


這里的時候,flag就被賦值為false了,之后都沒有給flag賦值為true。

那么最后是怎么判斷到flag=true的呢?


在這里就很不明白,因為沒有把flag重置為true的話,其實是沒辦法執(zhí)行

if(flag){
????clearInterval(obj.timer);
????if(fn){
????????fn();
?????}
?}

和之后的fn函數(shù)的。


正在回答

12 回答

看完了樓主寫的,完全沒有毛病,教程代碼確實有BUG,不過既然因為?speed?=?(json[attr]?-?icur)/8 語句, 當 speed 為0時就能自己停止,為什么教程還要加一大堆檢測停止的代碼,我發(fā)現(xiàn)把那一大段去掉之后功能正常啊,不知道我有沒有想錯?

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

把flag放外面,最后速度為0,動畫是停止了,但是代碼一直在運行,無限循環(huán)的運行,if(flag)永遠到不了

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

沒仔細看,原來你的代碼已經(jīng)解決了。。

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

一、var flag = true; 是放在定時器外面的。

二、每次啟動定時器強制?flag = true。

三、在for循環(huán)外面,再次判斷flag。

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

六月ovo 提問者

上面我貼出的代碼是對的,flag是要放在定時器里面的,每次都需要重置定時器flag=true,視頻教程里面是有bug 的。那個for循環(huán)的內(nèi)容僅僅包含動畫的執(zhí)行代碼,不包含結(jié)束代碼,結(jié)束代碼是在for循環(huán)之后的,但是仍然在定時器里面。具體看我上面貼出的完整代碼那個回復吧
2017-04-13 回復 有任何疑惑可以回復我~

還需要把

if(flag){

????????????clearInterval(obj.timer);

????????????if(fn){

????????????????fn();

????????????}

這一段放在for 循環(huán)外面。。.

-------------手動分割------------------

樓主,你看看有木有bug,或者你有其他解決方案了沒有?

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

我去,不行。。

0 回復 有任何疑惑可以回復我~
//同步運動函數(shù)
function?move(obj,?json,?fn)?{
	//清除定時器,避免出現(xiàn)多個定時器	
	clearInterval(obj.timer);

	//設定定時器
	obj.timer?=?setInterval(function?()?{
		//聲明標桿
		var?flag?=?true;
		
		//遍歷同步運動屬性
		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)/100;
			speed?=?speed>0?Math.ceil(speed):Math.floor(speed);

			//?判斷是否所有值都達到了目標值,判定暫停定時器的指標
			if?(icur?!=?json[attr])?{
				flag?=?false;
			}
			if?(attr?==?'opacity')?{
				obj.style.opacity?=?(icur?+?speed)?/?100;
				obj.style.filter?=?'alpha(opacity:'?+?(icur?+?speed)?+?')';
			}?else?{
				obj.style[attr]?=?(icur?+?speed)?+?'px';
			}
		}	
		
		//?注意,for?in遍歷到此結(jié)束,下面的清除定時器部分不屬于for遍歷里面的代碼,是定時器最后面的部分
		//清除定時器
		if(flag){
			clearInterval(obj.timer);
			if(fn){
				fn();
			}
		}		
	},?1);
}


//獲取任意屬性
function?getStyle(obj,?attr)?{
	if?(obj.currentStyle)?{
		return?obj.currentStyle[attr];?//IE取樣式
	}?else?{
		return?getComputedStyle(obj,?false)[attr];
	}
}


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

Arya_Stark

你好,我發(fā)現(xiàn)在第12行代碼 for (var attr in json) { 之后 加入第13行代碼,flag = true; 強制每次循環(huán)之前預設 flag為true,就可以實現(xiàn)鏈式動畫了。 你看看還有其他問題么?
2017-04-13 回復 有任何疑惑可以回復我~

經(jīng)過多番測試,視頻中的完美運動代碼存在bug,這個框架只可以實現(xiàn)同步動畫,不可以實現(xiàn)鏈式動畫。

同步動畫最后會停止,不是因為

if(flag){
????clearInterval(obj.timer);
????if(fn){
????????fn();
?????}
}

而是代碼中的

speed?=?(json[attr]?-?icur)/8;

這一部分等于0了,也就是說,動畫不再變化了,看起來就好像清除了定時器一樣。

如果在清除定時器的判定語句中加入一個測試語句,可以發(fā)現(xiàn),第一次鼠標移入目標的時候,第一次執(zhí)行到這個動畫,是不會執(zhí)行到測試的語句的,說明定時器的判定語句并未執(zhí)行。

if(flag){
????alert(12345678978979);?//注意這部分,第一次執(zhí)行動畫的時候,是不會執(zhí)行到這里的。因為flag一直是false
????clearInterval(obj.timer);
????if(fn){
????????fn();
?????}
}

如果沒有onmouseout的動畫,那么,第二次鼠標移進去的時候,在執(zhí)行動畫之前,都滿足

json[attr]=icur;

也就是說speed在第二次執(zhí)行動畫的時候,一直是0,那么這個時候,下面這個判定就沒有執(zhí)行了

if(icur?!=?json[attr]){
????flag?=?false;
}

于是flag就是第二次執(zhí)行動畫的初始值,也就是:

var?flag?=?true;

自然而然的,后面的這部分代碼就能夠執(zhí)行了。

if(flag){
????alert(12345678978979);//第二次執(zhí)行onmouseover動畫,就會執(zhí)行到這里了
????clearInterval(obj.timer);
????if(fn){
????????fn();
?????}
}


上面講得比較啰嗦,不知道大家有沒有看懂,沒看懂的可以照著一步一步去嘗試一下,會得到我說的這個結(jié)果的

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

首先我終于找到跟我一樣認為flag是放在定時器外的人了,這一節(jié)課里面用的json[attr]不是target,json[attr]就相當于json.attr; 源碼:

if(itur?!=?json[attr]?){
flag=false;
}

我資質(zhì)較淺,我以個人名義說說我的想法,

var flag=true;這是放在計時器外的對吧,當遇到if(itur != json[attr] )語句的時候,就把flag這個全局變量設為false, 如果if(itur != json[attr] )不成立的時候,if( flag ){}這個語句就會找到全局變量,所以這就是為什么要放在計時器外

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

六月ovo 提問者

噢,代碼我打錯了,應該是json[attr]的,謝謝糾正。 另外,我還是不太明白,就像你說的,當遇到if(itur != json[attr] )語句的時候就把flag這個全局變量設為false,然后當if(itur != json[attr] )不成立的時候,if( flag ){}這個語句再調(diào)用這個全局變量,它不同樣是false嗎? if(flag)應該是if(flag == true) 的寫法對吧? 我還在到處查資料,然后把之前視頻寫的那個完美框架重新試了一下,好像是沒辦法執(zhí)行到鏈式動畫了,也就是沒有了后面的fn。
2017-03-26 回復 有任何疑惑可以回復我~

評論在一樓的那位大哥已經(jīng)誤導了大家,flag放在計時器內(nèi)會出現(xiàn)bug.

你的問題我有點看不明白啊哥們,說的明白些

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

六月ovo 提問者

我的問題就是,flag=true是放在定時器外面的,對吧?定時器里面是沒有代碼把flag重置為true的,當?shù)谝淮未a執(zhí)行到 if(icur!=iTarget){ flag=false; } 這里的時候,flag就被賦值為false了,之后都沒有給flag賦值為true,那么最后是怎么判斷到flag=true的呢? 在這里就很不明白,因為沒有把flag重置為true的話,其實是沒辦法執(zhí)行clearInterval(obj.timer);和之后的fn函數(shù)的。
2017-03-26 回復 有任何疑惑可以回復我~
首頁上一頁12下一頁尾頁

舉報

0/150
提交
取消

flag = false 是什么時候被重置為true的?

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

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號