html5中的canvas還記得嗎(2,反覆橫跳的矩形),前端基礎

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第21天,點選檢視活動詳情

前言

上次內容帶小夥伴重溫了下canvas的概念以及注意的地方,這次就開始講js控制畫布,開始畫畫了,重頭戲來了喔。

繪製圖像

canvas元素本身是沒有繪圖能力的。所以畫圖都是在js中完成的。 ```html

``` - 首先通過id獲取canvas的元素

js var myCanvas=document.getElementById("myCanvas"); - 建立 context 物件,getContext("2d")方法是的HTML5內部的,它返回一個物件,裡面有繪製路徑、矩形、圓形、字元以及新增影象的方法。可以理解是我們的畫筆。

js var ctx=myCanvas.getContext("2d");

image.png - 簡單的矩形

js // 填充顏色 ctx.fillStyle="#fcb4b4"; // 引數,x,y座標,寬高 ctx.fillRect(0,0,300,200); 我們為了視覺看的更清晰一點,一般可以給canvas元素設定樣式邊框,這樣我們就知道畫布的大小和位置了 ```css

myCanvas{

border: 1px solid #000;

} ``` 通過新增樣式,我們可以看出畫布是很明顯了。那麼得到效果就是如下了

image.png

其實敲程式碼也沒那麼複雜的,搞清楚想要什麼樣的效果就好了,是不是很簡單。 - 動起來 通過定時器,一段時間後修改矩形的座標 js var x =0,y=0 setInterval(()=>{ ctx.fillRect(x++,y++,300,200); },50) 但是效果不盡如意,因為每次調整座標後沒有清除畫布,所以之前的矩形依然殘留在畫布上 image.png

那麼清除畫布的方法clearRect就該出場了,它也接受四個引數,分別是x,y座標,w,h寬高。這樣效果就好很多了。 js var x =0,y=0 setInterval(()=>{ // 順序別搞反了,先清除,再畫 ctx.clearRect(0,0,500,500); ctx.fillRect(x++,y++,300,200); },50) 像讓它動起來是不難的,難得是我們控制它如何動,所以我們通過幾個變數,比如寬高,速度啥的,來控制不出畫布,總是在畫布內運動。重新修改了下程式碼,canvas的寬高,我們用變數來表示,為的就是後面好動態判斷。 ```js var x =0,y=0,w=300,h=200,xd=2,yd=2; // 引數,x,y座標,寬高 ctx.fillRect(0,0,w,h); setInterval(()=>{ if((x+w)>=500){ xd=-1 }else if(x<0){ xd=Math.abs(xd) } x+=xd if((y+h)>=500){ yd=-1 }else if(y<0){ yd=Math.abs(yd) }

  y+=yd
  // 順序別搞反了,先清除,再畫
  ctx.clearRect(0,0,500,500);
  ctx.fillRect(x,y,w,h);
},50)

``` 我也不知道為啥我的動圖會有這樣的效果,反正正常瀏覽器是沒問題的。

GIF 2022-6-30 下午 12-56-04.gif 通過我們的一步一步的優化,最後的執行效果就很好看了,是不是很像小時候看電視沒訊號時候的畫面,反覆橫跳。是不是挺好玩的

總結

本次內容講到了js控制畫筆,在畫布上畫矩形,再通過簡單的js判斷,就實現了動起來的canvas效果,很簡單,以後再加上覆雜的運算,就能製作更多更好玩的遊戲出來,這次只是簡單瞭解了下js控制畫筆,後續能講的話,還是會完善的。

好啦,本節內容就總結到這裡。我的文章都是學習過程中的總結,希望能夠和小夥伴們共同進步共同學習,如果發現錯誤,也歡迎留言指出,我及時更正。