بهینه سازی رسیدگی به رویداد JavaScript: حباب و هیئت

رویدادهای JavaScript در همه جا در وب است. با کلیک بر روی یک دکمه ، تایپ کردن در جعبه متن یا حتی حرکت ماوس شما یک رویداد را ایجاد می کند. اما آیا تا به حال فکر کرده اید که چگونه این رویدادها از طریق DOM حرکت می کنند؟ اینجاست که حباب رویداد و نمایندگی رویداد به مرحله اجرا در می آیند.
بیایید آن را به روشی تجزیه کنیم که در واقع منطقی باشد!
در JavaScript چه حادثه ای دارد؟
قبل از پرش به حباب و هیئت ، بیایید به سرعت تعریف کنیم که یک رویداد چیست. یک رویداد در واقع عملی است که در مرورگر اتفاق می افتد ، مانند یک کلیک یا یک مطبوعات کلید. شما می توانید با استفاده از JavaScript به این رویدادها گوش فرا دهید و تصمیم بگیرید که هنگام وقوع چه اتفاقی می افتد.
در اینجا یک مثال ساده برای دستیابی به یک دکمه کلیک کنید:
const button = document.getElementById("myButton");
button.addEventListener("click", () => {
alert("You clicked the button!");
});
حباب رویداد چیست؟
حباب رویداد زمانی است که یک رویداد از عنصر هدف شروع می شود و از طریق اجداد خود حرکت می کند. مانند حباب در آب به آن فکر کنید – پس از ایجاد آنها ، به بالا قیام می کنند.
چگونه حباب رویداد کار می کند
این ساختار HTML را تصور کنید:
حال ، بیایید شنوندگان رویداد را به هر دو والدین اضافه کنیم
:
document.getElementById("parent").addEventListener("click", () => {
console.log("Parent clicked");
});
document.getElementById("child").addEventListener("click", () => {
console.log("Child clicked");
});
وقتی روی دکمه کلیک می کنید چه اتفاقی می افتد؟
وقتی روی دکمه کلیک می کنید ، خواهید دید:
Child clicked
Parent clicked
چرا؟ زیرا این رویداد ابتدا روی دکمه شلیک می شود و سپس به والدین حباب می کند.
متوقف کردن حباب رویداد
گاهی اوقات ، شما نمی خواهید یک رویداد حباب شود. می توانید با استفاده از آن متوقف شوید event.stopPropagation()
document.getElementById("child").addEventListener("click", (event) => {
console.log("Child clicked");
event.stopPropagation();
});
اکنون ، کلیک روی دکمه فقط وارد می شود Child clicked
و رویداد والدین را تحریک نمی کند.
نمایندگی رویداد چیست؟
به جای اضافه کردن شنوندگان رویداد به چندین عنصر ، می توانید با قرار دادن شنونده بر روی عنصر والدین و بررسی اینکه کودک روی آن کلیک کرده است ، از نمایندگی رویداد استفاده کنید.
چرا از نمایندگی رویداد استفاده می کنیم؟
- لازم نیست شنوندگان رویداد را به هر عنصر کودک اختصاص دهید.
- روی عناصر اضافه شده پویا کار می کند.
- این عملکرد را هنگام برخورد با بسیاری از عناصر بهبود می بخشد.
مثال: کلیک بر روی موارد لیست
این HTML را در نظر بگیرید:
به جای اضافه کردن شنونده رویداد به هر مورد لیست ، ما یکی را به والدین اضافه می کنیم and check which item was clicked:
document.getElementById("listContainer").addEventListener("click", (event) => {
if (event.target.classList.contains("list-item")) {
console.log("Clicked on: " + event.target.textContent);
}
});
حال ، بیایید موارد لیست جدید را به صورت پویا اضافه کنیم:
document.getElementById("addItem").addEventListener("click", () => {
const newItem = document.createElement("li");
newItem.classList.add("list-item");
newItem.textContent = "New Item";
document.getElementById("listContainer").appendChild(newItem);
});
حتی اگر موارد لیست جدید بعداً اضافه شود ، آنها هنوز هم رویداد کلیک را تحریک می کنند. این قدرت هیئت رویداد است!
پیچیدن
درک حباب رویداد به شما کمک می کند تا بدانید که چگونه رویدادها از DOM عبور می کنند ، و نمایندگی رویداد به شما کمک می کند تا رویدادها را به طور کارآمد مدیریت کنید. آنها با هم ، کد جاوا اسکریپت شما را تمیز تر و بهینه تر می کنند.