0Pricing
HTML Academy · บทเรียน

การตั้งค่า Canvas และบริบท 2D

สร้างองค์ประกอบ canvas และรับบริบทการแสดงผล 2D

การตั้งค่า Canvas และบริบท 2D เป็นบทเรียน HTML Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน HTML Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน

องค์ประกอบ canvas

องค์ประกอบ <canvas> คือพื้นผิวบิตแมปสำหรับวาดภาพในเบราว์เซอร์:

<canvas id="myCanvas" width="800" height="400">
  <!-- Fallback for browsers without canvas support -->
  <p>Your browser does not support HTML5 Canvas.</p>
</canvas>

แอตทริบิวต์ความกว้างและความสูง

ควรกำหนดขนาด canvas ผ่านแอตทริบิวต์ HTML ไม่ใช่ CSS เสมอ:

<!-- CORRECT: set intrinsic size via attributes -->
<canvas width="800" height="400"></canvas>

<!-- WRONG: CSS changes display size but not canvas resolution -->
<canvas style="width: 800px; height: 400px;"></canvas>
<!-- This stretches a default 300x150 canvas to 800x400
     Result: blurry graphics -->

การรับบริบทแบบ 2 มิติ

รับบริบทการแสดงผลแบบ 2 มิติเพื่อวาดภาพ:

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
// ctx is a CanvasRenderingContext2D object
// All drawing operations are methods on ctx

// Check browser support:
if (!canvas.getContext) {
  console.error('Canvas not supported');
}

ระบบพิกัด

ระบบพิกัดของ canvas เริ่มต้นที่มุมซ้ายบน:

// (0, 0) = top-left corner
// (width, 0) = top-right
// (0, height) = bottom-left
// (width, height) = bottom-right

// For a 800x400 canvas:
// x increases left → right (0 to 800)
// y increases top → bottom (0 to 400)
//
// Example: draw at center:
ctx.fillRect(400, 200, 10, 10);  // centered dot

สถานะของ canvas

canvas มีสถานะการวาดที่สามารถบันทึกและกู้คืนได้:

ctx.save();       // push current state onto a stack

// Change state:
ctx.fillStyle = 'red';
ctx.globalAlpha = 0.5;

// Draw with modified state...
ctx.fillRect(100, 100, 200, 200);

ctx.restore();    // pop state: back to pre-save settings

การล้าง canvas

ล้าง canvas ทั้งหมดก่อนวาดใหม่ สำหรับภาพเคลื่อนไหว:

// Clear entire canvas:
ctx.clearRect(0, 0, canvas.width, canvas.height);

// Or with a background color:
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, canvas.width, canvas.height);

fillStyle และ strokeStyle

กำหนดสีสำหรับการเติมพื้นที่และการวาดเส้น:

ctx.fillStyle = 'blue';                    // CSS color name
ctx.fillStyle = '#ff6600';                 // hex color
ctx.fillStyle = 'rgb(255, 100, 0)';       // rgb
ctx.fillStyle = 'rgba(255, 100, 0, 0.5)'; // rgba with alpha
ctx.fillStyle = gradient;                  // gradient object
ctx.fillStyle = pattern;                   // pattern object

ctx.strokeStyle = '#333333';               // border color

lineWidth และคุณสมบัติสไตล์อื่น ๆ

คุณสมบัติของสไตล์เส้นและการวาดเส้น:

ctx.lineWidth = 4;           // stroke width in pixels
ctx.lineCap = 'round';       // butt | round | square
ctx.lineJoin = 'round';      // miter | round | bevel
ctx.setLineDash([5, 3]);     // dashed line: 5px dash, 3px gap
ctx.globalAlpha = 0.8;       // transparency for all drawing
ctx.globalCompositeOperation = 'multiply'; // blend modes

canvas HiDPI แบบปรับตามหน้าจอ

แก้ปัญหา canvas แสดงภาพไม่คมชัดบนจอเรตินา/HiDPI:

function setupHiDPI(canvas, width, height) {
  const dpr = window.devicePixelRatio || 1;
  canvas.width = width * dpr;
  canvas.height = height * dpr;
  canvas.style.width = width + 'px';
  canvas.style.height = height + 'px';
  const ctx = canvas.getContext('2d');
  ctx.scale(dpr, dpr);  // scale all drawing
  return ctx;
}

Canvas เทียบกับ SVG

ควรเลือก Canvas หรือ SVG เมื่อใด:

  • Canvas — บิตแมป ประมวลผลทีละพิกเซล เหมาะสำหรับเกม การแสดงข้อมูลขนาดใหญ่ และการประมวลผลภาพ
  • SVG — เวกเตอร์ ปรับขนาดได้ เหมาะสำหรับโลโก้ ไอคอน แผนภูมิที่มีองค์ประกอบโต้ตอบได้ และการเข้าถึง

การเข้าถึง canvas

canvas ไม่มีการรองรับการเข้าถึงในตัว — ต้องเพิ่มด้วยตนเอง:

<canvas
  id="chart"
  width="800"
  height="400"
  aria-label="Bar chart showing Q1-Q4 revenue growth"
  role="img"
>
  <!-- Fallback for non-canvas browsers and screen readers -->
  <table><!-- accessible data table --></table>
</canvas>

ตรวจสอบอย่างรวดเร็ว

วิธีที่ถูกต้องในการรับบริบทการวาดของ canvas คืออะไร

ทบทวน: การตั้งค่า Canvas

สิ่งสำคัญในการตั้งค่า Canvas:

  • กำหนดความกว้างและความสูงผ่านแอตทริบิวต์ HTML ไม่ใช่ CSS
  • canvas.getContext('2d') — รับบริบทการวาด
  • จุดกำเนิดอยู่มุมซ้ายบน (0,0); x→ขวา, y→ลง
  • ctx.save() / ctx.restore() — จัดการสถานะด้วยโครงสร้างแบบสแตก
  • ปรับมาตราส่วนด้วย devicePixelRatio เพื่อการแสดงผลบนจอเรตินาที่คมชัด

คำถามที่พบบ่อย

บทเรียน “การตั้งค่า Canvas และบริบท 2D” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การตั้งค่า Canvas และบริบท 2D” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส HTML Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การตั้งค่า Canvas และบริบท 2D”

สร้างองค์ประกอบ canvas และรับบริบทการแสดงผล 2D คุณปฏิบัติ HTML Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน HTML Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน HTML Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การตั้งค่า Canvas และบริบท 2D” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน HTML Academy นี้ได้ไหม

ได้ บทเรียน HTML Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่า Canvas และบริบท 2D
  2. การวาดสี่เหลี่ยมและเส้นพาธ
  3. ข้อความและรูปภาพบน Canvas
  4. ภาพเคลื่อนไหวด้วย requestAnimationFrame
← กลับไปที่ HTML Academy