إعداد 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 colorlineWidth وخصائص الأنماط الأخرى
خصائص أنماط الحدود والخطوط:
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 modescanvas متجاوب مع 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد Canvas وسياق 2D
- رسم المستطيلات والمسارات
- النصوص والصور على Canvas
- التحريك باستخدام requestAnimationFrame