يُعدّ تتبُّع دقيق لحركات الماوس أمرًا بالغ الأهمية لإنشاء تجارب تفاعلية وجذابة على الويب. يستعرض هذا الدليل الطرق المختلفة التي توفرها جافا سكريبت لتحقيق ذلك، مع التركيز على التقنيات العملية وأفضل الممارسات.
محتويات
- فهم أحداث الماوس في جافا سكريبت
- استخدام
pageX/pageY
وclientX/clientY
- مراعاة التمرير
- ما هو أبعد من الأساسيات: تقنيات متقدمة
فهم أحداث الماوس في جافا سكريبت
توفر جافا سكريبت مجموعة غنية من أحداث الماوس لالتقاط تفاعلات المستخدم. لتتبع موضع الماوس، يُعدّ حدث mousemove
أساسيًا. يتم تشغيل هذا الحدث بشكل متكرر مع تحريك الماوس، مما يوفر تحديثات مستمرة لموقع المؤشر. تقدم أحداث أخرى، مثل mouseover
، mouseout
، mousedown
، و mouseup
، سياقًا قيّمًا ولكنها لا تُستخدم مباشرةً لتتبع المواضع المستمر.
يتم إرفاق هذه الأحداث بعناصر HTML باستخدام طريقة addEventListener
. على سبيل المثال:
const myElement = document.getElementById('myElement');
myElement.addEventListener('mousemove', handleMouseMove);
function handleMouseMove(event) {
// معالجة إحداثيات الماوس هنا
}
استخدام pageX/pageY
و clientX/clientY
يوفر الكائن المرتبط بحدث mousemove
خصائص مهمة للحصول على إحداثيات الماوس:
pageX
وpageY
: يعطيان الإحداثيات الأفقية والرأسية بالنسبة للمستند بأكمله، بما في ذلك التمرير. إنها متسقة بغض النظر عن تعشيش العنصر.clientX
وclientY
: يوفران الإحداثيات بالنسبة لمنطقة عرض نافذة المتصفح، مع مراعاة التمرير أيضًا.
إليك كيفية استخدامها:
function handleMouseMove(event) {
const pageX = event.pageX;
const pageY = event.pageY;
const clientX = event.clientX;
const clientY = event.clientY;
console.log(`إحداثيات الصفحة: (${pageX}, ${pageY})`);
console.log(`إحداثيات العميل: (${clientX}, ${clientY})`);
// تحديث عناصر واجهة المستخدم بالإحداثيات
document.getElementById('coordinates').textContent = `X: ${pageX}, Y: ${pageY}`;
}
تذكر تضمين عنصر برقم تعريف myElement
و coordinates
في HTML الخاص بك:
<div id="myElement" style="width: 500px; height: 300px; background-color: lightgray;">حرّك مؤشر الماوس فوقي!</div>
<div id="coordinates"></div>
مراعاة التمرير
تتعامل pageX
و pageY
بشكلٍ جوهري مع التمرير. إذا قام المستخدم بتمرير الصفحة، فستُعدّل الإحداثيات وفقًا لذلك، مع مراعاة موضع الماوس دائمًا بالنسبة للمستند بأكمله. ومع ذلك، تظل clientX
و clientY
نسبيتين لمنطقة العرض.
ما هو أبعد من الأساسيات: تقنيات متقدمة
بالنسبة للسيناريوهات الأكثر تعقيدًا، ضع في اعتبارك هذه التقنيات المتقدمة:
- إزالة الارتداد/التقليل: لتحسين الأداء للتطبيقات التي تحتوي على أحداث
mousemove
متكررة جدًا، استخدم إزالة الارتداد أو التقليل للحد من معدل تنفيذ مُعالِج الحدث. - التحديد النسبي: للتفاعلات داخل عنصر محدد، احسب الإحداثيات النسبية داخل حدود ذلك العنصر.
- أحداث اللمس: للأجهزة التي تدعم اللمس، استخدم أحداث اللمس (
touchstart
،touchmove
،touchend
) بدلاً من أحداث الماوس.