التعامل مع التركيز ومصائد لوحة المفاتيح في النوافذ المنبثقة
حافظوا على التركيز داخل النوافذ المنبثقة المفتوحة لإتاحة الوصول باستخدام useRef ومستمعات الأحداث
التعامل مع التركيز ومصائد لوحة المفاتيح في النوافذ المنبثقة درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
مرحبًا
لماذا تُطلب مصائد التركيز؟
ما المقصود بمصيدة التركيز؟
العثور على العناصر القابلة للتركيز
const FOCUSABLE = [
'a[href]', 'button:not([disabled])',
'input:not([disabled])', 'select', 'textarea',
'[tabindex]:not([tabindex="-1"])'
].join(',');
const focusable = Array.from(
modalRef.current.querySelectorAll(FOCUSABLE)
);تنفيذ المصيدة
function handleTab(e) {
const focusable = /* array of focusable elements */;
const first = focusable[0];
const last = focusable[focusable.length - 1];
if (e.key !== 'Tab') return;
if (e.shiftKey) {
if (document.activeElement === first) {
e.preventDefault(); last.focus();
}
} else {
if (document.activeElement === last) {
e.preventDefault(); first.focus();
}
}
}نقل التركيز عند الفتح
useEffect(() => {
if (isOpen) {
const first = modalRef.current?.querySelector(FOCUSABLE);
first?.focus();
}
}, [isOpen]);استعادة التركيز عند الإغلاق
const previousFocus = useRef(null);
useEffect(() => {
if (isOpen) {
previousFocus.current = document.activeElement;
} else {
previousFocus.current?.focus();
}
}, [isOpen]);استخدام مكتبة focus-trap-react
import FocusTrap from 'focus-trap-react';
{isOpen && (
<FocusTrap>
<div role="dialog" aria-modal="true">
{children}
</div>
</FocusTrap>
)}سمات ARIA للنوافذ المنبثقة
<div
role="dialog"
aria-modal="true"
aria-labelledby="modal-title"
>
<h2 id="modal-title">Confirm Delete</h2>
...
</div>السمة inert للخلفية
useEffect(() => {
const root = document.getElementById('root');
if (isOpen) root.setAttribute('inert', '');
else root.removeAttribute('inert');
}, [isOpen]);تحقق سريع
مراجعة
التالي
الأسئلة الشائعة
هل درس «التعامل مع التركيز ومصائد لوحة المفاتيح في النوافذ المنبثقة» مجاني؟
نعم — نص درس «التعامل مع التركيز ومصائد لوحة المفاتيح في النوافذ المنبثقة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «التعامل مع التركيز ومصائد لوحة المفاتيح في النوافذ المنبثقة»؟
حافظوا على التركيز داخل النوافذ المنبثقة المفتوحة لإتاحة الوصول باستخدام useRef ومستمعات الأحداث تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التعامل مع التركيز ومصائد لوحة المفاتيح في النوافذ المنبثقة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما هي React Portals؟
- إنشاء مكوّن Modal باستخدام Portals
- التعامل مع التركيز ومصائد لوحة المفاتيح في النوافذ المنبثقة
- التلميحات والقوائم المنسدلة باستخدام Portals