一、基本概念
1、Canvas 2D的引入
Canvas是HTML5中的一個新元素,它是由W3C提出的標準,最初是由Apple公司提出。Canvas可以提供基於像素的繪圖系統,支持2D圖形,能夠呈現任何複雜度的圖形,它為開發者提供了直接操作像素的能力。
<canvas id="myCanvas" width="300" height="300"></canvas>
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
2、Canvas 2D的核心概念
Canvas 2D的核心概念是:canvas、context、path、stroke和fill。canvas是一個類似畫布的東西,context是繪製上下文,它是一個對象,提供一系列方法進行繪圖;path是用來構造圖形的對象,包括各種直線、曲線和圓弧等;stroke是畫線,fill是填充。
ctx.beginPath(); // 開始路徑
ctx.moveTo(50, 50); // 移動起點
ctx.lineTo(200, 200); // 連接終點
ctx.stroke(); // 畫線
二、圖形繪製
1、繪製直線
Canvas 2D提供了繪製直線的方法,開發者可以使用moveTo方法指定起點,使用lineTo方法連接終點,使用stroke方法畫線。
// 畫一條45度的線
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 150);
ctx.stroke();
2、繪製圓弧
Canvas 2D提供了繪製圓弧的方法,開發者可以使用arc方法指定圓心、半徑、起始角度和結束角度,使用stroke方法畫線,使用fill方法填充。
// 畫一個圓
ctx.beginPath();
ctx.arc(150, 150, 50, 0, Math.PI * 2);
ctx.stroke();
// 畫一個實心圓
ctx.beginPath();
ctx.arc(150, 150, 50, 0, Math.PI * 2);
ctx.fill();
3、繪製矩形
Canvas 2D提供了繪製矩形的方法,開發者可以使用rect方法指定左上角的坐標和矩形的寬度和高度,使用stroke方法畫線,使用fill方法填充。
// 畫一個矩形
ctx.strokeRect(100, 100, 100, 100);
// 畫一個實心矩形
ctx.fillRect(100, 100, 100, 100);
三、路徑繪製
1、繪製路徑
Canvas 2D提供了繪製路徑的方法,開發者可以使用beginPath方法開始一條路徑,使用moveTo方法移動到路徑的起點,使用lineTo方法連接路徑的每一個點,使用closePath方法關閉路徑。
// 畫一個四邊形
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 50);
ctx.lineTo(150, 150);
ctx.lineTo(50, 150);
ctx.closePath();
ctx.stroke();
2、填充樣式
Canvas 2D提供了填充樣式的方法,開發者可以使用fillStyle屬性設置填充顏色,也可以使用gradient方法創建漸變色填充。
// 實心矩形
ctx.fillStyle = 'red';
ctx.fillRect(100, 100, 100, 100);
// 漸變色矩形
var grd = ctx.createLinearGradient(100, 100, 200, 200);
grd.addColorStop(0, 'red');
grd.addColorStop(1, 'blue');
ctx.fillStyle = grd;
ctx.fillRect(100, 100, 100, 100);
四、圖像處理
1、繪製圖像
Canvas 2D提供了繪製圖像的方法,開發者可以使用drawImage方法將圖片或者視頻等媒體文件繪製到canvas上。
// 將一張圖片繪製到canvas上
var img = new Image();
img.onload = function() {
ctx.drawImage(img, 0, 0);
};
img.src = 'image.jpg';
2、圖像處理
Canvas 2D提供了對圖像進行處理的方法,開發者可以使用save方法保存當前狀態,使用translate方法移動坐標系,使用rotate方法旋轉坐標系,使用scale方法縮放坐標系,使用clip方法進行裁剪。
// 圖像處理
ctx.save();
ctx.translate(100, 100);
ctx.rotate(Math.PI / 4);
ctx.scale(2, 2);
ctx.clip();
ctx.drawImage(img, 0, 0);
ctx.restore();
五、文字處理
1、繪製文字
Canvas 2D提供了繪製文字的方法,開發者可以使用fillText方法或者strokeText方法繪製文字。
// 繪製文字
ctx.font = '48px serif';
ctx.fillText('Hello, world!', 10, 50);
2、文字樣式
Canvas 2D提供了文字樣式的方法,開發者可以使用font屬性設置字體大小和字體類型,使用textBaseline屬性設置對齊方式。
// 設置文字樣式
ctx.font = '48px serif';
ctx.textBaseline = 'middle';
ctx.fillText('Hello, world!', 10, 50);
六、動畫處理
1、繪製動畫
Canvas 2D提供了繪製動畫的方法,開發者可以使用requestAnimationFrame方法創建動畫幀。
// 繪製動畫
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height); // 清楚畫布
ctx.fillRect(x, 50, 50, 50); // 繪製矩形
x += 10; // 更新坐標
if (x > canvas.width) {
x = 0;
}
requestAnimationFrame(draw); // 不斷繪製
}
var x = 0;
draw();
2、動畫處理
Canvas 2D提供了對動畫進行處理的方法,開發者可以使用setInterval方法或者setTimeout方法設置動畫幀之間的間隔。
// 設置動畫幀間隔
setInterval(function() {
ctx.clearRect(0, 0, canvas.width, canvas.height); // 清楚畫布
ctx.fillRect(x, 50, 50, 50); // 繪製矩形
x += 10; // 更新坐標
if (x > canvas.width) {
x = 0;
}
}, 100);
七、總結
Canvas 2D是HTML5中非常重要的一部分,它可以用來繪製各種各樣的圖形和動畫,對於Web開發者來說,Canvas 2D的掌握是非常重要的。
原創文章,作者:FULR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136642.html