DEV Community

Cover image for Event Propagation - Bubbling vs Capturing Explained with Examples
RSM Academy BD
RSM Academy BD

Posted on

Event Propagation - Bubbling vs Capturing Explained with Examples

Event Propagation - Bubbling vs Capturing সম্পর্কে বিস্তাতিত আলোচনা করতে পারবেন?

ইভেন্ট প্রোপাগেশন: বুবলিং বনাম ক্যাপচারিং

image.png

ইভেন্ট প্রোপাগেশন হল একটি প্রক্রিয়া যেখানে একটি ইভেন্ট (যেমন একটি ক্লিক) DOM (Document Object Model) এর উপাদানগুলির মধ্যে ছড়িয়ে পড়ে। এটি মূলত দুইভাবে কাজ করে: বুবলিং (bubbling) এবং ক্যাপচারিং (capturing)। এই দুটি প্রক্রিয়া DOM ইভেন্ট হ্যান্ডলিং এর অত্যন্ত গুরুত্বপূর্ণ অংশ।

ইভেন্ট প্রোপাগেশন হলো একটি প্রক্রিয়া যেখানে একটি ইভেন্ট DOM ট্রি-তে parent থেকে child, child থেকে parent ইত্যাদি element-এর মধ্যে ছড়িয়ে পড়ে। ইভেন্ট প্রোপাগেশন দুইভাবে কাজ করতে পারে: Event Bubbling এবং Event Capturing। ইভেন্ট প্রোপাগেশনের এই দুটি ধাপ DOM-এ ইভেন্টগুলি কিভাবে propagate হবে, তা নির্ধারণ করে।

১. ইভেন্ট বুবলিং (Event Bubbling)

ইভেন্ট বুবলিং হল প্রক্রিয়া যেখানে ইভেন্টটি প্রথমে ইনিশিয়েট (শুরু) হয় সবচেয়ে নির্দিষ্ট (innermost) উপাদান থেকে এবং ধীরে ধীরে উপরের স্তরের উপাদানগুলিতে ছড়িয়ে পড়ে। অর্থাৎ, ইভেন্টটি প্রথমে তার নিজস্ব টার্গেটে প্রভাবিত হয় এবং তারপরে তার প্যারেন্ট, তার প্যারেন্টের প্যারেন্ট, ইত্যাদি উপাদানগুলিতে প্রভাবিত হতে থাকে যতক্ষণ না পুরো DOM এর টপ-লেভেল পর্যন্ত পৌঁছায়।

উদাহরণস্বরূপ:

<div id="parent">
    <div id="child">
        <button id="button">Click Me!</button>
    </div>
</div>

Enter fullscreen mode Exit fullscreen mode

এই উদাহরণে, যদি আপনি button উপাদানে ক্লিক করেন, তাহলে ইভেন্টটি প্রথমে button এ প্রভাবিত হবে, তারপর child এ, এবং শেষ পর্যন্ত parent উপাদানে প্রভাবিত হবে। এটি বুবলিং।

২. ইভেন্ট ক্যাপচারিং (Event Capturing)

ইভেন্ট ক্যাপচারিং হল প্রক্রিয়া যেখানে ইভেন্টটি প্রথমে DOM এর উপরের স্তরের উপাদান থেকে শুরু হয় এবং ধীরে ধীরে নিচের স্তরের (innermost) উপাদানের দিকে যায়। অর্থাৎ, ইভেন্টটি প্রথমে তার সর্বোচ্চ প্যারেন্টে প্রভাবিত হয় এবং ধীরে ধীরে তার নির্দিষ্ট টার্গেটের দিকে আসে।

উদাহরণস্বরূপ:

<div id="parent">
    <div id="child">
        <button id="button">Click Me!</button>
    </div>
</div>

Enter fullscreen mode Exit fullscreen mode

এই উদাহরণে, যদি আপনি button এ ক্লিক করেন এবং ক্যাপচারিং ফেজে ইভেন্টটি হ্যান্ডেল করা হয়, তাহলে ইভেন্টটি প্রথমে parent এ প্রভাবিত হবে, তারপর child এ, এবং শেষে button এ।

৩. ইভেন্ট প্রোপাগেশনের ধাপসমূহ

ইভেন্ট প্রোপাগেশন সাধারণত তিনটি ধাপে কাজ করে:

  • ক্যাপচারিং ফেজ (Capturing Phase): ইভেন্টটি ডকুমেন্টের রুট থেকে শুরু হয় এবং টার্গেট এলিমেন্টের দিকে যায়।
  • টার্গেট ফেজ (Target Phase): ইভেন্টটি তার টার্গেট উপাদানে পৌঁছে এবং সেখানে প্রভাবিত হয়।
  • বুবলিং ফেজ (Bubbling Phase): ইভেন্টটি তার টার্গেট থেকে শুরু করে আবার উপরের দিকে ওঠে, DOM এর রুট পর্যন্ত পৌঁছায়।

৪. ইভেন্ট হ্যান্ডলিং কিভাবে কাজ করে

ইভেন্ট হ্যান্ডলার যোগ করার সময়, আপনি নির্দিষ্ট করতে পারেন যে এটি ক্যাপচারিং ফেজে কাজ করবে কিনা। আপনি যদি addEventListener মেথডের তৃতীয় প্যারামিটার হিসাবে true পাস করেন, তবে ইভেন্টটি ক্যাপচারিং ফেজে হ্যান্ডেল হবে। অন্যথায়, এটি বুবলিং ফেজে হ্যান্ডেল হবে।

document.getElementById("parent").addEventListener("click", function() {
    console.log("Parent clicked");
}, true); // Capturing Phase

document.getElementById("child").addEventListener("click", function() {
    console.log("Child clicked");
}, false); // Bubbling Phase

document.getElementById("button").addEventListener("click", function() {
    console.log("Button clicked");
}); // Default: Bubbling Phase

Enter fullscreen mode Exit fullscreen mode

৫. ইভেন্ট প্রোপাগেশন বন্ধ করা

কিছু পরিস্থিতিতে, আপনি হয়তো চান যে ইভেন্টটি তার বর্তমান ফেজ থেকে আর উপরের বা নিচের দিকে না যায়। আপনি stopPropagation() মেথড ব্যবহার করে এই প্রক্রিয়াটি বন্ধ করতে পারেন। উদাহরণস্বরূপ:

document.getElementById("button").addEventListener("click", function(event) {
    event.stopPropagation(); // Prevents further propagation
    console.log("Button clicked, propagation stopped");
});

Enter fullscreen mode Exit fullscreen mode

৬. প্রয়োজনীয়তা ও ব্যবহার

  • ইভেন্ট বুবলিং বেশিরভাগ ক্ষেত্রে ডিফল্ট ব্যবহৃত হয় এবং সাধারণ ইন্টারঅ্যাকশনগুলির জন্য উপযোগী।
  • ইভেন্ট ক্যাপচারিং কিছু বিশেষ পরিস্থিতিতে কাজে আসে, যেমন আপনি যদি চান যে একটি প্যারেন্ট এলিমেন্টের ইভেন্ট আগে হ্যান্ডেল হোক।

৭. Event Bubbling বনাম Event Capturing: পার্থক্য

বৈশিষ্ট্য Event Bubbling Event Capturing
প্রোপাগেশনের দিক Target element থেকে উপরের দিকে, অর্থাৎ parent elements-এর দিকে Root element থেকে নিচের দিকে, অর্থাৎ child elements-এর দিকে
Default Behavior Default behavior ইভেন্ট bubbling; ইভেন্ট ক্যাপচারিংের জন্য আলাদাভাবে নির্দিষ্ট করতে হয় ইভেন্ট capturing হলো non-default behavior, এবং এটি ব্যবহার করার জন্য addEventListener-এর তৃতীয় প্যারামিটার true করতে হয়
ইভেন্টের প্রভাব ইভেন্ট টার্গেট element থেকে শুরু হয় এবং এরপর parent elements পর্যন্ত পৌঁছে ইভেন্ট root থেকে শুরু হয় এবং target element পর্যন্ত পৌঁছে
ব্যবহারিক উদাহরণ সাধারণত অনেক ইভেন্ট bubbling এর মাধ্যমে হ্যান্ডল করা হয় কিছু বিশেষ ক্ষেত্রে capturing প্রয়োজন হতে পারে, যেমন ডিফল্ট bubbling behavior কে bypass করার জন্য

image.png

উপসংহার

ইভেন্ট প্রোপাগেশন হলো একটি গুরুত্বপূর্ণ ধারণা যা DOM ইভেন্ট হ্যান্ডলিংয়ের ক্ষেত্রে প্রায়ই ব্যবহার করা হয়। ইভেন্ট bubbling এবং capturing এই প্রোপাগেশনের দুইটি ধাপ, যেখানে ইভেন্টটি DOM ট্রি-তে কিভাবে ছড়াবে তা নির্ধারণ করা হয়। ডিফল্টভাবে ইভেন্ট bubbling হয়, তবে আপনি প্রয়োজন অনুযায়ী capturing ব্যবহার করতে পারেন। ইভেন্ট propagation থামানোর জন্য stopPropagation() ব্যবহার করা হয়, এবং এটি আপনার ইভেন্ট হ্যান্ডলিংয়ের সময় অপ্রত্যাশিত প্রভাব রোধ করতে সাহায্য করতে পারে।

এই প্রক্রিয়াগুলি আপনাকে জটিল ইন্টারফেসের ইভেন্ট ম্যানেজমেন্টে উন্নত নিয়ন্ত্রণ দেয় এবং কোডকে পরিষ্কার ও সুসংগঠিত রাখতে সহায়তা করে।

Top comments (0)