課程
/前端開發
/JavaScript
/JS動畫效果
定時器不會關閉了,一定都在運行,只是speed是0不在增加而已,
怎么樣讓定時器關閉呢
2015-03-06
源自:JS動畫效果 6-2
正在回答
分析:var flag = true; ? 應該放進for(var attr in json){} 中去 如果不放進去的話???? 雖然效果是一樣的 但是定時器一直就沒有停止下來 ????可以分別在兩個 if( iCur !=json[attr]) 和 if(flag) 里面添加console.log(); 來調用查看定時器是否關閉?
原因: 如果var flag = true; 放在 setInterval();的外面 . 在if(iCur !=json[attr])中 flag=flase;? 由于flag一直等于flase 就無法執行if(flag)里面的內容
解決: 1.可以將var flag = true ; 放進for(var attr in json){} 里面 ????????2.可以在if(iCur!=json[atter]) 后面加上一個else{ flag = true;}
中古 提問者
Ripple07 回復 中古 提問者
這樣解決了timer沒關閉的問題。每次循環中如果有一個屬性沒有達到目標值,則flag為false
function startMove(obj,json,fn){ ? ?var flag = true; ? ?clearInterval(obj.timer); ? ?obj.timer = setInterval(function(){ ? ? ? ?for(var attr in json){ ? ? ? ? ? ?var cur = 0; ? ? ? ? ? ?iTarget = json[attr]; ? ? ? ? ? ?if(attr == 'opacity'){ ? ? ? ? ? ? ? ?cur = Math.round(parseFloat(getStyle(obj,attr))*100); ? ? ? ? ? ?}else{ ? ? ? ? ? ? ? ?cur = parseInt(getStyle(obj,attr)); ? ? ? ? ? ?} ? ? ? ? ? ?var speed = (iTarget - cur)/8; ? ? ? ? ? ?speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); ? ? ? ? ? ?if( cur == iTarget ){ ? ? ? ? ? ? ?flag = true; ? ? ? ? ? ?}else{ ? ? ? ? ? ? ?flag = false; ? ? ? ? ? ?} ? ? ? ? ? ?if( attr == 'opacity'){ ? ? ? ? ? ? ? ?obj.style.filter = 'alpha(opacity' + cur + speed + ')'; ? ? ? ? ? ? ? ?obj.style.opacity = (cur + speed)/100; ? ? ? ? ? ?}else{ ? ? ? ? ? ? ? ?obj.style[attr] = cur + speed + "px"; ? ? ? ? ? ?} ? ? ? ?} ? ? ? ?if(flag){ ? ? ? ? ? ?clearInterval(obj.timer); ? ? ? ? ? ?if(fn){ ? ? ? ? ? ? ? ?fn(); ? ? ? ? ? ?} ? ? ? ?} ? ?},30);}
qq_請叫我小強_0
舉報
通過本課程JS動畫的學習,從簡單動畫開始,逐步深入各種動畫框架封裝
1 回答定時器未關閉吧?
2 回答為什么我的關閉定時器不起效果
4 回答關于定時器
2 回答關于取消定時器——clearInterval
1 回答關于定時器的問題?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-04-15
分析:var flag = true; ? 應該放進for(var attr in json){} 中去 如果不放進去的話???? 雖然效果是一樣的 但是定時器一直就沒有停止下來 ????可以分別在兩個 if( iCur !=json[attr]) 和 if(flag) 里面添加console.log(); 來調用查看定時器是否關閉?
原因: 如果var flag = true; 放在 setInterval();的外面 . 在if(iCur !=json[attr])中 flag=flase;? 由于flag一直等于flase 就無法執行if(flag)里面的內容
解決: 1.可以將var flag = true ; 放進for(var attr in json){} 里面 ????????2.可以在if(iCur!=json[atter]) 后面加上一個else{ flag = true;}
2015-06-10
這樣解決了timer沒關閉的問題。每次循環中如果有一個屬性沒有達到目標值,則flag為false
function startMove(obj,json,fn){
? ?var flag = true;
? ?clearInterval(obj.timer);
? ?obj.timer = setInterval(function(){
? ? ? ?for(var attr in json){
? ? ? ? ? ?var cur = 0;
? ? ? ? ? ?iTarget = json[attr];
? ? ? ? ? ?if(attr == 'opacity'){
? ? ? ? ? ? ? ?cur = Math.round(parseFloat(getStyle(obj,attr))*100);
? ? ? ? ? ?}else{
? ? ? ? ? ? ? ?cur = parseInt(getStyle(obj,attr));
? ? ? ? ? ?}
? ? ? ? ? ?var speed = (iTarget - cur)/8;
? ? ? ? ? ?speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
? ? ? ? ? ?if( cur == iTarget ){
? ? ? ? ? ? ?flag = true;
? ? ? ? ? ?}else{
? ? ? ? ? ? ?flag = false;
? ? ? ? ? ?}
? ? ? ? ? ?if( attr == 'opacity'){
? ? ? ? ? ? ? ?obj.style.filter = 'alpha(opacity' + cur + speed + ')';
? ? ? ? ? ? ? ?obj.style.opacity = (cur + speed)/100;
? ? ? ? ? ?}else{
? ? ? ? ? ? ? ?obj.style[attr] = cur + speed + "px";
? ? ? ? ? ?}
? ? ? ?}
? ? ? ?if(flag){
? ? ? ? ? ?clearInterval(obj.timer);
? ? ? ? ? ?if(fn){
? ? ? ? ? ? ? ?fn();
? ? ? ? ? ?}
? ? ? ?}
? ?},30);
}