# SVG繪圖基礎語法與動畫原理 什麼是Canvs? 簡單來說在html、css沒有辦法製作出的情況下做特效,Canvas有下列的特性: - 可以自由繪圖的元件區域 - 可以控制像素的顏色與繪製 - 高操控度但相對技術門檻也高 - 可以想像是一張動態可改寫的圖片 [有趣的SVG動畫網站](https://musiclab.chromeexperiments.com/Experiments) 在Canvas的單元內要掌握的要點有: 1. 繪製圖形 2. 向量概念 3. 三角函數數學 4. 物件導向開發 ## 1.繪製圖形 繪製Canvas一個是須注意畫布上的座標,並且用點、線、面來繪製圖形。 用點跟點連成線、由線構成面,在依據路徑填色或畫線 ![](https://i.imgur.com/gc1WQ4O.png) Canvas坐標系需要注意的是原點的部分在左上(0,0),角度為逆時針,Y軸向下為正值 ![](https://i.imgur.com/1UiZ3wR.png) ### 基礎圖形 - 填滿矩形:fillRect(x,y,w,h,) - 框線矩形:storkRect(x,y,w,h) - 清除矩形範圍:clearRect(x,y,w,h) ### 路徑繪圖 - 路徑開始與封閉: beginPath/closePath - 在畫每一個圖形之前,都需要重新做設定,在沒有清掉bgginPath以前都可以持續畫路徑 - 移動與畫線:moveTo/lineTo/arc... - miveTo:把畫筆的頭移動到特定的位置(x1,y1) - lineTo:連到第二個位置(x2,y2) - 最後繪製要關閉路徑時,可以呼叫closePath把路徑關起來 - 指定顏色或線條顏色:fillStyle/ lineStyle - 這邊需要特別注意的是,如果沒有重新設定顏色的話,接下來的圖形/線段都會沿用已設定好的驗色 - 最後把路徑填色或描線:fill/stork **一般來說都是先填色再畫線,不然線條會被填色給遮住** ![](https://i.imgur.com/oXlUicO.png) ### 弧形 - arc(x,y,半徑,start Angle, end Angle) - Angle:Math.PI為180deg,若要畫一個圓,結束的角度為Math.PI*2 - 弧形的角度方向為逆時針,若需要劃一個反過來的圓,只需要最後加一個參數為treu `ctx.arc(175, 250, 25, 0, Math.PI, true);` ![](https://i.imgur.com/2WWzVQR.png) ### 文字 - fillText('要繪製的文字',x,y):實心字 - strokeText('要繪製的文字',x,y):空心字 ### 色彩系統 ![](https://i.imgur.com/C3kfLEF.png) [Codepen基礎繪圖練習](https://codepen.io/abbyd0208/pen/XWpEMxO) ## 製作動畫 ### 時間函數: - setInterval(update,time) - requestAnimationFrame(update):讓動畫效能會比較順 - 更新影格:動畫其實是藉由更新畫面所做出的效果 - 使用clearRect或fillRect - 覆蓋上次繪圖的路徑 ### 取得滑鼠位置 - mousemove() - mousedown() - mouseup() - click() 以上會取得相對於canvas畫布的位置,所以會用offsetX與offsetY來取得X或Y座標 圖片出處:[動畫互動網頁特效入門(JS/CANVAS)](https://hahow.in/courses/586fae97a8aae907000ce721/main) ###### tags: `Canvas`