معايير نجاح WCAG · Level A
WCAG 2.5.4: تشغيل بالحركة
تتطلب WCAG 2.5.4 أن تكون أي وظيفة يتم تشغيلها بواسطة حركة الجهاز أو حركة المستخدم (مثل الهز أو الإمالة) قابلة للتشغيل أيضًا من خلال مكوّنات واجهة المستخدم التقليدية، وأن يكون المستخدمون قادرين على تعطيل تفعيل الحركة لمنع التشغيل العرضي.
ماذا تعني هذه القاعدة
تتناول قاعدة WCAG 2.5.4 — تشغيل بالحركة سيناريو محدد لكنه يزداد شيوعًا في تطبيقات الويب الحديثة: الوظائف التي يتم تشغيلها عبر حركة الجهاز الفعلية، مثل هز الهاتف الذكي، أو إمالة الجهاز، أو الإيماء أمام الكاميرا. يضع هذا المعيار مطلبين متوازيين يجب استيفاؤهما معًا لتحقيق الامتثال.
أولًا، أي وظيفة يمكن تشغيلها بواسطة حركة الجهاز أو حركة المستخدم يجب أن تكون قابلة للتشغيل أيضًا من خلال مكوّن في واجهة المستخدم — أي زر أو رابط أو عنصر تحكم في نموذج أو عنصر تفاعلي مشابه لا يعتمد على الحركة. يضمن ذلك ألا يُستبعد الأشخاص الذين لا يمكنهم أداء الإيماءات الحركية الجسدية أو لا يمكنهم أداؤها بشكل موثوق من الوصول إلى تلك الوظيفة بالكامل.
ثانيًا، يجب أن يكون المستخدمون قادرين على تعطيل الاستجابة للحركة حتى لا تؤدي الحركة العرضية أو اللاإرادية إلى تشغيل إجراءات غير مقصودة. يحمي هذا المستخدمين الذين لديهم رعشات أو حالات حركية أخرى تسبب حركة غير مقصودة للجهاز من التعرض لانقطاعات مستمرة بسبب سلوك غير متوقع للتطبيق.
ينطبق هذا المعيار على نوعين مميزين من الحركة: حركة الجهاز، التي يتم اكتشافها من خلال مستشعرات مثل مقاييس التسارع والجيروسكوبات المدمجة في الهواتف الذكية والأجهزة اللوحية (يتم الوصول إليها عبر واجهات برمجة التطبيقات مثل DeviceMotionEvent وDeviceOrientationEvent)، وحركة المستخدم، التي يتم اكتشافها من خلال الكاميرات أو مستشعرات الإدخال الأخرى التي تتبع حركة الجسم أو الإيماءات بدلًا من الجهاز نفسه.
يقدّم تنفيذ ناجح جميع الوظائف التي يتم تشغيلها بالحركة من خلال عنصر تحكم قياسي في واجهة المستخدم (زر أو رابط أو ما يعادله)، ويتيح للمستخدم أيضًا إيقاف اكتشاف الحركة إذا اختار ذلك. أما التنفيذ غير الناجح فيوفّر إما وصولًا يعتمد على الحركة فقط إلى ميزة ما دون وجود عنصر تحكم بديل في واجهة المستخدم، أو يوفّر بديلًا لكنه لا يقدّم أي طريقة لتعطيل مشغّل الحركة بحيث لا تسبب الحركة اللاإرادية مشكلات.
تعرّف WCAG 2.5.4 استثناءين مهمين. يُستثنى تشغيل الوظائف بالحركة إذا كانت الحركة أساسية للوظيفة وأن تعطيلها سيغيّر النشاط بشكل جوهري — على سبيل المثال، تطبيق لياقة بدنية لعدّ الخطوات حيث يكون تتبع الحركة هو الغرض الأساسي، أو لعبة مصممة صراحة حول آليات الإمالة. ينطبق الاستثناء الثاني عندما تُستخدم الحركة لتشغيل وظيفة من خلال واجهة إتاحة مدعومة، أي عندما تتولى ميزات الإتاحة الخاصة بالمنصة نفسها التعامل مع التفاعل القائم على الحركة بطريقة يتحكم فيها المستخدم بشكل مستقل.
لماذا يهم ذلك
تشكل حواجز التشغيل بالحركة عبئًا غير متناسب على الأشخاص ذوي الإعاقات الحركية وإعاقات الحركة، لكن تأثيرها أوسع مما يفترضه كثير من المطورين في البداية. يساعد فهم من يتأثر — وكيف — الفرق على إعطاء هذا المعيار الأولوية المناسبة.
الأشخاص الذين لديهم حالات رعشة — بما في ذلك الرعاش الأساسي، ومرض باركنسون، والتصلب المتعدد — قد يعانون من حركة لا إرادية مستمرة أو متقطعة في اليدين والذراعين. عندما يمسكون بهاتف ذكي، قد تكون رعشتهم الطبيعية كافية لتشغيل مربعات حوار "الهز للتراجع"، أو إجراءات التحديث، أو ميزات أخرى يتم تفعيلها بالحركة بشكل متكرر وغير متوقع. تقدّر منظمة الصحة العالمية أن حوالي 1.3 مليار شخص حول العالم يعيشون مع شكل من أشكال الإعاقة الكبيرة، وتُعد الحالات التي تؤثر في التحكم الحركي الدقيق من بين الأكثر انتشارًا عبر جميع الفئات العمرية.
الأشخاص الذين لديهم شلل أو اختلافات في الأطراف قد يستخدمون أجهزتهم المثبتة على كراسي متحركة أو حوامل، أو قد يستخدمون مؤشرات للرأس أو تتبع العين أو مفاتيح تحكم للتفاعل مع أجهزتهم. غالبًا لا يستطيع هؤلاء المستخدمون هز الجهاز أو إمالته على الإطلاق، مما يجعل الميزات المعتمدة على الحركة فقط غير قابلة للوصول تمامًا. إذا كانت الطريقة الوحيدة للتراجع عن إدخال نص في تطبيق ويب على الهاتف المحمول هي هز الجهاز، فلن يتمكن مستخدم كرسي متحرك يحمل هاتفًا مثبتًا من الوصول إلى تلك الميزة ببساطة.
كبار السن مجموعة أخرى متأثرة بشكل كبير. تصبح الحالات المرتبطة بالعمر بما في ذلك ضعف قوة القبضة، والتهاب المفاصل، والرعاش الأساسي أكثر شيوعًا مع التقدم في السن، مما يعني أن شريحة متزايدة من السكان — الذين أصبحوا أيضًا مستخدمين رقميين نشطين بشكل متزايد — قد يواجهون صعوبة في الإيماءات الحركية الدقيقة أو المقصودة.
فكّر في سيناريو واقعي ملموس: يضيف موقع تجارة إلكترونية تركي ميزة "الهز للخلط" التي تعرض للمستخدمين توصية عشوائية بمنتج عند هز الهاتف، مما يجعل التصفح أكثر تشويقًا. الميزة ممتعة وجديدة، لكن لا يوجد زر مكافئ لتشغيل عملية الخلط، ولا توجد طريقة لإيقاف اكتشاف الهز. مستخدم مصاب بمرض باركنسون يزور هذا الموقع يتعرض لتفعيل مستمر وغير متحكم فيه لميزة الخلط بينما تؤدي رعشته الطبيعية إلى تشغيل الإيماءة. لا يمكنه التصفح بهدوء لأن الصفحة تستمر في القفز إلى منتجات عشوائية. هذا المستخدم فعليًا محروم من تجربة تسوق عادية — ووفقًا للوائح الإتاحة في تركيا، لا يعد هذا مجرد مشكلة في تجربة المستخدم بل فشلًا في الامتثال القانوني.
إضافة إلى الوصول للأشخاص ذوي الإعاقة، فإن تعطيل ميزات الحركة أو توفير بدائل لها يحسّن أيضًا تجربة المستخدمين في البيئات التي تكون فيها حركة الجهاز غير موثوقة — في وسائل النقل العام، أو في المكاتب، أو في أي بيئة لا يمكن للمستخدم فيها تحريك جهازه بحرية.
قواعد Axe-core ذات الصلة
تتطلب WCAG 2.5.4 اختبارًا يدويًا لأن الأدوات الآلية لا يمكنها اكتشاف وجود أو غياب الوظائف المعتمدة على الحركة بشكل موثوق من خلال تحليل HTML وCSS الثابتين فقط. يعتمد تشغيل الوظائف بالحركة على مستمعي أحداث JavaScript وسلوك وقت التشغيل الذي لا يمكن لأدوات الفحص الآلي استقصاؤه بالكامل. يوضح ما يلي سبب قصور الأتمتة وما الذي يجب أن يغطيه التقييم اليدوي.
- لا توجد قاعدة آلية مباشرة في axe-core لـ 2.5.4. تعمل axe-core ومحركات الأتمتة المشابهة من خلال فحص DOM وسمات ARIA والأنماط المحسوبة. لا يمكنها ملاحظة ما إذا كانت الصفحة قد سجّلت مستمع حدث
devicemotionأوdeviceorientation، ولا يمكنها تحديد ما إذا كان هناك عنصر تحكم مكافئ في واجهة المستخدم لأي وظيفة يتم تشغيلها بالحركة. قد تحتوي الصفحة على تفاعلية واسعة تعتمد على الحركة دون أي مؤشرات مرئية في DOM، مما يجعل الاكتشاف الآلي غير موثوق من الأساس. لذلك تشير axe-core إلى أن هذا المعيار يتطلب مراجعة يدوية بدلًا من محاولة اكتشاف آلي قد ينتج عنه معدلات عالية من النتائج السلبية الكاذبة. - يتطلب الأمر فحصًا يدويًا لمستمعي أحداث JavaScript. يجب على المختبرين استخدام أدوات المطور في المتصفح للبحث عن تسجيلات
DeviceMotionEventوDeviceOrientationEventوواجهات برمجة تطبيقات الكاميرا/الرؤية مثل Shape Detection API. يمكن أن يكشف جزء Event Listeners في DevTools بالمتصفح ما إذا كانت هذه الأحداث مرتبطة بكائن window أو document. - لا يمكن أتمتة التماثل الوظيفي. حتى لو تمكنت أداة من اكتشاف مستمع للحركة، فلن تتمكن من تحديد ما إذا كان هناك زر أو رابط في مكان آخر في الواجهة يوفر الوظيفة نفسها. يتطلب تقييم التماثل الوظيفي وجود مختبر بشري يفهم ميزات التطبيق ويمكنه التحقق من أن كل إجراء يتم تشغيله بالحركة له بديل قابل للوصول والتشغيل في واجهة المستخدم.
- لا يمكن أتمتة إمكانية التعطيل. يتطلب تحديد ما إذا كان المستخدم يمكنه إيقاف الاستجابة للحركة التفاعل مع إعدادات التطبيق أو تفضيلاته — وهو اختبار سلوكي لا تُصمم الأدوات الآلية لتنفيذه بشكل شامل.
كيفية الاختبار
- فحص آلي كنقطة بداية: شغّل axe DevTools أو Lighthouse أو أداة الفحص Accsible على الصفحة. لن تشير هذه الأدوات تلقائيًا إلى انتهاكات 2.5.4، لكنها قد تُظهر مشكلات ذات صلة. دوّن أي عناصر تم الإشارة إليها، ثم انتقل إلى الخطوات اليدوية. غياب الإشارات الآلية لا يعني أن الصفحة تجتاز 2.5.4.
- تحديد الوظائف التي يتم تشغيلها بالحركة: افتح Chrome DevTools وانتقل إلى لوحة Elements. ابحث في ملفات مصدر JavaScript الخاصة بالصفحة (باستخدام علامة التبويب Sources والبحث العام عبر Ctrl+Shift+F) عن السلاسل
devicemotionوdeviceorientationوacceleratوgyroوshake. وثّق كل حالة يتم العثور عليها والوظيفة المرتبطة بها. - التحقق من وجود بدائل في واجهة المستخدم: لكل جزء من الوظائف التي يتم تشغيلها بالحركة تم اكتشافه في الخطوة السابقة، حاول تنفيذ الإجراء نفسه باستخدام التنقل عبر لوحة المفاتيح والنقرات بالماوس فقط — دون حركة للجهاز. تنقّل عبر الواجهة باستخدام Tab وEnter وSpace ومفاتيح الأسهم. إذا لم تتمكن من العثور على عنصر تحكم قابل للتشغيل في واجهة المستخدم يحقق النتيجة نفسها، يفشل المعيار.
- التحقق من إمكانية تعطيل الحركة: ابحث عن قائمة إعدادات أو لوحة تفضيلات أو إعدادات إتاحة أو مفتاح تبديل خاص بميزات الحركة. حاول تعطيل تشغيل الوظائف بالحركة. إذا لم يوجد مثل هذا العنصر، أو إذا أدى تعطيل الحركة أيضًا إلى تعطيل البديل في واجهة المستخدم، يفشل المعيار.
- الاختبار على جهاز فعلي: حمّل الصفحة على هاتف ذكي أو جهاز لوحي فعلي. حرّك الجهاز عمدًا برفق (محاكاة للرعشة اللاإرادية — حركات صغيرة مستمرة) ولاحظ ما إذا كانت الوظائف تُشغّل بشكل غير مقصود. ثم حاول إجراء الاختبار نفسه بعد تعطيل الحركة عبر أي إعدادات متاحة.
- الاختبار باستخدام قارئ الشاشة ولوحة المفاتيح: باستخدام NVDA مع Firefox أو VoiceOver مع Safari على iOS أو JAWS مع Chrome، تنقّل في الصفحة باستخدام لوحة المفاتيح فقط وأوامر قارئ الشاشة. تأكد من أن كل وظيفة يمكن الوصول إليها عبر الحركة يمكن الوصول إليها أيضًا عبر تنقل قارئ الشاشة، وأن عنصر التحكم في تعطيل الحركة (إن وجد) نفسه قابل للوصول بلوحة المفاتيح وموسوم بشكل صحيح.
- محاكاة الجهاز في أدوات مطوري المتصفح: في Chrome DevTools، افتح لوحة Sensors (المزيد من الأدوات > Sensors) واستخدم عناصر التحكم في محاكاة اتجاه الجهاز ومقياس التسارع لتشغيل أحداث الحركة برمجيًا. يتيح ذلك اختبار سلوك الوظائف التي يتم تشغيلها بالحركة على سطح المكتب دون جهاز فعلي.
كيفية الإصلاح
هز للتحديث بدون بديل — غير صحيح
<!-- Motion listener attached, but no UI button provided to refresh -->
<script>
window.addEventListener('devicemotion', function(event) {
var acceleration = event.accelerationIncludingGravity;
if (Math.abs(acceleration.x) > 15 || Math.abs(acceleration.y) > 15) {
refreshContent();
}
});
</script>
<div id='content'>...page content...</div>
هز للتحديث بدون بديل — صحيح
<!-- Motion alternative: a visible button provides the same refresh action.
A settings toggle lets users disable the motion trigger entirely. -->
<div id='motion-controls'>
<button type='button' id='refresh-btn' onclick='refreshContent()'>
Refresh Content
</button>
<label>
<input type='checkbox' id='disable-motion' onchange='toggleMotion(this.checked)' />
Disable shake-to-refresh
</label>
</div>
<div id='content'>...page content...</div>
<script>
var motionEnabled = true;
function toggleMotion(disabled) {
motionEnabled = !disabled;
}
window.addEventListener('devicemotion', function(event) {
if (!motionEnabled) return;
var acceleration = event.accelerationIncludingGravity;
if (Math.abs(acceleration.x) > 15 || Math.abs(acceleration.y) > 15) {
refreshContent();
}
});
function refreshContent() {
// fetch and update content
}
</script>
شريط تمرير (كاروسيل) بالإمالة للتمرير بدون خيار تعطيل — غير صحيح
<!-- Carousel advances on device tilt; no way to turn this off -->
<div id='carousel'>
<div class='slide'>Slide 1</div>
<div class='slide'>Slide 2</div>
<div class='slide'>Slide 3</div>
</div>
<script>
window.addEventListener('deviceorientation', function(event) {
if (event.gamma > 30) advanceCarousel();
if (event.gamma < -30) retreatCarousel();
});
</script>
شريط تمرير (كاروسيل) بالإمالة للتمرير بدون خيار تعطيل — صحيح
<!-- Previous/Next buttons provide UI alternatives.
A settings checkbox lets users opt out of tilt control.
The carousel is also keyboard accessible via arrow keys. -->
<div id='carousel-wrapper'>
<button type='button' aria-label='Previous slide' onclick='retreatCarousel()'>«</button>
<div id='carousel' role='region' aria-label='Image carousel' aria-live='polite'>
<div class='slide' aria-hidden='false'>Slide 1</div>
<div class='slide' aria-hidden='true'>Slide 2</div>
<div class='slide' aria-hidden='true'>Slide 3</div>
</div>
<button type='button' aria-label='Next slide' onclick='advanceCarousel()'>»</button>
</div>
<label>
<input type='checkbox' id='disable-tilt' onchange='tiltEnabled = !this.checked' />
Disable tilt navigation
</label>
<script>
var tiltEnabled = true;
window.addEventListener('deviceorientation', function(event) {
if (!tiltEnabled) return;
if (event.gamma > 30) advanceCarousel();
if (event.gamma < -30) retreatCarousel();
});
</script>
ميزة إيماءات الكاميرا بدون بديل — غير صحيح
<!-- User waves hand in front of camera to dismiss a modal;
no button or keyboard method exists to dismiss it otherwise -->
<div id='modal' role='dialog' aria-modal='true' aria-label='Notification'>
<p>Wave your hand to dismiss this message.</p>
</div>
<script>
startCameraGestureDetection(function onWave() {
document.getElementById('modal').hidden = true;
});
</script>
ميزة إيماءات الكاميرا بدون بديل — صحيح
<!-- A clearly labeled close button provides the UI alternative.
The modal is fully keyboard operable and focus is managed correctly. -->
<div id='modal' role='dialog' aria-modal='true' aria-labelledby='modal-title'>
<h2 id='modal-title'>Notification</h2>
<p>Wave your hand or press the button below to dismiss this message.</p>
<button type='button' id='dismiss-btn' onclick='dismissModal()'>Dismiss</button>
</div>
<script>
function dismissModal() {
document.getElementById('modal').hidden = true;
// return focus to triggering element
}
startCameraGestureDetection(dismissModal);
// Allow Escape key to also dismiss
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') dismissModal();
});
</script>
الأخطاء الشائعة
- توفير زر بديل في واجهة المستخدم لكن مع نسيان مفتاح تعطيل الحركة: يضيف كثير من المطورين زرًا مكافئًا لكنهم لا ينفذون طريقة لإيقاف مستمع الحركة، مما يترك المستخدمين المتأثرين بالرعشة يعانون من تفعيلات غير مرغوبة حتى وإن كانت الميزة قابلة للتشغيل تقنيًا بوسائل أخرى.
- إخفاء خيار تعطيل الحركة داخل قائمة همبرغر أو صفحة إعدادات عميقة: يجب أن يكون عنصر التحكم في تعطيل الحركة نفسه سهل الوصول. إذا كان المستخدم الذي يعاني من رعشة يفعّل "الهز للتحديث" بشكل متكرر قبل أن يتمكن من التنقل عبر خمس طبقات من القوائم لتعطيله، فإن خيار التعطيل ليس متاحًا عمليًا.
- افتراض أن تفضيل "تقليل الحركة" على مستوى نظام التشغيل يفي بمتطلبات 2.5.4: يعالج استعلام الوسائط
prefers-reduced-motionوإعدادات الإتاحة في نظام التشغيل مشكلات الرسوم المتحركة والدوار، لكنه لا يعطّل تلقائيًا مستمعي أحداث حركة الجهاز في تطبيقات الويب. يجب عليك التعامل مع ذلك في شيفرتك الخاصة. - ضبط عتبات الحركة على مستوى منخفض جدًا: استخدام عتبات حساسة جدًا لقيم التسارع في
DeviceMotionEventيعني أن الرعشات الصغيرة اللاإرادية يمكن أن تتجاوز العتبة. يجب أن تتطلب العتبات حركة مقصودة وعالية الشدة، وحتى في هذه الحالة يظل خيار التعطيل مطلوبًا. - تسجيل مستمعي الحركة عالميًا على window دون إزالتهم مطلقًا: ربط مستمع وعدم توفير مسار في الشيفرة لإزالته باستخدام
removeEventListenerيعني أن مفتاح التعطيل لا يمكنه سوى كبح السلوك بشكل شرطي — إذا فشل المفتاح نفسه أو تمت إعادة تعيينه عند إعادة تحميل الصفحة، تبقى الحركة نشطة. - جعل مربع اختيار تعطيل الحركة غير قابل للوصول: تنفيذ مفتاح التعطيل كعنصر
<div>أو<span>منسّق مع مستمع للنقر بدلًا من عنصر<input type='checkbox'>مناسب أو عنصر معزز بـ ARIA يعني أن مستخدمي لوحة المفاتيح وقارئ الشاشة لا يمكنهم الوصول إلى عنصر التحكم نفسه الذي يفترض أن يساعدهم. - عدم الاحتفاظ بتفضيلات المستخدم المتعلقة بالحركة عبر الجلسات: إذا عطّل المستخدم تشغيل الوظائف بالحركة لكن لم يتم حفظ التفضيل (مثلًا عبر
localStorageأو إعداد في حساب المستخدم)، فسيتعين عليه تعطيله في كل زيارة، مما يخلق عبئًا متكررًا على المستخدمين الأكثر تأثرًا. - تطبيق استثناء الوظيفة الأساسية بشكل واسع جدًا: استثناء "الأساسية" ضيق. معرض المنتجات الذي يستخدم "الهز للخلط" ليس أساسيًا — فميزة الخلط ليست الوظيفة الأساسية لموقع تسوق. أحيانًا تسيء الفرق تطبيق هذا الاستثناء لتجنب تنفيذ العمل المطلوب.
- عدم الاختبار على جهاز فعلي مع حركة حقيقية: الاعتماد فقط على أدوات المحاكاة على سطح المكتب أو الفحوصات الآلية يعني أن مشكلات الحساسية للحركة في العالم الحقيقي — بما في ذلك كيفية تصرف الميزة عندما يكون لدى المستخدم رعشة طبيعية — لا تُكتشف مطلقًا حتى يبلغ المستخدمون عنها.
- نسيان أن ميزات الحركة المضافة بواسطة حزم SDK أو مكتبات التحليلات التابعة لجهات خارجية يجب أن تمتثل أيضًا: مستمعو الحركة المضمّنون في أدوات الدردشة التابعة لجهات خارجية أو حزم التلعيب أو أدوات اختبار A/B لا تزال جزءًا من مسؤولية امتثال الصفحة. إذا سجّل سكربت تابع لجهة خارجية مستمع
devicemotionدون توفير بديل، تفشل الصفحة في 2.5.4.
العلاقة بلوائح الإتاحة في تركيا
تضع التعميم الرئاسي رقم 2025/10 في تركيا، المنشور في الجريدة الرسمية (رقم 32933) بتاريخ 21 يونيو 2025، متطلبات إلزامية لإتاحة الويب متوافقة مع WCAG 2.2. تُعد WCAG 2.5.4 تشغيل بالحركة معيارًا من المستوى A، ما يعني أنه يقع في أعلى مستوى أولوية من الامتثال الإلزامي بموجب هذا التعميم.
يشمل التعميم نطاقًا واسعًا من الكيانات في القطاعين العام والخاص. يجب على المؤسسات العامة — بما في ذلك جميع الهيئات الحكومية المركزية والمحلية والوزارات والوكالات العامة — تحقيق امتثال كامل لمستوى A خلال عام واحد من تاريخ نشر التعميم. يجب على الكيانات في القطاع الخاص ضمن الفئات المشمولة تحقيق المعيار نفسه خلال عامين. تشمل فئات القطاع الخاص المشمولة منصات التجارة الإلكترونية والأسواق، والبنوك والمؤسسات المالية، والمستشفيات ومقدمي الرعاية الصحية الخاصة، وشركات الاتصالات التي لديها 200,000 مشترك أو أكثر، ووكالات السفر المرخّصة، وشركات النقل الخاصة، والمدارس الخاصة التي تعمل بموجب ترخيص من وزارة التربية الوطنية (MoNE).
يُعد تشغيل الوظائف بالحركة ذا صلة خاصة بالخدمات الرقمية التركية لأن استخدام الإنترنت عبر الهاتف المحمول في تركيا مرتفع جدًا، حيث يصل معظم حركة الويب من الهواتف الذكية. لذلك تُعد تطبيقات الويب الموجهة للهواتف المحمولة أولًا أو حصريًا شائعة للغاية عبر جميع القطاعات المشمولة. أي موقع تجارة إلكترونية تركي أو تطبيق مصرفي أو بوابة حكومية نفّذت ميزات مثل الهز للتحديث أو التنقل بالإمالة أو التفاعلات القائمة على الإيماءات أو ميزات حركة مشابهة دون توفير بدائل في واجهة المستخدم وعناصر تحكم للتعطيل يكون في انتهاك مباشر لمتطلب إلزامي من المستوى A بموجب التعميم الرئاسي 2025/10.
بالنسبة للكيانات المشمولة التي تُعد خرائط طريق للامتثال، يجب تقييم تشغيل الوظائف بالحركة كجزء من تدقيق أوسع لإتاحة الأجهزة المحمولة. وبما أن الأدوات الآلية لا يمكنها اكتشاف انتهاكات 2.5.4، ينبغي على المؤسسات تضمين اختبارات يدوية يجريها مختصون مؤهلون في مجال الإتاحة ضمن عملية التحقق من الامتثال. نظرًا لأن التعميم لا يتضمن فترة سماح للميزات التي تم تنفيذها قبل نشره — بل يحدد فقط جدولًا زمنيًا لتحقيق الامتثال — يجب تصحيح أي وظائف تعتمد على الحركة حاليًا على المواقع المشمولة ضمن المهلة الزمنية المعمول بها.
قد تواجه الكيانات التي لا تمتثل لمتطلبات التعميم عقوبات إدارية وتخضع لإنفاذ من قبل السلطات الرقابية المختصة بقطاعها. إضافة إلى المخاطر التنظيمية، فإن عدم الامتثال لـ 2.5.4 على موقع تركي عالي الزيارات على الهاتف المحمول يمثل فشلًا حقيقيًا في قابلية الاستخدام لملايين المستخدمين الذين قد يعانون من إعاقات حركية أو رعشات أو يستخدمون تقنيات مساعدة — وهي فئة من السكان يتم الاعتراف باحتياجاتها وحمايتها صراحة من خلال اعتماد التعميم لمستوى A من WCAG 2.2 كمعيار أساسي.
المصادر والمراجع
- W3C Understanding 2.5.4 Motion Actuation
- W3C Techniques for 2.5.4 Motion Actuation
- MDN: DeviceMotionEvent
- MDN: DeviceOrientationEvent
- W3C Technique G213: Provide conventional controls and an application setting for motion activated input
- Deque University: WCAG 2.5.4 Motion Actuation Overview
- WebAIM: Motor Disabilities and Accessibility
