0Pricing
HTML Academy · درس

إعداد Canvas وسياق 2D

إنشاء عنصر canvas والحصول على سياق العرض ثنائي الأبعاد

إعداد Canvas وسياق 2D درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 -->

الحصول على سياق 2D

احصل على سياق العرض ثنائي الأبعاد للرسم:

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 على شاشات Retina و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 للحصول على عرض واضح على شاشات Retina

الأسئلة الشائعة

هل درس «إعداد Canvas وسياق 2D» مجاني؟

نعم — نص درس «إعداد Canvas وسياق 2D» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.

ماذا ستتعلم في «إعداد Canvas وسياق 2D»؟

إنشاء عنصر canvas والحصول على سياق العرض ثنائي الأبعاد تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟

لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «إعداد Canvas وسياق 2D»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟

نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد Canvas وسياق 2D
  2. رسم المستطيلات والمسارات
  3. النصوص والصور على Canvas
  4. التحريك باستخدام requestAnimationFrame
← العودة إلى HTML Academy