課程
/前端開發
/JavaScript
/JS動畫效果
按照這個方式寫下來,同時運動是實現了,可是鏈式運動做不了哇。。求解!難道要用兩套不一樣的嗎?
2015-03-19
源自:JS動畫效果 6-2
正在回答
function?startMove(obj,json,fnEnd){ clearInterval(obj.timer); obj.timer?=?setInterval(function(){ doMove(obj,json,fnEnd); },30); } function?doMove(obj,json,fnEnd){ var?iCur?=?0; var?attr?=?null; var?bStop?=?true; for(attr?in?json){ if(attr=='opacity'){ //if(parseInt(100*getStyle(obj,attr))==0){ //iCur?=?parseInt(100*getStyle(obj,attr)); //} iCur=Math.round(parseFloat(getStyle(obj,attr))*100); //else{ //iCur?=?parseInt(100*getStyle(obj,attr))?||?100; ?????//} } else{ iCur?=?parseInt(getStyle(obj,attr))?||?0; } var?iSpeed?=?(json[attr]?-?iCur)/5; iSpeed?=?(iSpeed>0)???Math.ceil(iSpeed)?:?Math.floor(iSpeed); if(json[attr]!=iCur){ bStop?=?false; } if(attr=='opacity'){ obj.style.filter?=?'alpha(opacity='+?(iCur?+?iSpeed)?+')'; obj.style.opacity?=?(iCur?+?iSpeed)/100; } else{ obj.style[attr]?=?iCur?+?iSpeed?+?'px'; } } if(bStop){ clearInterval(obj.timer); if(fnEnd){ fnEnd.call(obj); } } } function?stopMove(obj){ clearInterval(obj.timer); } function?getStyle(obj,attr){ if(obj.currentStyle){ return?obj.currentStyle[attr]; } else{ return?getComputedStyle(obj)[attr]; } }
林青石
你把startMove(oDiv,{width:301,top:100,opacity:100}中的width變大一點,比如400,就可以了。感覺是width變化時間太短導致的
不對應該這么寫 就沒事了
if (icon==json[attr]) ? ??? ??? ?{? ??? ??? ??? ?flag=true;? ??? ??? ?}else{? ??? ??? ??? ?flag=false;? ??? ??? ?}
MIS_Lu
我本以為我解決了問題? 不過又出來一堆問題? 大家多交流解決吧
是這老師不夠嚴謹 還是怎么? 他是不是漏了點代碼
if (icon!=json[attr]) ? ??? ??? ?{? ??? ??? ??? ?flag=false;? ??? ??? ?}else{? ??? ??? ??? ?flag=true;? ??? ??? ?}
else語句沒寫導致flag無法獲得true值? 以致整個if(flag)都沒執行,你們的鏈式運動GG了
我也是這樣的,怎么回事?代碼如下:
<!DOCTYPE?html> <html> <head> <meta?charset="UTF-8"> <title>運動框架最終版</title> <script?type="text/javascript"?src="move.js"></script> <style?type="text/css"> *{margin:0;padding:0;} div{margin:0?auto;width:300px;height:200px;border:4px?solid?#FF0;background:#000;filter:alpha(opacity:30);opacity:0.3;position:relative;top:0;} </style> <script?type="text/javascript"> window.onload=function?()?{ var?oDiv=document.getElementById("box"); oDiv.onmouseover=function?()?{ startMove(oDiv,{width:301,top:100,opacity:100},function?()?{ alert(1) }); } oDiv.onmouseout=function?()?{ startMove(oDiv,{width:300,top:0,opacity:30}); } } //獲取樣式 function?getStyle?(obj,attr)?{ ??if?(obj.currentStyle)?{ ????return?obj.currentStyle.attr; ??}?else{ ????return?getComputedStyle(obj,false)[attr]; ??}; } //運動函數 function?startMove?(obj,json,fn)?{ ??var?flag=true;?????????????//假設所有運動都達到了目標值 ??clearInterval(obj.timer); ??obj.timer=setInterval(function(){ ??//遍歷json中的值 ????for(var?attr?in?json){ ??//計算速度 ??var?iCur=parseInt(getStyle(obj,attr))? ????if?(attr=="opacity")?{ ?????iCur=Math.round(parseFloat(getStyle(obj,attr))*100); ????}? ??????speed=(json[attr]-iCur)/20; ??????speed=speed<0?Math.floor(speed):Math.ceil(speed) ??//判斷所有屬性是否達到目標值 ??????if(iCur!=json[attr]){ ?????????flag=false; ??????}????????? ??//判斷屬性是否為透明度? ??????if?(attr=="opacity"){? ??????obj.style.filter='alpha(opacity:'+(iCur+speed)+')'; ??????obj.style.opacity=(iCur+speed)/100; ??????}?else{ ????????obj.style[attr]=iCur+speed+"px"; ??????}; ??//判斷所有屬性是否達到目標值 ??????if?(flag)?{ ????????clearInterval(obj.timer); ??//判斷是否有需要執行的下一個函數 ????????if?(fn)?{ ??????????fn(); ????????}? ????} ??} ??},30) } </script> </head> <body> <div?id="box"></div> </body> </html>
如果傳入的是this關鍵字 就要注意this在這里指向誰
代碼貼出來,不可能實現不了。。??赡苁菍戝e了把
舉報
通過本課程JS動畫的學習,從簡單動畫開始,逐步深入各種動畫框架封裝
2 回答老師的完美運動框架有bug
1 回答用運動框架應用鏈式運動出現的錯誤
3 回答運動框架實現思路
6 回答鏈式運動不能嗎
1 回答完美的運動框架中for循環實現多個運動同時進行變化的原理是啥了?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-08-26
2015-07-22
你把startMove(oDiv,{width:301,top:100,opacity:100}中的width變大一點,比如400,就可以了。感覺是width變化時間太短導致的
2015-07-11
不對應該這么寫 就沒事了
if (icon==json[attr])
? ??? ??? ?{
? ??? ??? ??? ?flag=true;
? ??? ??? ?}else{
? ??? ??? ??? ?flag=false;
? ??? ??? ?}
2015-07-11
我本以為我解決了問題? 不過又出來一堆問題? 大家多交流解決吧
2015-07-11
是這老師不夠嚴謹 還是怎么? 他是不是漏了點代碼
if (icon!=json[attr])
? ??? ??? ?{
? ??? ??? ??? ?flag=false;
? ??? ??? ?}else{
? ??? ??? ??? ?flag=true;
? ??? ??? ?}
else語句沒寫導致flag無法獲得true值? 以致整個if(flag)都沒執行,你們的鏈式運動GG了
2015-06-17
我也是這樣的,怎么回事?代碼如下:
2015-04-11
如果傳入的是this關鍵字 就要注意this在這里指向誰
2015-04-11
代碼貼出來,不可能實現不了。。??赡苁菍戝e了把