حدث النقر في جافا سكريبت. باستخدام مكتبة jQuery
onClick هو الحدث رقم 1 على شاشة المستخدم.
onСlick هي نقرة (أو نقرة) يقوم بها المستخدم على كائن ما.
بعد كل نقرة مستخدم، يجب أن يحدث إجراء استجابة على الشاشة. وهذا يضمن تفاعل الواجهة ويؤكد المبدأ الرئيسيالتواصل بين الكمبيوتر والشخص - انقر، أجب، انقر، أجب.
في لغة المستخدم، يمكن تسمية الحدث onСlick بأي شيء تريده. بمجرد أن لا يطلق المستخدمون العاديون على هذا اسم "onClick" السيئ - انقر أو اسحب أو انقر أو انقر أو فرقعة وما إلى ذلك. ... لكن جوهر هذا لم يتغير منذ سنوات - إذا كان المستخدم نشطًا على الشاشة وقام بالنقر على كائن ما، فيجب أن يستجيب الكمبيوتر له (المستخدم) بشكل مناسب. هذا عند النقر.
يعد حدث onClick ذا أهمية قصوى في أي لغة. وHTML ليست استثناء من هذا. من المعروف. في الواقع، إذا لم يحدث شيء في المتصفح بعد النقر (onlick) على أحد العناصر، فلماذا تهتم ببرمجة أي شيء على الموقع؟ لذا، فإن onСlick هو ضيف مرحب به على أي شاشة إنترنت (أو شاشة صغيرة).
والآن أقرب إلى الموضوع. وبشكل أكثر تحديدًا، يعد onClick على صفحة موقع الويب في المتصفح حدثًا من برنامج Java النصي، حيث يعمل HTML فقط كإطار عمل لوضع التعليمات البرمجية الخاصة ببنياته. ومن وجهة نظر صحة كود HTML هذا، سيكون من الصحيح الكتابة عند النقر وليس عند النقر (كما اعتاد العديد من مبرمجي التطبيقات). لأنه في HTML تتم كتابة جميع العلامات والهياكل بأحرف صغيرة فقط.
لا يوجد أحرف كبيرة في HTML. لا هذا كله! وبالنسبة لأولئك "الأشرار" الذين يكتبون بلغة HTML بأحرف كبيرة، كان من المعتاد في الأيام الخوالي أن يقطعوا أيديهم حتى ركبهم. علاوة على ذلك. يقولون أنه في عهد الأب القيصر إيفان الرهيب، للكتابة بلغة HTML، يمكن أن يؤدي شيء كهذا بسهولة إلى إعدامك، إن لم يكن مخوزقًا، على المشنقة. هذا دقيق تمامًا. الآن، بالطبع، أصبح رجال الحاشية والحكام أكثر هدوءًا. ومع ذلك، عند كتابة أي رمز، تحتاج إلى مراعاة مظهر الحشمة على الأقل. من هذا المكان تبدأ قصة النقرة الصحيحة.
لذلك، فقد تم تحديده وإثباته (بالنسبة لـ HTML).
أولا، نكتب onclick، وليس onСlick!!!
القائمة رقم 1
أو
القائمة رقم 1
سنكتشف ماذا تعني هذه السطور المجنونة بعد قليل، لكن في الوقت الحالي...
- بشكل أساسي، يمكن إرفاق حدث onclick من برنامج Java النصي بتنسيق HTML بأي عنصر تعليمة برمجية في صفحة HTML، سواء كان ذلك،
أو . سوف "يلتهم" المتصفح كل شيء، وسيعمل كل شيء. الشيء الوحيد هو أن الوصول إلى عنصر من لوحة المفاتيح ممكن فقط لكائن الرابط أو الزر. وإذا افترضنا للحظة أن المستخدم ليس لديه ماوس ويعمل حصريًا باستخدام لوحة المفاتيح، فكل ما سيتمكن من لمسه في الموقع سيكون مجرد أزرار أو روابط. لا يوجد ثالث! لذلك، فإن "ربط" حدث onclick بالكائنات التي لا يمكن الوصول إليها من لوحة المفاتيح هو ببساطة أمر قبيح. حسنا، ليس إنسانيا، بطريقة أو بأخرى. يُظهر هذا القاعدة الثانية الخاصة بـ onclick في HTML - يجب أن يكون هذا الحدث متصلاً فقط برابط (العلامة "a") أو زر (العلامة "button"). خلاف ذلك، سيظل الكود يعمل، ولكن في الجحيم، تم إعداد مقلاة كبيرة منفصلة لمثل هؤلاء المبرمجين.
نظرًا لأن التنسيق (في HTML) والعمل باستخدام الأزرار ("الأرغفة") يسبب صعوبات معينة، فإن المشكلة الوحيدة والعالمية و الخيار الأفضليبقى الرابط فقط (العلامة "أ"). ولكن حتى مع هذه العلامة، ليس كل شيء على ما يرام. الآن، دعنا نعود إلى التحليل مع سطر التعليمات البرمجية الخاص بنا:
القائمة رقم 1
لقد قمنا بحذف روابط العنوان من المناقشة كشيء واضح تمامًا. يبقى
القائمة رقم 1
ستكون جميع الكتابات الإضافية مرتبطة بموضوع حظر سمة href، والتي يجب أن تكون "مشلولة" بشكل صحيح بحيث يتوقف الرابط عن أن يكون رابطًا عاملاً، ولكنه مع ذلك يؤدي وظائف onclick .
عودة كاذبة ؛ - يعد هذا حظرًا مباشرًا لسمة href. إذا قام المستخدم بتمكين برنامج Java script في متصفحه، فسيتم استدعاء حدث onclick من البرنامج النصي المقابل، بدلاً من اتباع الارتباط. وهذا يعني أنه عند النقر فوق "رابط الاتصال"، لا يكون هناك انتقال فوري إلى العنوان من href، تتم إضافة حدث الإرجاع الخاطئ إلى onclick؛ ومن المفترض أنه سيتم أولاً تنفيذ وظيفة ستؤدي إلى إلغاء الارتباط في حالة تمكين جافا سكريبت. وبالتالي، فإن محتوى سمة href ليس له أي معنى حيث يتم تجاهله عند تنفيذ برنامج Java النصي.
ولكن هنا السؤال. ماذا يحدث إذا قام المستخدم بتعطيل (تعطيل) Java script في متصفحه؟ كيف سيكون سلوك رابطنا بعد ذلك؟ لن أثير اهتمامك، لكنني سأنشره على الفور الخيارات الممكنةتطورات الأحداث - القيم المحتملة لسمة href والسلوك المقابل للمتصفح بعد النقر على هذا الرابط عند إيقاف تشغيل برنامج Java النصي.
بالطبع، إذا تم إيقاف تشغيل جافا سكريبت في متصفح المستخدم، فهذه مشكلة وإزعاج. إذا تم تعطيل (محظور) تنفيذ برامج Java النصية في متصفح المستخدم، فستبدأ المشكلات المستمرة في سمة href، نظرًا لأن العلامة "a" لا تزال رابطًا وسيحاول المتصفح الانتقال إليها.
لا يمكنك إزالة سمة href بالكامل من الرابط. من المستحيل الاستغناء عن سمة href في نص الرابط، وسيتم الإهانة على الفور لأي مدقق لمثل هذا الغضب ضد جسدها الحار والحساس. هذا يعني أنه لم يتبق سوى خيار واحد - لملء سمة href بمحتوى سهل الهضم. هنا يكون ما يلي ممكنًا: اترك href فارغًا تمامًا، واملأه بعلامة حادة "#" أو تعبير جافا سكريبت//. عندما يتم إيقاف تشغيل برنامج Java النصي (أو يكون به خلل)، بعد النقر على هذه الروابط، سيحدث ما يلي:
اختبار السمة href فارغة. بعد النقر على هذا الرابط، سيتم إعادة تحميل الصفحة في المتصفح ببساطة. نموذج السمة href لها القيمة "#". بعد النقر على هذا الرابط، سيتم نقل المستخدم إلى أعلى الصفحة، دون إعادة تحميله. يحاولتحتوي سمة href على القيمة "javascript://". بعد النقر على هذا الرابط، لن يحدث شيء. href="javascript://" - سيتم تجاهل النقر على الرابط ببساطة بواسطة المتصفح. تعد قيمة "javascript://" للسمة href بمثابة "كعب روتين" قياسي لحظر الارتباط عند إيقاف تشغيل برنامج Java النصي.
href = "javascript://" - هراء!لماذا هراء؟ لأن الحياة على الإنترنت في العالم محركات البحثيقوم بتعديلاته الخاصة. من وجهة نظر صحيحة ودلالية! التخطيط، سيكون من المنطقي تمامًا كتابة رابط حقيقي في سمة href وإضافة عنوان حقيقي لهذا الرابط. وبعد ذلك، بعد النقر على هذا الرابط، سيحدث أحد أمرين: إما أن يتم تنفيذ حدث onclick من برنامج Java النصي المقابل، أو سيتم الانتقال عبر رابط حقيقي إلى صفحة حقيقية (إذا تم تعطيل برنامج Java النصي أو معطل/محمل بشكل ناقص).
وبالتالي، دعونا نلخص. في الرابط الخاص باستدعاء حدث Java script، في href نضع رابطًا حقيقيًا للصفحة الحقيقية للانتقال إليها عند إيقاف تشغيل Javascript، وفي onclick - وظيفة تستدعي طلبًا لتنفيذ البرنامج النصي عند تشغيل Java script .
بمعنى آخر، يجب أن يحتوي "href" على رابط عادي وعامل تمامًا لأي صفحة ويب سيتم إعادة توجيه المستخدم إليها عند النقر على "رابط استدعاء الحدث" أطفئجافا سكريبت، والتي سيتم تجاهلها بواسطة البرنامج النصي عندما متضمنةجافا سكريبت. هذا كل شئ …
حسنًا، في النهاية -
التحقق من المتصفح لتشغيله/إيقاف تشغيله لبرنامج Java scriptيبدو الرمز القياسي لمثل هذا الفحص كما يلي:
لقد تم تعطيل الجافا سكريبت ...
حيث يمكنك كتابة أي أنماط في CSS، باستثناء العرض: لا شيء؛ والأساليب المشابهة... المتصفح أمر لا بد منه!!! سيعرض هذه الرسالة على الشاشة إذا قام المستخدم بتعطيل برنامج Java script في متصفحه. بهذه الطريقة البسيطة، غالبًا ما يكتب مشرفو المواقع: "الرجاء تمكين جافا سكريبت" أو يعرضون بعضًا منها صور جميلةبطلب مشابه، أو بشيء آخر... داخل العلامة noscriptيمكنك وضع أي علامات HTML. وهذا ليس احتياطًا غير ضروري. على الرغم من أنه ليس من السهل الآن العثور على موقع لا يستخدم جافا سكريبت على الإطلاق.
ومن ليس معنا فهو ضدنا
يمكن بشكل عام حل مشكلة إيقاف تشغيل Java script في المتصفح بشكل جذري وجذري. على سبيل المثال، قم بإضافة كود HTML5 داخل القسم، مثل:
حيث http://mysite.ru/ عبارة عن صفحة ويب يتم إعادة توجيهه إليها على الفور
المستخدم متى تم إيقافه في المتصفحجافا سكريبت.
التعامل مع الحدث
تعتمد برامج عميل JavaScript على نموذج برمجة يحركه الحدث. باستخدام هذا النمط من البرمجة، يقوم متصفح الويب بإنشاء حدث عندما يحدث شيء ما للمستند أو لبعض عناصره. على سبيل المثال، يقوم مستعرض الويب بإنشاء حدث عند الانتهاء من تحميل مستند عندما يقوم المستخدم بتحريك الماوس فوق ارتباط تشعبي أو الضغط على مفتاح على لوحة المفاتيح.
إذا كان تطبيق JavaScript مهتمًا بنوع معين من الأحداث لعنصر مستند معين، فيمكنه تسجيل وظيفة واحدة أو أكثر ليتم استدعاؤها عند حدوث هذا الحدث. يرجى العلم أن هذا ليس كذلك ميزة فريدة من نوعهابرمجة الويب: تعمل جميع تطبيقات واجهة المستخدم الرسومية بهذه الطريقة - فهي تنتظر باستمرار حدوث شيء ما (أي تنتظر حدوث الأحداث) وتستجيب لما يحدث.
نوع الحدث عبارة عن سلسلة تحدد نوع الإجراء الذي تسبب في الحدث. على سبيل المثال، يعني النوع "mousemove" أن المستخدم قام بتحريك مؤشر الماوس. النوع "keydown" يعني أنه تم الضغط على أحد المفاتيح الموجودة على لوحة المفاتيح. ويعني نوع "التحميل" أن تنزيل المستند (أو بعض الموارد الأخرى) من الشبكة قد اكتمل. نظرًا لأن نوع الحدث مجرد سلسلة، فإنه يُطلق عليه أحيانًا اسم الحدث.
هدف الحدث هو الكائن الذي وقع فيه الحدث أو الذي يرتبط به الحدث. عند الحديث عن حدث ما، عادة ما يذكرون نوع الحدث والغرض منه. على سبيل المثال، حدث "load" لكائن Window أو حدث "click" لكائن . الأهداف الأكثر شيوعًا للأحداث في تطبيقات العميلفي JavaScript هي كائنات Window، وDocument، وElement، ولكن يمكن أن تحدث بعض أنواع الأحداث في أنواع كائنات أخرى.
معالج الحدث هو دالة تقوم بمعالجة حدث ما أو الاستجابة له. يجب أن تسجل التطبيقات وظائف معالج الأحداث الخاصة بها في متصفح الويب، مع تحديد نوع الحدث والغرض منه. عند وقوع حدث من النوع المحدد على الهدف المحدد، سيقوم المتصفح باستدعاء المعالج. عندما يتم استدعاء معالجات الأحداث على كائن ما، نقول أحيانًا أن المتصفح "أثار" أو "ألقى" الحدث.
كائن الحدث هو كائن مرتبط به حدث معينوتحتوي على معلومات حول هذا الحدث. يتم تمرير كائنات الأحداث إلى وظيفة معالج الأحداث كوسيطة (باستثناء IE8 والإصدارات السابقة، حيث يكون كائن الحدث متاحًا فقط كمتغير حدث عام). كافة كائنات الحدث لها الخاصية يكتب، الذي يحدد نوع الحدث والممتلكات هدف، تحديد الغرض من الحدث.
لكل نوع حدث في كائن ذو صلةيتم تعريف الحدث من خلال مجموعة من الخصائص. على سبيل المثال، يتضمن الكائن المرتبط بأحداث الماوس إحداثيات مؤشر الماوس، ويحتوي الكائن المرتبط بأحداث لوحة المفاتيح على معلومات حول المفتاح الذي تم الضغط عليه ومفاتيح التعديل التي تم الضغط عليها. بالنسبة للعديد من أنواع الأحداث، يتم تحديد الخصائص القياسية فقط مثل النوع والهدف ولا يتم تمرير أي خصائص إضافية. معلومات مفيدة. بالنسبة لهذه الأنواع من الأحداث، يكون مجرد وقوع الحدث مهمًا ولا توجد معلومات أخرى ذات صلة.
نشر الحدث هو العملية التي يحدد المتصفح من خلالها الكائنات التي سيتم استدعاء معالجات الأحداث عليها. في حالة الأحداث المخصصة لكائن واحد (مثل حدث "تحميل" لكائن Window)، ليست هناك حاجة لنشرها. ومع ذلك، عند وقوع حدث على عنصر مستند، فإنه ينتشر أو "يحدث فقاعات" أعلى شجرة المستند.
من خلال تعيين موضع العنصر أو الخاصية الثابتة، نحصل على نفس نتيجة تعيين الموضع: المطلق . ولكن هذا أيضًا يمنع العنصر من التمرير مع بقية المستند. ونتيجة لذلك، سيتم تثبيت مؤشر التقدم بشكل ثابت في الزاوية العليا. يوجد بداخله عنصر آخر يتغير حجمه وفقًا للتقدم الحالي.
نستخدم % بدلاً من px كوحدة قياس عند ضبط العرض، بحيث تتغير أبعاد العنصر بشكل متناسب مع حجم شريط التقدم.
يحتوي المتغير العام insideHeight على ارتفاع النافذة، والذي يجب أن نطرحه من إجمالي ارتفاع المستند القابل للتمرير المتاح. لا يمكنك التمرير لأسفل النافذة عندما تصل إلى أسفل المستند. مع ارتفاع الارتفاع الداخلي، يمكن أيضًا استخدام العرض الداخلي. يؤدي قسمة pageYOffset (موضع مربع التمرير الحالي) على الحد الأقصى لموضع التمرير المسموح به والضرب في 100 إلى الحصول على النسبة المئوية لشريط التقدم.
استدعاء PreventDefault في حدث تمرير JavaScript لا يمنع التمرير. يتم استدعاء معالج الحدث فقط بعد حدوث التمرير.
أحداث التركيز الإدخالعندما يكون لعنصر ما تركيز إدخال، يطلق المتصفح حدث "التركيز" عليه. عند إزالة تركيز الإدخال، يتم إطلاق الحدث "blur".
هذين الحدثين لا ينتشران. لا يتم إخطار معالج العنصر الأصلي عندما يكون العنصر الفرعي لديه تركيز الإدخال.
يعرض المثال التالي تلميح أداة لحقل النص الذي يركز حاليًا على الإدخال:
اسم:
عمر:
var help = document.querySelector("#help"); حقول فار = document.querySelectorAll("input"); ل (فار ط = 0؛ ط< fields.length; i++) { fields[i].addEventListener("focus", function(event) { var text = event.target.getAttribute("data-help"); help.textContent = text; }); fields[i].addEventListener("blur", function(event) { help.textContent = ""; }); }يتلقى كائن window الأحداث "التركيز" و"التمويه" عندما ينتقل المستخدم إلى علامة التبويب أو يغادرها، وهي نافذة المتصفح التي يتم عرض المستند فيها.
حدث التحميلعند انتهاء تحميل الصفحة، يتم رفع حدث JavaScript "تحميل" لنص المستند وكائنات النافذة. يتم استخدامه لجدولة تهيئة الإجراءات التي تتطلب تحميل المستند بأكمله. لا تنس أنه يتم إطلاق المحتوى فورًا عند مواجهة هذه العلامة. في بعض الأحيان يكون الوقت مبكرًا جدًا. على سبيل المثال، عندما يحتاج البرنامج النصي إلى القيام بشيء ما مع أجزاء من المستند التي يتم تحميلها بعد ملف .
وعلامات البرنامج النصي التي تقوم بتحميل الملفات الخارجية تحتوي أيضًا على حدث "تحميل". يشير إلى أنه تم تنزيل الملف المرتبط بهم. مثل أحداث تركيز الإدخال، لا يتم نشر أحداث التحميل.
عندما نغلق صفحة أو ننتقل إلى صفحة أخرى (على سبيل المثال، عن طريق النقر على رابط)، يتم إطلاق الحدث "beforeunload". يتم استخدامه لمنع المستخدم من فقدان ما كان يعمل عليه عن طريق الخطأ بعد إغلاق المستند.
لا يتم منع إلغاء تحميل الصفحة باستخدام طريقة منع التحميل الافتراضي. بدلاً من ذلك، يتم إرجاع سلسلة من المعالج. يتم استخدامه في مربع حوار يسأل المستخدم عما إذا كان يريد البقاء في الصفحة أو تركها. تضمن هذه الآلية حصول المستخدم على فرصة مغادرة الصفحة، حتى في حالة تشغيل برنامج نصي ضار، والغرض منه هو إبقاء الزائر في الصفحة.
تسلسل تنفيذ البرنامج النصيهناك عوامل مختلفة يمكن أن تؤدي إلى تنفيذ البرنامج النصي: قراءة العلامة، حدوث حدث ما. تحدد طريقة requestAnimationFrame استدعاء دالة قبل إعادة بناء الصفحة التالية. هذه طريقة أخرى يمكن من خلالها تشغيل البرامج النصية.
حدد JavaScript الأحداث ويمكن لجميع الأحداث الأخرى إطلاقها في أي وقت، ولكن لن يتم إطلاق نصين في نفس الوقت في نفس المستند. إذا كان البرنامج النصي قيد التشغيل بالفعل، فسيتعين على معالجات الأحداث ومقتطفات التعليمات البرمجية المجدولة بواسطة برنامج نصي آخر انتظار دورها. هذا هو سبب تجميد المستند عند تشغيل البرنامج النصي لفترة طويلة. لا يستجيب المتصفح للنقرات والأحداث الأخرى لأنه لا يمكنه تشغيل معالجات الأحداث حتى ينتهي تشغيل البرنامج النصي الحالي.
تسمح لك بعض بيئات البرمجة بإنشاء عدة سلاسل تنفيذ يتم تشغيلها في وقت واحد. من خلال توفير القدرة على أداء مهام متعددة في وقت واحد، يمكنك زيادة سرعة تنفيذ البرنامج. ولكن عندما يكون لدينا إجراءات متعددة تؤثر على نفس أجزاء النظام في نفس الوقت، يصبح من الصعب على البرنامج تنفيذها.
إذا كنا بحاجة إلى تشغيل العمليات في الخلفية دون تجميد الصفحة، فإن المتصفحات تزودنا بشيء يسمى عمال الويب. وهو عبارة عن صندوق حماية جافا سكريبت يعمل على المستند جنبًا إلى جنب مع البرنامج الرئيسي ولا يمكنه التواصل معه إلا عن طريق إرسال واستقبال الرسائل.
لنفترض أنه في ملف يسمى code/squareworker.js لدينا الكود التالي:
addEventListener("message", function(event) ( postMessage(event.data * events.data); ));
تخيل أن الرقم الذي تقوم بتربيعه كبير جدًا، وطويل لحسابه، وتحتاج إلى إجراء الحساب على مؤشر ترابط في الخلفية. يقوم هذا الكود بتشغيل العاملين على الويب، ويرسل لهم بعض الرسائل ويطبع الردود:
var SquareWorker = new Worker("code/squareworker.js"); SquareWorker.addEventListener("message", function(event) ( console.log("استجاب العامل:", events.data); )); SquareWorker.postMessage(10); SquareWorker.postMessage(24);
تقوم وظيفة postMessage بإرسال رسالة تقوم بتشغيل حدث الرسالة على جهاز الاستقبال. يرسل البرنامج النصي الذي أنشأ عمال الويب الرسائل ويستقبلها من خلال كائن العامل. باستخدام هذا الكائن، تتفاعل البيئة مع البرنامج النصي الذي أنشأه، وترسل المعلومات وتستمع إليها بشكل عام مع البرنامج النصي الأصلي.
ضبط الموقتاتتشبه وظيفة setTimeout وظيفة requestAnimationFrame. فإنه يستدعي وظيفة أخرى سيتم استدعاؤها لاحقا. ولكن بدلاً من استدعاء الوظيفة في المرة التالية التي يتم فيها عرض الصفحة، فإنها تنتظر عددًا معينًا من المللي ثانية. في هذا المثال لحدث JavaScript، تتحول خلفية الصفحة من اللون الأزرق إلى الأصفر بعد ثانيتين:
document.body.style.background = "أزرق"؛ setTimeout(function() ( document.body.style.background = "yellow"; ), 2000);
في بعض الأحيان نحتاج إلى إلغاء وظيفة خططنا لها. يتم ذلك عن طريق تخزين القيمة المرجعة لـ setTimeout واستدعاء ClearTimeout عليها:
var BombTimer = setTimeout(function() ( console.log("BOOM!"); ), 500); إذا (الرياضيات العشوائية ()< 0.5) { // 50% chance console.log("Defused."); clearTimeout(bombTimer); }
تعمل وظيفة CancelAnimationFrame بنفس وظيفة ClearTimeout . يتم استدعاؤه بواسطة القيمة التي يتم إرجاعها بواسطة requestAnimationFrame لإلغاء الإطار (إذا لم يتم استدعاؤه بالفعل).
يتم استخدام مجموعة مماثلة من الوظائف، setInterval وclearInterval لتعيين مؤقت يجب أن يكرر الإجراء كل X مللي ثانية:
فار القراد = 0؛ var Clock = setInterval(function() ( console.log("tick", Ticks++); if (ticks == 10) ( ClearInterval(clock); console.log("stop."); ) ), 200);
ينفصليمكن إطلاق بعض أنواع الأحداث عدة مرات خلال فترة زمنية قصيرة (مثل حدث "تحريك الماوس" وحدث تمرير جافا سكريبت). عند التعامل مع مثل هذه الأحداث، يجب عليك توخي الحذر حتى لا يستغرق الأمر وقتًا طويلاً، وإلا سيستغرق المعالج وقتًا طويلاً لتنفيذ الإجراء بحيث يصبح التفاعل مع المستند بطيئًا ومتقطعًا.
إذا كنت بحاجة إلى القيام بشيء غير قياسي في مثل هذا المعالج، فيمكنك استخدام setTimeout للتأكد من أن الأمر لا يستغرق وقتًا طويلاً. يُشار إلى هذا عادةً باسم تقسيم الأحداث. هناك عدة طرق مختلفة للسحق.
في المثال الأول، نريد أن نفعل شيئًا ما أثناء قيام المستخدم بالكتابة. لكننا لا نريد أن نفعل ذلك بعد كل حدث ضغطة مفتاح. عندما يكتب المستخدم بسرعة، عليك الانتظار حتى يكون هناك توقف مؤقت. بدلاً من تنفيذ الإجراء فورًا في معالج الحدث، قمنا بتعيين تأخير. نقوم أيضًا بمسح التأخير السابق (إن وجد). إذا وقعت الأحداث على فترات زمنية قصيرة (أقل من التأخير الذي حددناه)، فسيتم إلغاء التأخير من الحدث السابق:
اكتب شيئًا هنا... var textarea = document.querySelector("textarea"); مهلة فار؛ textarea.addEventListener("keydown", function() ( ClearTimeout(timeout); timeout = setTimeout(function() ( console.log("لقد توقفت عن الكتابة."); ), 500); ));
لن يكون لتمرير قيمة غير محددة لـ ClearTimeout أو استدعائها عند تأخير قيد التشغيل بالفعل أي تأثير. لم يعد علينا أن نكون حذرين بشأن متى نسميها، نحن فقط نفعل ذلك لكل حدث.
يمكنك استخدام برنامج نصي مختلف إذا كنت بحاجة إلى فصل الإجابات خلال فترة زمنية قصيرة. لكن في الوقت نفسه، ينبغي إطلاقها خلال سلسلة من الأحداث، وليس بعدها مباشرة. على سبيل المثال، يمكنك إرسال إحداثيات الماوس الحالية استجابة لأحداث mousemove (أحداث الماوس JavaScript)، ولكن كل 250 مللي ثانية فقط:
دالة DisplayCoords(event) ( document.body.textContent = "الماوس عند النقطة " +event.pageX + ", " + events.pageY; ) var مجدولة = false, lastEvent; addEventListener("mousemove", function(event) ( lastEvent = events; if (!scheduled) ( مجدولة = صحيح; setTimeout(function() ( مجدولة = false; DisplayCoords(lastEvent); ), 250); ) ));
خاتمةتسمح لنا معالجات الأحداث باكتشاف الأحداث التي ليس لدينا سيطرة مباشرة عليها والرد عليها. لتسجيل مثل هذا المعالج، استخدم الأسلوب addEventListener.
كل حدث له نوع محدد ("مفتاح التشغيل"، "التركيز"، وما إلى ذلك) يحدده. يتم رفع معظم الأحداث على عنصر DOM محدد ثم يتم نشرها إلى العقد الأصلية للعنصر. وهذا يسمح للمعالجات المرتبطة بهذه العناصر بمعالجتها.
عندما يتم استدعاء المعالج، يتم تمرير كائن حدث به معلومات إضافية حول الإجراء. يحتوي هذا الكائن أيضًا على طرق لإيقاف نشر الحدث (stopPropagation) أو لمنع المتصفح الافتراضي من معالجة الحدث (preventDefault).
تؤدي عمليات الضغط على المفاتيح إلى إنشاء أحداث "keydown" و"keypress" و"keyup". يؤدي النقر بالماوس إلى إنشاء أحداث "رفع الماوس" و"رفع الماوس" و"النقر". تحريك الماوس - "تحريك الماوس" و"إدخال الماوس" و"إخراج الماوس".
يمكن تعريف حدث تمرير JavaScript باستخدام حدث "التمرير"، ويمكن تعريف تغيير التركيز باستخدام "التركيز" و"التمويه". بمجرد الانتهاء من تحميل المستند، يُطلق الحدث "load" للنافذة.
يمكن تشغيل جزء واحد فقط من برنامج JavaScript في المرة الواحدة. يجب أن تنتظر معالجات الأحداث والبرامج النصية المجدولة الأخرى حتى تنتهي البرامج النصية الأخرى في قائمة الانتظار من التنفيذ.
إذا كانت لديك صورة لقطتك المفضلة Murzik منشورة على موقع الويب الخاص بك، ولكنك لا تريد أن يقوم أي شخص بنسخها أو حفظها على القرص الصلب، فقم بوضع مثل هذا البرنامج النصي في نص الموقع.
دعونا نلقي نظرة على أحداث JavaScript الأكثر شيوعًا والأكثر استخدامًا:
منطقة، زر، الإدخال، |
يفقد العنصر الحالي التركيز. يحدث عندما |
|
الإدخال، التحديد، منطقة النص |
تغيير قيم عناصر النموذج. يحدث بعد أن يفقد العنصر التركيز، أي. بعد حدث التشويش |
|
تقريبا كل شيء |
نقرة واحدة (يتم الضغط على زر الماوس ثم تحريره) |
|
أ، المنطقة، الزر، الإدخال، التسمية، التحديد، منطقة النص |
||
تقريبا كل شيء |
تم الضغط على زر الماوس داخل العنصر الحالي |
|
عمليا |
مؤشر الماوس خارج الحدود |
|
تقريبا كل شيء |
مؤشر الماوس فوق العنصر الحالي |
|
تقريبا كل شيء |
تم تحرير زر الماوس داخل العنصر الحالي |
|
تحريك النافذة |
||
تغيير حجم النافذة |
||
حدد النص في العنصر الحالي |
||
تقديم بيانات النموذج |
||
محاولة إغلاق نافذة المتصفح وإلغاء تحميل المستند |
لإكمال المثال التالي، نحتاج إلى مفهوم جديد - حدث.
في حالتنا، الحدث هو رد فعل البرنامج على إجراء المستخدم (النقر بالماوس على زر، أو تقليص نافذة المتصفح بالماوس، أو إدخال نص من لوحة المفاتيح، وما إلى ذلك). باستخدام البرنامج، لدينا الفرصة للرد على أي إجراءات المستخدم.
لنفكر في أحد الأحداث الأكثر شيوعًا - التحميل - والذي يحدث عند تحميل مستند (عندما يتسبب المستخدم، من خلال أفعاله، في تحميل صفحة الويب).
دعونا نلقي نظرة على مثال لاستخدام حدث تحميل جافا سكريبت لتغيير عرض العنصر وارتفاعه.
مثال: أضف صورة إلى الصفحة، وباستخدام جافا سكريبت، عند حدوث حدث تحميل الصفحة، اجعل عرض الصورة مطابقًا لعرض نافذة المتصفح
الدالة resizeImg() ( var myImg= document.getElementById ("img1" ) ; myImg.style .width = document.body .clientWidth ; ) ... |
الدالة resizeImg())( var myImg=document.getElementById("img1"); myImg.style.width=document.body.clientWidth; ) ...
في المثال، تحدث الإجراءات الرئيسية في الدالة resizeImg():
المهمة Js8_4. ضع عدة صور (علامة img) في كود html. باستخدام طريقة التغيير:
- الحجم (خصائص العرض والارتفاع) لجميع صور الصفحة
- حجم الحدود (خاصية الحدود) لجميع الصور.
أكمل الكود:
var allImg=document...; // احصل على مجموعة من الصور لـ (var i=0; i< allImg.length; i++){ allImg[i].....; // меняем свойство width ...; // меняем свойство height ...; // меняем border }
حدث JavaScript onclick وثلاث طرق للتعامل مع الأحداثيحدث حدث onClick عند النقر فوق زر الماوس مرة واحدة. معالجة الحدث، أي. يمكنك الرد عليه باستخدام برنامج نصي بثلاث طرق. دعونا ننظر إليهم:
مثال: يؤدي النقر فوق زر إلى ظهور مربع حوار يحتوي على رسالة "مرحبا!"
النصي:
في هذا المثال، نرى زرًا في كود html. يحتوي الزر على سمة onclick ( "عند النقر")، وقيمتها هي استدعاء دالة تسمى message() . هذه وظيفة مخصصة تم وصفها أعلاه في البرنامج النصي. في الوظيفة نفسها، يتم عرض مربع حوار، وهو ما يتم تحديده وفقًا للمهمة.
عادةً ما يوجد البرنامج النصي لمعالجة هذا الحدث في منطقة رأس المستند
هذه نسخة مبسطة من معالجة الأحداث، وهي مناسبة فقط للتعليمات البرمجية الصغيرة عند الحاجة إلى تنفيذ عبارة أو عبارتين. وإلا سيكون من الصعب قراءة الرمز.
سمة الزر عند النقر ( "عند النقر")، وكقيمة يتم كتابة البرنامج النصي من عوامل التشغيل تشير إلى اللغة المكتوبة بها (javascript:). في حالتنا، عامل التشغيل لعرض نافذة مشروطة بالكلمة "مرحبا!"
كود أتش تي أم أل:
النصي:
document.myForm .myButton .onclick = message; رسالة الوظيفة () (تنبيه ("مرحى!") ;) |
document.myForm.myButton.onclick = message; رسالة الوظيفة () (تنبيه ("مرحى!")؛ )
يوجد في كود html زر ذو سمة معرف، وهو ضروري للوصول إلى الزر من خلال برنامج نصي.
في البرنامج النصي، الذي يجب أن يكون موجودًا أسفل شجرة العناصر (ربما قبل إغلاق علامة النص)، يوجد استدعاء للزر (document.myForm.myButton)، والذي يتم تعيين معالج حدث onclick له بقيمة رابط الوظيفة. يمكن الوصول إلى زر من خلال سمة المعرف (document.getElementById("myButton").onclick = message;)
لا توجد أقواس بعد رسالة اسم الوظيفة. في هذه الحالة، هذا هو بالضبط إشارة إلى وظيفة، وإلا، عند استخدام الأقواس، سيتم استدعاء الوظيفة، ولن يتم تعيينها كمعالج للحدث.
هذه الطريقة لمعالجة الأحداث هي الأقرب إلى ما يحدث، على سبيل المثال، في نظام التشغيل Windows.
المهمة Js8_5. أكمل المهمة وفقًا للتعليمات:
أخضر
...خضراء البحر
... أرجواني
...أرجواني
...القوات البحرية
...الأزرق الملكي
المهمة Js8_7. إنشاء صورة التمرير
- أضف علامة إلى الكود imgمع الصورة.
- التعريف بمعالجات الأحداث على الفأرة فوق(بالهداية) و com.onmouseout(أثناء الاختطاف). افعل هذا كوظائف.
على الفأرة فوقإجراء التحميل في العلامة imgصورة أخرى.
- نعلق على معالج الحدث com.onmouseoutإجراء تحميل صورة أخرى في علامة img.