H5最強(qiáng)接口之canvas實(shí)現(xiàn)動態(tài)圖形功能

上個文章中我們分享了如何利用canvas來進(jìn)行圖形繪制,但是繪制的都是靜態(tài)圖形,本周我們就來學(xué)習(xí)如何利用canvas進(jìn)行動態(tài)圖形繪制。
什么是動畫?
我們在繪制動畫之前必須要弄清楚什么是動畫,一個動畫最起碼需要哪些基本條件呢?
我們可以用一個工具展示動畫是什么?
這是利用PPT繪制出的一個動畫效果
根據(jù)以上PPT繪制出的一個動畫效果我們可以看到,快速在幾張PPT頁面進(jìn)行切換時連起來看到的就是一個動畫效果。
這就是動畫實(shí)現(xiàn)的基本要素:
單位時間內(nèi)連續(xù)播放多張圖片。這個單位時間一般以秒為單位,在計(jì)算機(jī)渲染的圖形中要想獲得一個足夠流暢的視頻,每秒鐘內(nèi)的圖片數(shù)量必須要大于等于顯示器的刷新頻率(這個刷新頻率一般為60hz)
每圖片內(nèi)的物體狀態(tài)(大小,形狀,顏色,位置,角度等等)必須要發(fā)生改變
那么我們在canvas中如何實(shí)現(xiàn)這兩個條件呢?
如何在1s內(nèi)繪制60張圖形
我們可以把這話變形一下,就變成每隔1/60s就繪制一張圖形。在JavaScript中要想實(shí)現(xiàn)每隔一段時間做一件事情,我們使用的方法是用定時器setinterval。
什么是定時器?
setinerval(function f(){},t),
定時器內(nèi)部可以傳入兩個參數(shù),一個是函數(shù),一個是時間,這個代碼的意思就是每隔t ms就執(zhí)行一次函數(shù)f。
那么我們就用這個來實(shí)現(xiàn)我們所需要的每隔1/60s繪制一張圖形
setInterval(function(){ canCon.fillStyle="black"; //canCon.fill的意思在這張宣紙上拿起一只畫實(shí)心圖形的筆, //style="black"的意思就是蘸上一個黑色墨 //連起來看的話就是拿起一只畫實(shí)心圖形的筆并粘上有黑色的墨水 canCon.arc(233,233,66,0,Math.PI*2); //在宣紙上構(gòu)思畫一個圓(圓心的X位置,Y位置,圓的半徑,從什么位置開始畫圓,畫到哪里結(jié)束); canCon.fill();//下筆作畫 },1000/60)
最終效果
但是現(xiàn)在還沒有一個動畫效果,因?yàn)?s內(nèi)繪制的60張圖形都是一模一樣的,所以接下來就要在每一張圖形繪制的時候改變元素的狀態(tài)。
順便給大家推薦一個裙,它的前面是 537,中間是631,最后就是 707。想要學(xué)習(xí)前端的小伙伴可以加入我們一起學(xué)習(xí),互相幫助。群里每天晚上都有大神免費(fèi)直播上課,如果不是想學(xué)習(xí)的小伙伴就不要加啦。
(537-631-707)
如何改變元素的狀態(tài)?
一個圓的位置是由圓心的坐標(biāo)決定的,那么我們在每次繪制canvas的時候就改變一次元素的位置即可
vary=100;//給一個初始的圓心位置,接下來每次繪制的時候圓心的y位置都往下移動一個距離 setInterval(function(){ canCon.fillStyle="black"; //canCon.fill的意思在這張宣紙上拿起一只畫實(shí)心圖形的筆, //style="black"的意思就是蘸上一個黑色墨 //連起來看的話就是拿起一只畫實(shí)心圖形的筆并粘上有黑色的墨水 canCon.arc(233,y++,66,0,Math.PI*2); //在宣紙上構(gòu)思畫一個圓(圓心的X位置,Y位置,圓的半徑,從什么位置開始畫圓,畫到哪里結(jié)束); canCon.fill();//下筆作畫 },1000/60)
此時我們看到的不是一個運(yùn)動的圓,更像是一個不斷延伸的進(jìn)度條。原因其實(shí)很簡單,咱們在每次繪制一個新的圖形的時候沒有把原來的圖形給擦出掉了,這樣的畫面就是n多圖形疊加在一起的結(jié)果了。所以我們每次在繪制新的圖形的時候就要把原來的給擦除掉,那么如何做到呢?
vary=100;//給一個初始的圓心位置,接下來每次繪制的時候圓心的y位置都往下移動一個距離 setInterval(function(){ canCon.clearRect(0,0,500,500);//擦除一個矩形區(qū)域 矩形的左上角坐標(biāo)和矩形的寬高 canCon.fillStyle="black"; //canCon.fill的意思在這張宣紙上拿起一只畫實(shí)心圖形的筆, //style="black"的意思就是蘸上一個黑色墨 //連起來看的話就是拿起一只畫實(shí)心圖形的筆并粘上有黑色的墨水 canCon.arc(233,y++,66,0,Math.PI*2); //在宣紙上構(gòu)思畫一個圓(圓心的X位置,Y位置,圓的半徑,從什么位置開始畫圓,畫到哪里結(jié)束); canCon.fill();//下筆作畫 },1000/60)
但此時還是沒有效果,那么到底是什么情況呢?我們可以回想一下我們小時候畫畫的場景,我們在擦除畫紙上某一區(qū)域的時候是不是需要首先把畫筆抬起來,這樣的話我們才能用橡皮擦擦掉紙上的某些區(qū)域,所以我們在擦除canvas的某個區(qū)域之前先要把筆給抬起來才行。
vary=100;//給一個初始的圓心位置,接下來每次繪制的時候圓心的y位置都往下移動一個距離 setInterval(function(){ canCon.beginPath();//把筆抬起來 canCon.clearRect(0,0,500,500);//擦除一個矩形區(qū)域 矩形的左上角坐標(biāo)和矩形的寬高 canCon.fillStyle="black"; //canCon.fill的意思在這張宣紙上拿起一只畫實(shí)心圖形的筆, //style="black"的意思就是蘸上一個黑色墨 //連起來看的話就是拿起一只畫實(shí)心圖形的筆并粘上有黑色的墨水 canCon.arc(233,y++,66,0,Math.PI*2); //在宣紙上構(gòu)思畫一個圓(圓心的X位置,Y位置,圓的半徑,從什么位置開始畫圓,畫到哪里結(jié)束); canCon.fill();//下筆作畫 },1000/60)
這樣我們就能得到一個運(yùn)動的圓了
總結(jié)
以上所述是小編給大家介紹的H5最強(qiáng)接口之canvas實(shí)現(xiàn)動態(tài)圖形功能 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
調(diào)用HTML5的Canvas API繪制圖形的快速入門指南
這篇文章主要介紹了調(diào)用HTML5的Canvas API繪制圖形的快速入門指南,Canvas繪圖是HTML5入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-06-17- 這篇文章主要介紹了HTML5 Canvas控制圖形矩陣變換的方法,重點(diǎn)講解了利用transform()方法來控制CSS像素坐標(biāo)的用法,非常給力,需要的朋友可以參考下2016-03-24
實(shí)例講解利用HTML5 Canvas API操作圖形旋轉(zhuǎn)的方法
這篇文章主要介紹了利用HTML5 Canvas API操作圖形旋轉(zhuǎn)的方法的實(shí)例講解,包括圖片自身的中心坐標(biāo)位置旋轉(zhuǎn)以及圍繞某個點(diǎn)的旋轉(zhuǎn)例子,需要的朋友可以參考下2016-03-22HTML5 Canvas 繪圖——使用 Canvas 繪制圖形圖文教程 使用html5 canva
本文通過八種示例給大家分享了html5 canvas繪圖,需要的朋友一起來學(xué)習(xí)吧2015-08-31html5的畫布canvas——畫出弧線、旋轉(zhuǎn)的圖形實(shí)例代碼+效果圖
在做旋轉(zhuǎn)操作之前一定要理解一句話:旋轉(zhuǎn)的是畫布的坐標(biāo)系而不是圖形本身,首先認(rèn)識一下畫圓的坐標(biāo):中心、起始角、結(jié)束角;接下來的就很簡單了2013-06-09- 在html5中我覺得最重要的就是引入了Canvas,使得我們可以在web中繪制各種圖形,而Canvas為基于像素的繪圖。Canvas是一個相當(dāng)于畫板的html節(jié)點(diǎn),我們必須以js操作繪圖2012-12-26