Uncategorized

64- مرجع HTML Canvas

يُعرّف عنصر <canvas> منطقة رسم نقطية في صفحة HTML. تسمح واجهة برمجة تطبيقات Canvas لـ JavaScript برسم رسومات على اللوحة. يمكن لـ Canvas API رسم الأشكال والخطوط والمنحنيات والمربعات والنصوص والصور بألوان وتدوير وشفافية ومعالجات بكسل أخرى.

يمكنك إضافة عنصر قماش في أي مكان في صفحة HTML باستخدام العلامة <canvas>:

مثال

<canvas id="myCanvas" width="300" height="150"></canvas>

يمكنك الوصول إلى عنصر <canvas> باستخدام طريقة HTML DOM getElementById().

للرسم على اللوحة، تحتاج إلى إنشاء كائن سياق ثنائي الأبعاد:

const myCanvas = document.getElementById("myCanvas");
const ctx = myCanvas.getContext("2d");

ملحوظة

  • لا يحتوي عنصر HTML <canvas> نفسه على قدرات الرسم. يجب عليك استخدام JavaScript لرسم أي رسومات.
  • تقوم طريقة getContext() بإرجاع كائن يحتوي على أدوات (طرق) للرسم.

الرسم على اللوحة

بعد إنشاء سياق ثنائي الأبعاد، يمكنك الرسم على اللوحة.

ترسم طريقة fillRect() مستطيلًا أسودًا بزاوية علوية يسارية عند الموضع 20,20. يبلغ عرض المستطيل 150 بكسلًا وارتفاعه 100 بكسلًا.

مثال

const myCanvas = document.getElementById("myCanvas");
const ctx = myCanvas.getContext("2d");

ctx.fillRect(20, 20, 150, 100);

استخدام الألوان

تحدد خاصية fillStyle لون تعبئة كائن الرسم:

مثال

const myCanvas = document.getElementById("myCanvas");
const ctx = myCanvas.getContext("2d");

ctx.fillStyle = "red";
ctx.fillRect(20, 20, 150, 100);

يمكنك أيضًا إنشاء عنصر <canvas> جديد باستخدام طريقة document.createElement()، وإضافة العنصر إلى صفحة HTML موجودة:

مثال

const myCanvas = document.createElement("canvas");
document.body.appendChild(myCanvas);
const ctx = myCanvas.getContext("2d");

ctx.fillStyle = "red";
ctx.fillRect(20, 20, 150, 100);

في هذه الأمثلة، سيتم رسم مستطيل أحمر بدلاً من الأسود. يمكنك تجربة قيم ألوان مختلفة مثل “blue” أو “green” أو “yellow” أو حتى رموز Hex مثل “#FF0000” للأحمر.


المسارات

الطريقة الشائعة للرسم على اللوحة هي:

  1. بدء مسار – beginPath()
  2. الانتقال إلى نقطة – moveTo()
  3. الرسم داخل المسار – lineTo()
  4. رسم المسار – stroke()

مثال

const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.beginPath();
ctx.moveTo(20, 20);
ctx.lineTo(20, 100);
ctx.lineTo(70, 100);
ctx.stroke();

هذا المثال سيرسم شكلًا مثلثًا بسيطًا على اللوحة. يمكنك تجربة إضافة المزيد من النقاط باستخدام lineTo() لإنشاء أشكال أكثر تعقيدًا.

مرجع كامل لـ Canvas API

يغطي هذا المرجع جميع خصائص وأساليب كائن getContext("2d")، المستخدم لرسم النصوص والخطوط والمربعات والدوائر والصور والمزيد على اللوحة.


طرق الرسم

توجد 3 طرق فقط للرسم مباشرة على اللوحة:

الطريقةالوصف
fillRect()يرسم مستطيلاً “مملوءًا”
strokeRect()يرسم مستطيلاً (بدون تعبئة)
clearRect()يمسح وحدات بكسل محددة داخل مستطيل

طرق الرسم الأخرى، مثل رسم الخطوط والمنحنيات والدوائر، تعتمد على إنشاء المسارات ورسم الخطوط باستخدام طرق مثل beginPath() و moveTo() و lineTo() و arc() و stroke(). يمكن استخدام هذه الطرق لإنشاء أشكال أكثر تعقيدًا على اللوحة.


طرق المسارات

الطريقةالوصف
beginPath()يبدأ مسارًا جديدًا أو يعيد تعيين المسار الحالي
closePath()يضيف خطًا إلى المسار من النقطة الحالية إلى البداية
isPointInPath()تُرجع قيمة true إذا كانت النقطة المحددة موجودة في المسار الحالي
moveTo()ينقل المسار إلى نقطة في اللوحة (بدون رسم)
lineTo()يضيف خطًا إلى المسار
fill()يملأ المسار الحالي
rect()يضيف مستطيلاً إلى المسار
stroke()يرسم المسار الحالي

الدوائر والمنحنيات

الطريقةالوصف
bezierCurveTo()يضيف منحنى Bézier مكعب إلى المسار
arc()يضيف قوسًا/منحنى (دائرة أو أجزاء من دائرة) إلى المسار
arcTo()يضيف قوسًا/منحنى بين مماسين إلى المسار
quadraticCurveTo()يضيف منحنى Bézier من الدرجة الثانية إلى المسار

النص

الطريقة/الخاصيةالوصف
directionتعين أو تُرجع الاتجاه المستخدم لرسم النص
fillText()يرسم نصًا “مملوءًا” على اللوحة
fontتعين أو تُرجع خصائص الخط لمحتوى النص
measureText()تُرجع كائنًا يحتوي على عرض النص المحدد
strokeText()يرسم نصًا على اللوحة
textAlignتعين أو تُرجع المحاذاة لمحتوى النص
textBaselineتعين أو تُرجع خط الأساس للنص المستخدم عند رسم النص

الألوان والأنماط والظلال

الطريقة/الخاصيةالوصف
addColorStop()يحدد الألوان ومواقف التوقف في كائن التدرج اللوني
createLinearGradient()ينشئ تدرجًا خطيًا (لاستخدامه في محتوى اللوحة)
createPattern()يكرر عنصرًا محددًا في الاتجاه المحدد
createRadialGradient()ينشئ تدرجًا شعاعيًا/دائريًا (لاستخدامه في محتوى اللوحة)
fillStyleيعين أو يُرجع اللون أو التدرج اللوني أو النمط المستخدم لملء الرسم
lineCapيعين أو يُرجع نمط نهايات الخطوط
lineJoinيعين أو يُرجع نوع الزاوية التي تم إنشاؤها، عندما يلتقي خطان
lineWidthيعين أو يُرجع عرض الخط الحالي
miterLimitيعين أو يُرجع الحد الأقصى لطول ميتري
shadowBlurيعين أو يُرجع مستوى الضبابية للظلال
shadowColorيعين أو يُرجع اللون المراد استخدامه للظلال
shadowOffsetXيعين أو يُرجع المسافة الأفقية للظل من الشكل
shadowOffsetYيعين أو يُرجع المسافة الرأسية للظل من الشكل
strokeStyleيعين أو يُرجع اللون أو التدرج اللوني أو النمط المستخدم للخطوط

التحويلات

الطريقةالوصف
scale()تكبير أو تصغير الرسم الحالي
rotate()تدوير الرسم الحالي
translate()إعادة تعيين موضع (0،0) على اللوحة
transform()استبدال مصفوفة التحويل الحالية للرسم
setTransform()إعادة تعيين التحويل الحالي إلى مصفوفة الهوية ثم تشغيل transform()

رسم الصور

الطريقةالوصف
drawImage()يرسم صورة أو لوحة أو مقطع فيديو على اللوحة

كائن ImageData والتلاعب بالبكسل

الطريقة/الخاصيةالوصف
createImageData()إنشاء كائن ImageData فارغ جديد
getImageData()يُرجع كائن ImageData ينسخ بيانات البكسل للمستطيل المحدد على اللوحة
ImageData.dataيُرجع كائنًا يحتوي على بيانات الصورة لكائن ImageData محدد
ImageData.heightيُرجع ارتفاع كائن ImageData
ImageData.widthيُرجع عرض كائن ImageData
putImageData()يضع بيانات الصورة (من كائن ImageData محدد) مرة أخرى على اللوحة

يسمح لك كائن ImageData بالتلاعب ببيانات البكسل الفردية للصورة على اللوحة. يمكنك استخدام getImageData() للحصول على بيانات البكسل، واستخدام putImageData() لوضعها مرة أخرى على اللوحة بعد إجراء التعديلات.


التركيب

الخاصيةالوصف
globalAlphaتعين أو تُرجع قيمة ألفا أو الشفافية الحالية للرسم. تتراوح القيمة من 0.0 (شفاف بالكامل) إلى 1.0 (معتم بالكامل). يؤثر هذا على جميع عمليات الرسم اللاحقة، بما في ذلك ملء الأشكال ورسم الخطوط والصور.
globalCompositeOperationتعين أو تُرجع كيفية رسم صورة جديدة على صورة موجودة. يحدد هذا كيفية دمج وحدات البكسل الجديدة مع وحدات البكسل الموجودة على اللوحة. القيم المحتملة هي:<br>- source-over (افتراضي): يتم رسم الصورة الجديدة فوق الصورة الموجودة، مع دمج الشفافية.<br>- lighter: يتم دمج وحدات البكسل الأخف من كل صورة.<br>- darker: يتم دمج وحدات البكسل الداكنة من كل صورة.<br>- xor: يتم رسم الصورة الجديدة باستخدام عملية XOR مع الصورة الموجودة.<br>- والعديد من الخيارات الأخرى.

طرق أخرى

الطريقةالوصف
clip()يقص منطقة من أي شكل وحجم من اللوحة الأصلية
save()يحفظ حالة سياق الرسم الحالي وجميع سماته
restore()يعيد الحالة والسمات المحفوظة مسبقًا
createEvent()ينشئ حدثًا جديدًا (لم يتم دعمه بشكل كامل في جميع المتصفحات)
getContext()يُرجع سياق الرسم ثنائي الأبعاد للوحة
toDataURL()يُرجع تمثيلًا للصورة على اللوحة كسلسلة بيانات URL

الخصائص والأحداث القياسية

يدعم كائن اللوحة أيضًا الخصائص القياسية و الأحداث الشائعة في عناصر HTML الأخرى، مثل:

  • الخصائص: مثل width و height و backgroundColor و id و className و tabIndex و textContent و innerHTML وغيرها.
  • الأحداث: مثل onclick و onmouseover و onmouseout و onkeydown و onkeyup و onchange وغيرها.

صفحات ذات صلة

  • شرح HTML: HTML5 Canvas (شرح باللغة الإنجليزية)
  • مرجع HTML: علامة HTML <canvas> (شرح باللغة الإنجليزية)

دعم المتصفحات

  • عنصر <canvas> هو معيار HTML5 (منذ عام 2014).
  • Canvas API مدعوم في جميع المتصفحات الحديثة:
    • Chrome: نعم
    • Edge: نعم
    • Firefox: نعم
    • Safari: نعم
    • Opera: نعم
    • IE: الإصدارات 9-11 (مع بعض القيود)

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Check Also
Close
Back to top button