課程
/前端開發(fā)
/JavaScript
/JS動(dòng)畫效果
flag的定義會不會有錯(cuò)? 執(zhí)行一次后flag變成FALSE,之后flag的值就在不改變了呀 怎么可能會去清除定時(shí)器
2016-05-13
源自:JS動(dòng)畫效果 6-2
正在回答
那個(gè)確實(shí)寫錯(cuò)了,應(yīng)該把flag寫進(jìn)定時(shí)器里
weibo_幸福長大了_0 提問者
falg要放在定時(shí)器里面,不然每次重新執(zhí)行定時(shí)器就不會更新為true.( if(flag)要在for循環(huán)外面)
flag必然會變回true的因?yàn)槎〞r(shí)器如果不關(guān)閉就會無限的重復(fù)執(zhí)行,每次執(zhí)行后就相當(dāng)于又給flag賦值成true了
以上都是我自己的理解? 錯(cuò)誤還是正確我也不知道
像你這么寫 和老師這么寫都是一樣的。因?yàn)槎际窃诤瘮?shù)里面定義的,flag都是局部變量,由于閉包和作用域所以都能讀取到這個(gè)變量。
我的理解? 在還沒有全部到達(dá) itarget之前,flag始終為false,當(dāng)所有attr到達(dá)itarget時(shí)此時(shí)需要清除定時(shí)器,而清除定時(shí)器的條件是flag為true? 。(為什么flag能變化是因?yàn)橛卸〞r(shí)器,每30ms就會更新里面的數(shù)據(jù)。)
obj.timer=setInterval(function () { ? ? ? ?var flg =true; ?//像這樣嗎? ?感覺也不對,flag變false后,還是不會再變回true呀? ? ? ? ?for (var attr in json) { ? ? ? ? ? ?//獲取當(dāng)前值 ? ? ? ? ? ?var icur = 0; ? ? ? ? ? ?if (attr == 'opacity') { ? ? ? ? ? ? ? ?icur = Math.round(parseFloat(getStyle(obj, attr)) * 100); ? ? ? ? ? ?} ? ? ? ? ? ?else { ? ? ? ? ? ? ? ?icur = parseInt(getStyle(obj, attr)); ? ? ? ? ? ?} ? ? ? ? ? ?//算速度 ? ? ? ? ? ?var speed = 0; ? ? ? ? ? ?speed = (json[attr] - icur) / 8; ? ? ? ? ? ?speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); ? ? ? ? ? ?//檢測停止 ? ? ? ? ? ?if (icur != json[attr]) { ? ? ? ? ? ? ? ?flg=false; ? ? ? ? ? ?} ? ? ? ? ? ?if (attr == 'opacity') { ? ? ? ? ? ? ? ? ? ?//針對IE瀏覽器 ? ? ? ? ? ? ? ? ? ?obj.style.filter = 'alpha(opacity:' + (icur + speed) + ')'; ? ? ? ? ? ? ? ? ? ?//針對其他 ? ? ? ? ? ? ? ? ? ?obj.style.opacity = (icur + speed) / 100; ? ? ? ? ? ? ? ?} ? ? ? ? ? ? ? ?else { ? ? ? ? ? ? ? ? ? ?obj.style[attr] = icur + speed + 'px'; ? ? ? ? ? ? ? ?} ? ? ? ? ? ? } ? ? ? ?if (flg){ ? ? ? ? ? ?clearInterval(obj.timer); ? ? ? ? ? ?if (fn){ ? ? ? ? ? ? ? ?fn() ? ? ? ? ? ?} ? ? ? ?} ? ?},30)}
像這樣嗎? ?感覺也不對,flag變false后,還是不會再變回true呀?郁悶呀,這邏輯不對呀
那些微笑
舉報(bào)
通過本課程JS動(dòng)畫的學(xué)習(xí),從簡單動(dòng)畫開始,逐步深入各種動(dòng)畫框架封裝
2 回答flag說是定義在定時(shí)器外不對,可是放在里邊,覺得也不對,flag變false后,還是不會再變回true呀
3 回答為什么flag怎么會變成true?
1 回答flag是怎么變成true的??
3 回答flag值的改變?
1 回答函數(shù)內(nèi)部的 flag=false; 是不是應(yīng)該改成 var flag =false?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-05-14
那個(gè)確實(shí)寫錯(cuò)了,應(yīng)該把flag寫進(jìn)定時(shí)器里
2016-06-05
falg要放在定時(shí)器里面,不然每次重新執(zhí)行定時(shí)器就不會更新為true.( if(flag)要在for循環(huán)外面)
2016-05-30
flag必然會變回true的因?yàn)槎〞r(shí)器如果不關(guān)閉就會無限的重復(fù)執(zhí)行,每次執(zhí)行后就相當(dāng)于又給flag賦值成true了
2016-05-17
以上都是我自己的理解? 錯(cuò)誤還是正確我也不知道
2016-05-17
像你這么寫 和老師這么寫都是一樣的。因?yàn)槎际窃诤瘮?shù)里面定義的,flag都是局部變量,由于閉包和作用域所以都能讀取到這個(gè)變量。
2016-05-17
我的理解? 在還沒有全部到達(dá) itarget之前,flag始終為false,當(dāng)所有attr到達(dá)itarget時(shí)此時(shí)需要清除定時(shí)器,而清除定時(shí)器的條件是flag為true? 。(為什么flag能變化是因?yàn)橛卸〞r(shí)器,每30ms就會更新里面的數(shù)據(jù)。)
2016-05-15
obj.timer=setInterval(function () {
? ? ? ?var flg =true; ?//像這樣嗎? ?感覺也不對,flag變false后,還是不會再變回true呀?
? ? ? ?for (var attr in json) {
? ? ? ? ? ?//獲取當(dāng)前值
? ? ? ? ? ?var icur = 0;
? ? ? ? ? ?if (attr == 'opacity') {
? ? ? ? ? ? ? ?icur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
? ? ? ? ? ?}
? ? ? ? ? ?else {
? ? ? ? ? ? ? ?icur = parseInt(getStyle(obj, attr));
? ? ? ? ? ?}
? ? ? ? ? ?//算速度
? ? ? ? ? ?var speed = 0;
? ? ? ? ? ?speed = (json[attr] - icur) / 8;
? ? ? ? ? ?speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
? ? ? ? ? ?//檢測停止
? ? ? ? ? ?if (icur != json[attr]) {
? ? ? ? ? ? ? ?flg=false;
? ? ? ? ? ?}
? ? ? ? ? ?if (attr == 'opacity') {
? ? ? ? ? ? ? ? ? ?//針對IE瀏覽器
? ? ? ? ? ? ? ? ? ?obj.style.filter = 'alpha(opacity:' + (icur + speed) + ')';
? ? ? ? ? ? ? ? ? ?//針對其他
? ? ? ? ? ? ? ? ? ?obj.style.opacity = (icur + speed) / 100;
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?else {
? ? ? ? ? ? ? ? ? ?obj.style[attr] = icur + speed + 'px';
? ? ? ? ? ? ? ?}
? ? ? ? ? ? }
? ? ? ?if (flg){
? ? ? ? ? ?clearInterval(obj.timer);
? ? ? ? ? ?if (fn){
? ? ? ? ? ? ? ?fn()
? ? ? ? ? ?}
? ? ? ?}
? ?},30)
}
像這樣嗎? ?感覺也不對,flag變false后,還是不會再變回true呀?郁悶呀,這邏輯不對呀