iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
0
Modern Web

網頁阿尼尛,到底是在幹尛?系列 第 18

第十七章、你好啊鐵人們,接下來就由我鎖鏈 Canvas 對付你!(壹)

  • 分享至 

  • xImage
  •  

前言

「你好啊鐵人們,真沒想到你可以到第十七章來呢,不過就到這裡為止了,接下來由我 鎖鏈的 Canvas 來做你的對手!」

沒...沒想到好不容易撐到了鐵人賽的中場,居然殺出了這麼一個 BOSS...(吐血),難到...我轉職後的第二人生,就到這邊為止了嗎?!

不用擔心,各位鐵人們,還有我在啊!接下來就讓我們好好了解一下 Canvas 這個難纏的敵人吧!

簡介

當工程師小小的美術魂正在燃燒時,除了 SVG 之外,我們還有什麼方法可以在網頁上盡情的揮灑創意揮灑愛呢?相信大家第一直覺就會想到 Canvas 對吧~

由於 Canvas 是由 HTML tag 以及 JavaScript 語法所製作,所以在進入 Canvas 篇章之前,記得要先去了解一下 HTML 及 JavaScript 語法喔~

那麼 Canvas 是什麼呢?他其實就是一個 HTML tag 讓我們可以在網頁上定義一個畫布區域 並由 JavaScript context 物件來即時運算圖形並且繪製。它有點像是 img 元素,不過 Canvas 只有 寬度高度 Canvas 可以控制,若是在 Canvas 上繪製的圖形有點扭曲,請嘗試用 Canvas 的 寬高來設定,而不是使用 CSS 來控製寬高。

在瀏覽器中,有些舊版本的瀏覽器並不支援 Canvas tag,因此 Canvas 有為瀏覽器準備了一些錯誤替代訊息。

<!-- 文字錯誤訊息 -->
<canvas id="stockGraph" width="150" height="150">
  這是錯誤文字錯誤訊息
</canvas>
<!-- 圖片錯誤訊息 -->
<canvas id="clock" width="150" height="150">
  <img src="images/clock.png" width="150" height="150" alt="Error"/>
</canvas>

基礎 Canvas 語法

  • 建立畫布
<canvas id="mydraw"></canvas>
  • 宣告一個變數抓取 Canvas 元素
let canvas = document.getElementById('mydraw')
  • 宣告繪圖環境,在這邊我們是使用 2D 渲染上下文
let ctx = canvas.getContext('2d')
  • 設定畫部寬高
canvas.width= 400
canvas.height= 400

如此一來,我們就有一張基礎畫布可以用囉~

繪製基礎圖形

在 SVG 篇章我們有講解到在電腦繪圖的世界裡,圖形是如何被繪製出來的,以及圖形定位。


還是熟悉的圖片最對味~

了解了圖片定位之後,我們來了解一下 Canavs 的基礎圖形吧!

rectangles 矩形

跟 SVG 圖形不同的是,Canvas 只支援一種基礎圖形 - 矩形。其餘的圖形包含圓形,皆是使用路徑函式來繪圖。

屬性 介紹
fillRect(x, y, w, h) 繪製實心矩形,其值依序為:距離X軸的距離, 距離Y軸的距離, 圖形寬度, 圖形高度
strokeRect(x, y, w, h) 繪製邊框矩形,其值依序為:距離X軸的距離, 距離Y軸的距離, 圖形寬度, 圖形高度
clearRect(x, y, w, h) 清除指定範圍內的內容,使其變成透明,其值依序為:距離X軸的距離, 距離Y軸的距離, 圖形寬度, 圖形高度
ctx.fillRect(25, 25, 100, 100);

paths 路徑繪圖

在 Canvas 中我們繪製基礎的圖形除了矩形外都是需要使用路徑來繪製,下面介紹一下路徑繪製的基礎語法。

屬性 介紹
beginPath() 產生新的 path,類似於設定畫筆的下筆處,之後再使用繪圖指令繪圖
moveTo(x, y) 移動畫筆到指定的 [x,y] 座標點上
lineTo 下一個點的 [x,y] 座標點位置
closePath() 閉合路徑
fill() 填滿路徑內容
stroke() 繪製圖形邊框
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.lineTo(300, 100);
ctx.lineTo(300, 200);
ctx.lineTo(300, 300);
ctx.closePath();
ctx.fill()

Arcs 弧形

若是想繪製圓形類的圖形,我們可以用弧形來繪製。

屬性 介紹
arc(x, y, radius, startAngle, endAngle, anticlockwise) 以[x,y]定位點為中心繪製圓弧,其值依序為:圓心X軸的位置, 圓心Y軸的位置, 弧形半徑,起始角度, 結束角, 逆時針移動方向
ctx.beginPath();
ctx.moveTo(200, 200);
ctx.arc(200, 200, 100, 0, Math.PI, true)
ctx.closePath();
ctx.fill()


那麼今天對於 Canvas 的基礎介紹就到這邊,哼哼哼看來就算是 Canvas 大魔王也沒有什麼嗎!了解了之後就沒有這麼可怕啦!

那麼明天我們會稍微來介紹一下 Canvas 動畫,那麼我們明天見~掰掰!


參考資料


上一篇
第十六章、辣個 SVG 也許會遲到,但永不缺席 。(合)
下一篇
第十八章、你好啊鐵人們,接下來就由我鎖鏈 Canvas 對付你!(貳)
系列文
網頁阿尼尛,到底是在幹尛?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言