資源描述:
《javascript動(dòng)畫的實(shí)現(xiàn)原理淺析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、我真正系統(tǒng)地接觸和學(xué)習(xí)黨的基本知識是在這次中級黨校的培訓(xùn)班上。通過學(xué)習(xí),了解了黨的發(fā)展歷程,對黨的性質(zhì)、宗旨、任務(wù)等基本知識有了進(jìn)一步的了解Javascript動(dòng)畫的實(shí)現(xiàn)原理淺析 這篇文章主要介紹了Javascript動(dòng)畫的實(shí)現(xiàn)原理淺析,本文用兩個(gè)實(shí)例來解釋Javascript動(dòng)畫的實(shí)現(xiàn)原理,需要的朋友可以參考下 假設(shè)有這樣一個(gè)動(dòng)畫功能需求:把一個(gè)div的寬度從100px變化到200px。寫出來的代碼可能是這樣的: 代碼如下: functionanimate1(element,endValue,duration){ varstart
2、Time=newDate(), startValue=parseInt(element.style.width), step=1; vartimerId=setInterval(function(){ varnextValue=parseInt(element.style.width)+step; element.style.width=nextValue+'px'; if(nextValue>=endValue){ clearInterval(timerId); //顯示動(dòng)畫耗時(shí) element.innerHTML=newDa
3、te-startTime; } },duration/(endValue-startValue)*step);對黨的認(rèn)識也有了進(jìn)一步的提高。才真正體會(huì)到了中國共產(chǎn)黨的偉大、光榮和正確,更感到只有中國共產(chǎn)黨是全中國最廣大人民利益的忠實(shí)代表我真正系統(tǒng)地接觸和學(xué)習(xí)黨的基本知識是在這次中級黨校的培訓(xùn)班上。通過學(xué)習(xí),了解了黨的發(fā)展歷程,對黨的性質(zhì)、宗旨、任務(wù)等基本知識有了進(jìn)一步的了解 } animate1(document.getElementById('test1'),200,1000); 原理是每隔一定時(shí)間增加1px,一直到200px為止。然
4、而,動(dòng)畫結(jié)束后顯示的耗時(shí)卻不止1s(一般是1.5s左右)。究其原因,是因?yàn)閟etInterval并不能嚴(yán)格保證執(zhí)行間隔?! ∮袥]有更好的做法呢?下面先來看一道小學(xué)數(shù)學(xué)題: 代碼如下: A樓和B樓相距100米,一個(gè)人勻速從A樓走到B樓,走了5分鐘到達(dá)目的地,問第3分鐘時(shí)他距離A樓多遠(yuǎn)? 勻速運(yùn)動(dòng)中計(jì)算某個(gè)時(shí)刻路程的計(jì)算公式為:路程*當(dāng)前時(shí)間/時(shí)間。所以答案應(yīng)為100*3/5=60。 這道題帶來的啟發(fā)是,某個(gè)時(shí)刻的路程是可以通過特定公式計(jì)算出來的。同理,動(dòng)畫過程中某個(gè)時(shí)刻的值也可以通過公式計(jì)算出來,而不是累加得出: 代碼如下: fun
5、ctionanimate2(element,endValue,duration){ varstartTime=newDate(), startValue=parseInt(element.style.width); vartimerId=setInterval(function(){ varpercentage=(newDate-startTime)/duration;對黨的認(rèn)識也有了進(jìn)一步的提高。才真正體會(huì)到了中國共產(chǎn)黨的偉大、光榮和正確,更感到只有中國共產(chǎn)黨是全中國最廣大人民利益的忠實(shí)代表我真正系統(tǒng)地接觸和學(xué)習(xí)黨的基本知識是在這次中級
6、黨校的培訓(xùn)班上。通過學(xué)習(xí),了解了黨的發(fā)展歷程,對黨的性質(zhì)、宗旨、任務(wù)等基本知識有了進(jìn)一步的了解 varstepValue=startValue+(endValue-startValue)*percentage; element.style.width=stepValue+'px'; if(percentage>=1){ clearInterval(timerId); element.innerHTML=newDate-startTime; } },13); } animate2(document.getElementById('
7、test2'),200,1000); 這樣改良之后,可以看到動(dòng)畫執(zhí)行耗時(shí)最多只會(huì)有10幾ms的誤差。但是問題還沒完全解決,在瀏覽器開發(fā)工具中檢查test2元素可以發(fā)現(xiàn),test2的最終寬度可能不止200px。仔細(xì)檢查animate2函數(shù)的代碼可以發(fā)現(xiàn): 1.percentage的值可能大于1,可以通過Math.min限制最大值解決?! ?.即使保證了percentage的值不大于1,只要endValue或startValue為小數(shù),(endValue-startValue)*percentage的值也可能產(chǎn)生誤差,因?yàn)镴avascript小數(shù)
8、運(yùn)算的精度不夠。其實(shí)我們要保證的只是最終值的準(zhǔn)確性,所以在percentage為1的時(shí)候,直接使用endValue即可。對黨的認(rèn)識也有了