เพื่อวาดกราฟิกบนหน้าเว็บ ใช้องค์ประกอบ <canvas> ของ HTML5 แท็ก <canvas> อนุญาตให้วาดกราฟิกได้ด้วย JavaScript — เส้น, สี่เหลี่ยม, คอนทรัคโครนิค (Bezier curves), วงกลม, รูปทรงต่างๆ และภาพ
ทุก canvas มี 2 แอตทริบิวต์หลักกำหนดขนาด:
width— ความกว้าง (พิกเซล)height— ความสูง (พิกเซล)
ควรกำหนด id เพื่อเข้าถึงได้ง่าย:
<canvas id="newCanvas" width="100" height="100"></canvas>
ขั้นตอนการวาด
- หา
<canvas>element ใน DOM ด้วยgetElementById() - เข้าถึง rendering context ผ่านเมธอด
getContext('2d') - ใช้ฟังก์ชันวาดของ context (ctx) เพื่อวาดรูปทรง
var canvas = document.getElementById("newCanvas");
var ctx = canvas.getContext("2d");
ตัวอย่าง 1: วาดหน้าสมาย (Smiley Face)
<!DOCTYPE HTML>
<html>
<head>
<style>
#test {
width: 100px;
height: 100px;
margin: 0px auto;
background-color: orange;
}
</style>
<script>
function drawShape() {
var canvas = document.getElementById('mycanvas');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
// วาดรูปทรง
ctx.beginPath();
ctx.arc(75, 75, 50, 0, Math.PI * 2, true); // วงกลมนอก (หน้า)
ctx.moveTo(110, 75);
ctx.arc(75, 75, 35, 0, Math.PI, false); // ปาก
ctx.moveTo(65, 65);
ctx.arc(60, 65, 5, 0, Math.PI * 2, true); // ตาซ้าย
ctx.moveTo(95, 65);
ctx.arc(90, 65, 5, 0, Math.PI * 2, true); // ตาขวา
ctx.stroke();
} else {
alert('เบราว์เซอร์ไม่รองรับ Canvas');
}
}
</script>
</head>
<body id="test" onload="drawShape()">
<canvas id="mycanvas"></canvas>
</body>
</html>
ตัวอย่าง 2: วาดโค้งกำลังสอง (Quadratic Curve)
<!DOCTYPE HTML>
<html>
<head>
<style>
#test {
width: 100px;
height: 100px;
margin: 0px auto;
}
</style>
<script type="text/javascript">
function drawShape() {
var canvas = document.getElementById('mycanvas');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(75, 25);
ctx.quadraticCurveTo(25, 25, 25, 62.5);
ctx.quadraticCurveTo(25, 100, 50, 100);
ctx.quadraticCurveTo(50, 120, 30, 125);
ctx.quadraticCurveTo(60, 120, 65, 100);
ctx.quadraticCurveTo(125, 100, 125, 62.5);
ctx.quadraticCurveTo(125, 25, 75, 25);
ctx.stroke();
} else {
alert('เบราว์เซอร์ไม่รองรับ Canvas');
}
}
</script>
</head>
<body id="test" onload="drawShape()">
<canvas id="mycanvas"></canvas>
</body>
</html>
เมธอด Canvas 2D Context สำคัญ
| เมธอด | คำอธิบาย |
|---|---|
beginPath() | เริ่ม path ใหม่ |
moveTo(x, y) | ย้ายปากกาไปจุด (x,y) โดยไม่วาด |
lineTo(x, y) | วาดเส้นตรงไป (x,y) |
arc(x, y, r, start, end, ccw) | วาดโค้งมน/วงกลม |
quadraticCurveTo(cpx, cpy, x, y) | วาดโค้งกำลังสอง (1 control point) |
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) | วาดโค้งเบซิเออร์ (2 control points) |
stroke() | วาด outline ของ path |
fill() | เติมสีภายใน path |
rect(x, y, w, h) | วาดสี่เหลี่ยม |
clearRect(x, y, w, h) | ล้างพื้นที่สี่เหลี่ยม |
หมายเหตุ: Canvas ต้องการ JavaScript เพื่อทำงาน — ไม่มีเนื้อหา fallback ภายในแท็ก canvas (ข้อความภายในจะแสดงเฉพาะเมื่อเบราว์เซอร์ไม่รองรับ canvas)