blockly > IFocusableNode

واجهة IFocusableNode

تمثّل هذه السمة أي عنصر يمكن أن يكون محور التركيز.

Signature:

export interface IFocusableNode 

الطُرق

الطريقة الوصف
canBeFocused()

تشير إلى ما إذا كانت هذه العقدة تسمح بالتركيز. إذا تم عرض القيمة "خطأ"، لن يتم استدعاء أي من طرق IFocusableNode الأخرى.

يُرجى العِلم أنّه يجب توخّي الحذر الشديد إذا كانت عمليات تنفيذ هذه الدالة تغيّر قيمة الإرجاع بشكلٍ ديناميكي على مدار عمر العقدة، لأنّ بعض شروط البيئة قد تؤثر في إمكانية التركيز على عنصر DOM الخاص بهذه العقدة (مثل ما إذا كان العنصر يحتوي على قيمة موجبة أو صفرية لسمة tabindex). بالإضافة إلى ذلك، لن يؤدي التغيير من القيمة "صحيح" إلى القيمة "خطأ" أثناء تركيز العقدة إلى تغيير التركيز الحالي للعقدة أو الحالة الداخلية لـ FocusManager على الفور، وبالتالي قد يؤدي إلى استدعاء بعض وظائف العقدة لاحقًا عند إزالة التركيز (لأنّه كان يُعتقد سابقًا أنّه يمكن التركيز عليه في وقت التركيز).

يجب أن تعرض عمليات التنفيذ القيمة "صحيح" دائمًا هنا، ما لم تكن هناك ظروف يجب فيها تخطّي هذه العقدة لأسباب تتعلّق بالتركيز. قد تشمل الأمثلة أن يكون العنصر غير مفعّل أو للقراءة فقط أو زخرفة مرئية بحتة أو عقدة بدون تمثيل مرئي يجب أن تنفّذ هذه الواجهة (على سبيل المثال، بسبب توسيع واجهة أصلية لها). ضَع في اعتبارك أفضل ممارسات تسهيل الاستخدام عند تحديد ما إذا كان يجب أن يكون العنصر قابلاً للتركيز عليه، لأنّ العناصر غير المفعّلة والتي لا يمكن تعديلها تظل غالبًا ذات صلة بتوفير سياق تنظيمي للمستخدمين (خاصةً عند استخدام قارئ شاشة).

getFocusableElement()

تعرض هذه السمة عنصر DOM الذي يمكن طلبه بشكل صريح لتلقّي التركيز.

ملاحظة مهمة: يُتوقّع أن يكون لهذا العنصر حضور مرئي على الصفحة، إذ سيتم التركيز عليه بشكل صريح وسيتم تغيير نمطه استنادًا إلى حالة التركيز الحالية (أي غير مركّز عليه، أو مركّز عليه بشكل نشط، أو مركّز عليه بشكل غير نشط). سيتم ربط أحد النمطَين التاليَين بالعنصر (حيث يشير عدم توفّر نمط إلى أنّ العنصر غير مركّز عليه أو غير واضح): - blocklyActiveFocus - blocklyPassiveFocus

يجب أن يتضمّن العنصر الذي تم إرجاعه أيضًا معرّفًا صالحًا، ويجب أن يكون هذا المعرّف فريدًا على مستوى الصفحة بأكملها. قد يؤدي عدم توفّر معرّف فريد بشكل صحيح إلى محاولة التركيز على إحدى العُقد (مثل النقر بالماوس)، ما يؤدي إلى تركيز FocusManager على عقدة أخرى تحمل المعرّف نفسه.

يجب أن يكون العنصر الذي تم عرضه مرئيًا إذا تم التركيز على العقدة من خلال FocusManager.focusNode()‎ أو FocusManager.focusTree()‎. ويُسمح بإخفاء عنصر إلى أن يتم استدعاء onNodeFocus()‎، أو إخفاؤه عند استدعاء onNodeBlur()‎.

من المتوقّع ألا يتغيّر العنصر الفعلي الذي يتم عرضه طوال مدة بقاء العقدة (أي يمكن تغيير خصائصها ولكن لا يجب أبدًا عرض عنصر جديد). بالإضافة إلى ذلك، سيتم استبدال قيمة tabindex للعنصر الذي تم عرضه طوال دورة حياة هذه العقدة وFocusManager.

إذا كانت العقدة تتطلّب إمكانية التركيز عليها مباشرةً بدون التركيز عليها أولاً من خلال FocusManager، يجب ضبط فهرس علامة التبويب الخاص بها.

getFocusableTree() تعرض هذه السمة أقرب شجرة أصلية لهذه العقدة (في الحالات التي تحتوي فيها الشجرة على أشجار مميزة تحتها)، والتي تمثّل الشجرة التي تنتمي إليها هذه العقدة.
onNodeBlur()

يتم استدعاؤها عندما تفقد هذه العقدة التركيز النشط. قد يظلّ التركيز التلقائي مفعّلاً.

تنطبق على هذه الطريقة القيود نفسها المفروضة على onNodeFocus().

onNodeFocus()

يتم استدعاؤها عندما تتلقّى هذه العُقدة التركيز النشط.

يُرجى العِلم أنّه لا بأس من أن تغيّر عمليات التنفيذ معدّلات مستوى الظهور، ولكن يجب تجنُّب ما يلي: - إنشاء عناصر DOM أو إزالتها (بما في ذلك من خلال أداة العرض أو الدرج). - التأثير في التركيز من خلال طلبات DOM focus() أو FocusManager