方格精選

Canvas動畫入門(1) 開始畫圖吧!

更新於 發佈於 閱讀時間約 9 分鐘

首先得推薦大家一個免費的家教老師:W3school,今天只要看到有不懂的字詞,都可以先上去搜尋,以今天的主題Canvas為例,進到網站內,透過搜尋功能直接輸入:Canvas,就會看到下面這個畫面拉! 因為Canvas是HTML的元素,所以會出現在HTML分類後面。

搜尋Canvas

搜尋Canvas

準備好一個專門的資料夾,開始學習Canvas吧!

  • 首先,準備好一個Html檔案,像是這樣:

其中先重置Css,把Html和Body的marginborderpadding設為0,然後在Body裡面創建一個Canvas元素,並試著在Style裡面為該元素加上背景

打開這個網頁,就會看到,左上角有一塊灰色的區塊拉,那就是我們剛剛創建的Canvas元素,灰色則是我設定的#E1DCD9,此時大家應該會好奇,是怎麼決定Canvas有多大的呢? 那就先按下F12,使用上排工具列的第一個圖案,或是鍵盤Shift+Ctrl+C,並把滑鼠移到灰色的Canvas上面,下方便會顯示其相關資訊,大小是300 x 150 px,也是他預設的大小。

開發者工具檢視

開發者工具檢視

如果想要讓他全螢幕,該如何做呢? 這時候就要出動Javascript了! 這邊有幾個步驟要分開講解:

  1. document.getElementById
    這是HTML DOM的方法之一,允許你取得Html上的元素,並在Javascript中修改元素的屬性(寬、高、字體大小等等)
  2. getContext("2d")
    取得Canvas元素後,以此2D物件來進行繪圖(只是一直都沒有準備開發3D的跡象就是了xd)
  3. Canvas Reference
    這是Canvas內建的語法,允許你以2D的方式繪圖,擁有許多不同的繪圖方式,今天會從最簡單的矩形-Rectangles來嘗試

有了大概的認識後,再來看這段程式碼應該就不難了

  var canvas = document.getElementById("mycanvas");
  var context = canvas.getContext("2d");

其中canvas和context都是變數名稱,可自行修改,第一行先透過ID取得Canvas元素,一開始筆者將id取作mycanvas,所以這邊要用一樣的id,記得大小寫必須相同,也有人喜歡更簡短的程式碼,例如今天id="Cava",可以寫成:

  var c = document.getElementById("Cava");
  var ctx = c.getContext("2d");

接著就可以修改Canvas的寬高了,那麼如何知道畫面的寬高呢? 就要用到Web API中,在一開始打開瀏覽器時,就存在的物件window,該物件有非常多的屬性,其中就有我們想要的寬高。

Read only 指的是該屬性為「唯獨」,不允許修改

Read only 指的是該屬性為「唯獨」,不允許修改

於是我們可以很簡單的覆寫Canvas的寬高屬性:

到這邊已經完成一半了,加油!堅持下去!請原諒我寫得如此詳盡,其實這裡有很多重點,如果隨意帶過,很容易成為新手的罩門,所以現在多花時間,其實是幫大家省時間!希望能讓大家少走彎路。

那麼,該如何開始畫圖呢?程式發開者在設計Canvas API時,就以一個很直覺的方式來設計,如同我們在現實生活中畫畫一樣,動作依序為:提筆、著色、提筆、著色......依此類推。分別為

  context.beginPath(); //提筆
  context.fill(); //著色 (填滿)
  context.beginPath(); //提筆
  context.stroke(); //著色 (外框)
  //......

在現實中畫畫,每畫完一個部分,就會把筆拿起來,同樣地,在程式中,每次畫新的圖之前,都必須把筆拿起來,才不會對在畫布上面亂圖。

但是,光是這樣寫,是無法畫出圖形的,必須要提供「路徑」和「顏色」兩個部分,才能進行著色,顏色比較好懂,就像各大繪圖軟體一樣,會有「填滿顏色」和「外框顏色」,至於路徑,就在剛剛提到的Canvas Reference中,有各式各樣的函式可以做使用。

Rectangles -今天會用到的四種矩形工具/函式

  1. rect()     -路徑
  2. fillRect()    -路徑+填滿
  3. strokeRect()  -路徑+外框
  4. clearRect()   -清除路徑(橡皮擦)

rect(x, y, w, h) 中有四個參數,分別表示矩形的x y座標,和w h寬高,寫入下列程式碼並再次開啟網頁,就可以看到畫面中出現了一個寬高皆為100px的矩形坐落在座標(100, 100)處,也可以注意到,這邊跟國高中學習的直角座標不同,沿用了網頁排版從左上角開始的概念,因此原點坐落於左上角,y座標剛好反過來。

context.beginPath();
context.rect(100, 100, 100, 100);
context.fillStyle = "#A67F78";
   context.fill(); //填滿

但是如果每次畫一個圖形,都要這麼多行程式碼,還是有點麻煩是吧!除了自己設置一個function以外,Canvas API也有貼心的準備好更方便的方法,將以上四行程式碼,簡化成兩行:

  context.fillStyle = "#32435F";
  context.fillRect(150,300,100,100);

其中fillStyle如同繪圖軟體一樣,設定一次顏色,再次修改前,都不會跑掉,因此顏色只要設定過一次,若沒有修改的需求,無須重複寫兩次。

beginPath()只會清除路徑,不會影響到顏色和其他屬性

同樣道理,也有strokeRect()方法可以做使用:

  context.strokeStyle = "#32435F";
  context.strokeRect(200,400,100,100);

三段程式碼合起來就會得到:

raw-image

最後一個clearRect()是非常有趣的函式,未來會用這個教大家弄些好玩的東西,如果平常有在繪圖軟體中,使用過「剪裁遮色片」功能的話,應該就會明白我在說什麼。

如同字面上意思呢,它可以把矩形範圍內的像素點全部清除,如同橡皮擦一樣,擦掉,因為顏色被擦掉了,就會露出後面的背景,假如我們加入這段程式碼:

var W = window.innerWidth;
var H = window.innerHeight;
context.clearRect(0, 0, W, H);

就會發現,只剩下背景了,方塊全部被擦掉了!

innerWidth指的是整個網頁的寬度,同理innerHeight指的是高度,如果忘了沒關係,再回去前面複習一下,因此上面的動作,等於清空整個畫布。

那麼今天的教學就先......嘿嘿~還沒結束,還沒派作業呢,相信細心的大家有發現,現在我們已經學會了畫圖,又學會了清空畫布,畫畫+清空=重繪,那麼我們只要不斷地重繪,是不是就能輕鬆做出動畫了呢? 這邊提供大家一個神器:

  • window.requestAnimationFrame
    簡單來說,如果你的電腦顯示禎數有60次,那麼,每次要刷新畫面之前,都會透過這個函式先行呼叫,如果把上述所有繪圖的程式碼,包成一個函式,就可以讓使用者每一禎都看到畫面的改變,避免因重繪的次數過少而閃爍,或過多而浪費效能。

再加上relativeX和relativeY,在每次刷新時改變,就可以作出動畫效果,但是 ,如果只是像範例這樣,方塊們只會一直往右走,並且消失在畫面外,有沒有辦法設計得更好呢?

那麼,實作時間來拉!以上面這份html文檔為基礎,去設計修改relativeX和relativeY,試著做出一個循環動畫,讓方塊們沿著固定的軌跡來回運行,來試著實現類似以下的效果吧!






留言
avatar-img
留言分享你的想法!
avatar-img
Jerry The Potato的沙龍
3會員
2內容數
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
本文由好好玩台灣授權提供,原文出處在此 👉點我下載 Canva Canva教學 事前準備 範本選擇 文字設定 圖片設定 事前準備 1、準備草稿文字、圖片素材 2、設定文案的表現定位 範本選擇 1、以顏色來篩選Canva模板 2、以語言來篩選Canva模板 3、以關鍵字來篩選Canva模板
Thumbnail
本文由好好玩台灣授權提供,原文出處在此 👉點我下載 Canva Canva教學 事前準備 範本選擇 文字設定 圖片設定 事前準備 1、準備草稿文字、圖片素材 2、設定文案的表現定位 範本選擇 1、以顏色來篩選Canva模板 2、以語言來篩選Canva模板 3、以關鍵字來篩選Canva模板
Thumbnail
基本上這個網站目前不需註冊付費也能使用一些基本的功能,進入網站後先點CREATE NOW。
Thumbnail
基本上這個網站目前不需註冊付費也能使用一些基本的功能,進入網站後先點CREATE NOW。
Thumbnail
這次來點更實用的,動態橫幅(Banner)的製作。
Thumbnail
這次來點更實用的,動態橫幅(Banner)的製作。
Thumbnail
在初學網頁排版的時候,文字、段落、列表的排版可以說是比較好上手的,只要稍微透過margin、padding、border及文字顏色上調整,就可以輕易獲得一段美美的文字。 然而要去調整圖片的大小及其他相關效果,就不是那麼容易的一件事了,往往在開發時,都會出現圖片效果不如自己預期的狀況。
Thumbnail
在初學網頁排版的時候,文字、段落、列表的排版可以說是比較好上手的,只要稍微透過margin、padding、border及文字顏色上調整,就可以輕易獲得一段美美的文字。 然而要去調整圖片的大小及其他相關效果,就不是那麼容易的一件事了,往往在開發時,都會出現圖片效果不如自己預期的狀況。
Thumbnail
首先推薦大家一個免費的家教老師:W3school,只要有不懂的字詞,都可以先上去搜尋,以今天的主題Canvas為例,進到網站內,透過搜尋功能直接輸入:Canvas,就會看到下面這個畫面拉! 因為Canvas是HTML的元素,所以會出現在HTML分類後面。
Thumbnail
首先推薦大家一個免費的家教老師:W3school,只要有不懂的字詞,都可以先上去搜尋,以今天的主題Canvas為例,進到網站內,透過搜尋功能直接輸入:Canvas,就會看到下面這個畫面拉! 因為Canvas是HTML的元素,所以會出現在HTML分類後面。
Thumbnail
STEP1. 點取已經建立外框的文字,執行『效果 > 3D > 突出與斜角』,設定『突出深度:40 pt』,按下確定。點取建立的3D突出與斜角,執行『物件 > 擴充外觀』,將3D突出與斜角效果實體化。 STEP2. 使用魔術棒工具,點取文字正面部分,加上漸層填色,線性淺橘色至橘色。 使用漸層工
Thumbnail
STEP1. 點取已經建立外框的文字,執行『效果 > 3D > 突出與斜角』,設定『突出深度:40 pt』,按下確定。點取建立的3D突出與斜角,執行『物件 > 擴充外觀』,將3D突出與斜角效果實體化。 STEP2. 使用魔術棒工具,點取文字正面部分,加上漸層填色,線性淺橘色至橘色。 使用漸層工
Thumbnail
在Animate CC 是以HTML5+Canvas的格式發佈成網頁檔動畫與互動控制時,其中互動控制是以JavaScript架構來達成。Canvas 是 HTML5 的新元素,其中提供的 API 可讓您動態產生並顯示圖形、圖表、影像和動畫。有了適用於 HTML5 的 Canvas API,就可以透過
Thumbnail
在Animate CC 是以HTML5+Canvas的格式發佈成網頁檔動畫與互動控制時,其中互動控制是以JavaScript架構來達成。Canvas 是 HTML5 的新元素,其中提供的 API 可讓您動態產生並顯示圖形、圖表、影像和動畫。有了適用於 HTML5 的 Canvas API,就可以透過
Thumbnail
1.設定環境 第一次開啟Animate cc新版本後,預設畫面為深色配色,對於深色介面,可以執行【編輯 > 偏好設定】,設定使用者介面。 2.開啟網頁動畫新檔 開新檔案請由開始畫面上選取【網頁】分類,所製作出來的動畫格式才是HTML5 Canvas+javascript的網頁格式,也可以執行[ 檔
Thumbnail
1.設定環境 第一次開啟Animate cc新版本後,預設畫面為深色配色,對於深色介面,可以執行【編輯 > 偏好設定】,設定使用者介面。 2.開啟網頁動畫新檔 開新檔案請由開始畫面上選取【網頁】分類,所製作出來的動畫格式才是HTML5 Canvas+javascript的網頁格式,也可以執行[ 檔
Thumbnail
這次我們要說到遊戲經常使用到的圖片指令系列。在不使用插件的情況下也可以使用來做對話框背景或是立繪顯示。
Thumbnail
這次我們要說到遊戲經常使用到的圖片指令系列。在不使用插件的情況下也可以使用來做對話框背景或是立繪顯示。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News