जावास्क्रिप्ट में एक तत्व के बाहर क्लिक का पता लगाना

JavaScript

मेनू तत्वों के बाहर क्लिक को संभालना

वेब विकास में, विशेष रूप से मेनू जैसे इंटरैक्टिव तत्वों से निपटते समय, उपयोगकर्ता इंटरैक्शन को प्रभावी ढंग से प्रबंधित करना महत्वपूर्ण है। एक सामान्य आवश्यकता यह है कि जब उपयोगकर्ता उन पर क्लिक करता है तो मेनू दिखाए जाएं और जब उपयोगकर्ता इन मेनू के बाहर कहीं भी क्लिक करता है तो उन्हें छिपा दिया जाए। यह इंटरफ़ेस को साफ़ और सहज बनाकर उपयोगकर्ता अनुभव को बढ़ाता है।

इस कार्यक्षमता को प्राप्त करने के लिए निर्दिष्ट तत्व के बाहर क्लिक का पता लगाने के लिए एक विधि की आवश्यकता होती है। इस आलेख में, हम यह पता लगाएंगे कि jQuery का उपयोग करके इस व्यवहार को कैसे कार्यान्वित किया जाए। इस सुविधा को अपनी परियोजनाओं में एकीकृत करने में आपकी सहायता के लिए हम एक विस्तृत उदाहरण और स्पष्टीकरण प्रदान करेंगे।

आज्ञा विवरण
$(document).ready() एक jQuery विधि जो यह सुनिश्चित करती है कि किसी भी कोड को निष्पादित करने से पहले DOM पूरी तरह से लोड हो गया है।
$(document).click() jQuery में दस्तावेज़ ऑब्जेक्ट पर क्लिक इवेंट के लिए एक इवेंट हैंडलर फ़ंक्शन संलग्न करता है।
closest() चयनकर्ता से मेल खाने वाले तत्व के पहले पूर्वज को खोजने के लिए jQuery विधि।
useRef() एक रिएक्ट हुक जो सीधे DOM तत्व तक पहुंचने के लिए एक परिवर्तनशील रेफ ऑब्जेक्ट लौटाता है।
useEffect() कार्यात्मक घटकों में साइड इफेक्ट करने के लिए एक रिएक्ट हुक।
addEventListener() मौजूदा ईवेंट हैंडलर को अधिलेखित किए बिना किसी ईवेंट हैंडलर को किसी तत्व से जोड़ता है।
removeEventListener() एक इवेंट हैंडलर को हटा देता है जो addEventListener() के साथ जुड़ा हुआ था।
contains() यह जाँचने के लिए DOM विधि कि क्या कोई नोड किसी दिए गए नोड का वंशज है।

क्लिक आउटसाइड डिटेक्शन के कार्यान्वयन को समझना

प्रदान की गई स्क्रिप्ट jQuery, वेनिला जावास्क्रिप्ट और रिएक्ट का उपयोग करके एक निर्दिष्ट तत्व के बाहर क्लिक का पता लगाने और उन्हें संभालने के विभिन्न तरीके प्रदान करती है। jQuery उदाहरण में, स्क्रिप्ट पहले यह सुनिश्चित करती है कि DOM पूरी तरह से लोड हो गया है तरीका। फिर पूरे दस्तावेज़ में एक इवेंट हैंडलर संलग्न करने के लिए विधि का उपयोग किया जाता है। इस हैंडलर के अंदर, हम जांचते हैं कि क्लिक इवेंट का लक्ष्य बाहर है या नहीं तत्व का उपयोग कर रहा है closest() तरीका। यदि क्लिक मेनू के बाहर होता है, तो मेनू इसके साथ छिपा हुआ है . मेनू हेड पर क्लिक करने से मेनू का उपयोग करके पता चलता है तरीका।

वेनिला जावास्क्रिप्ट उदाहरण समान रूप से संचालित होता है लेकिन बिना किसी बाहरी लाइब्रेरी के। स्क्रिप्ट दस्तावेज़ में एक क्लिक इवेंट श्रोता जोड़ती है . इसके बाद यह जांचता है कि क्लिक लक्ष्य अंदर है या नहीं का उपयोग तरीका। यदि लक्ष्य अंदर नहीं है, तो डिस्प्ले प्रॉपर्टी को 'कोई नहीं' पर सेट करके मेनू छिपा दिया जाता है। मेनू हेड पर क्लिक करने से डिस्प्ले प्रॉपर्टी 'ब्लॉक' पर सेट हो जाती है, जिससे मेनू दृश्यमान हो जाता है। यह विधि सुनिश्चित करती है कि कार्यक्षमता सादे जावास्क्रिप्ट के साथ प्राप्त की जाती है, जिससे यह एक हल्का समाधान बन जाता है।

क्लिक आउटसाइड डिटेक्शन के लिए प्रतिक्रिया की खोज

रिएक्ट उदाहरण में, हम स्थिति और दुष्प्रभावों को प्रबंधित करने के लिए हुक का उपयोग करते हैं। हुक एक संदर्भ बनाता है तत्व, हमें इसे सीधे एक्सेस करने की अनुमति देता है। हुक का उपयोग क्लिक इवेंट श्रोता को जोड़ने और हटाने के लिए किया जाता है। इवेंट हैंडलर के भीतर, हम जाँचते हैं कि क्लिक मेनू के बाहर है या नहीं contains() रेफरी पर विधि. यदि हां, तो हम मेनू को छिपाने के लिए स्थिति को अपडेट करते हैं। मेनू हेड क्लिक इवेंट को मेनू दिखाने के लिए स्थिति को अपडेट करके नियंत्रित किया जाता है। यह उदाहरण दर्शाता है कि आधुनिक रिएक्ट एप्लिकेशन में क्लिक आउटसाइड डिटेक्शन को कैसे एकीकृत किया जाए।

इन विभिन्न दृष्टिकोणों का उपयोग करके, आप वह तरीका चुन सकते हैं जो आपके प्रोजेक्ट की आवश्यकताओं के लिए सबसे उपयुक्त हो। jQuery विधि सीधी है और jQuery की सरलता का लाभ उठाती है। वेनिला जावास्क्रिप्ट विधि एक हल्का, निर्भरता-मुक्त समाधान प्रदान करती है। रिएक्ट विधि दर्शाती है कि स्थिति और दुष्प्रभावों को प्रबंधित करने के लिए आधुनिक रिएक्ट हुक का उपयोग कैसे किया जाए, जो रिएक्ट अनुप्रयोगों के लिए एक मजबूत समाधान पेश करता है। प्रत्येक दृष्टिकोण यह सुनिश्चित करता है कि निर्दिष्ट तत्वों के बाहर उपयोगकर्ता की बातचीत के आधार पर मेनू दिखाए और छिपाए जाएं, जिससे उपयोगकर्ता अनुभव में वृद्धि हो।

JQuery का उपयोग करके किसी तत्व के बाहर क्लिक का पता लगाना

jQuery कार्यान्वयन

// jQuery implementation to hide menus on outside click
$(document).ready(function() {
  $(document).click(function(event) {
    var $target = $(event.target);
    if(!$target.closest('#menuscontainer').length && 
       $('#menuscontainer').is(":visible")) {
      $('#menuscontainer').hide();
    } 
  });
  $('#menuhead').click(function() {
    $('#menuscontainer').show();
  });
});

वेनिला जावास्क्रिप्ट का उपयोग करके किसी तत्व के बाहर क्लिक को संभालना

वेनिला जावास्क्रिप्ट कार्यान्वयन

// Vanilla JavaScript implementation to hide menus on outside click
document.addEventListener('click', function(event) {
  var isClickInside = document.getElementById('menuscontainer').contains(event.target);
  if (!isClickInside) {
    document.getElementById('menuscontainer').style.display = 'none';
  }
});
document.getElementById('menuhead').addEventListener('click', function() {
  document.getElementById('menuscontainer').style.display = 'block';
});

रिएक्ट का उपयोग करके किसी तत्व के बाहर क्लिक का पता लगाना

प्रतिक्रिया कार्यान्वयन

// React implementation to hide menus on outside click
import React, { useRef, useEffect, useState } from 'react';
const MenuComponent = () => {
  const menuRef = useRef(null);
  const [isMenuVisible, setMenuVisible] = useState(false);
  useEffect(() => {
    function handleClickOutside(event) {
      if (menuRef.current && !menuRef.current.contains(event.target)) {
        setMenuVisible(false);
      }
    }
    document.addEventListener('mousedown', handleClickOutside);
    return () => {
      document.removeEventListener('mousedown', handleClickOutside);
    };
  }, [menuRef]);
  return (
    <div>
      <div id="menuhead" onClick={() => setMenuVisible(true)}>Menu Head</div>
      {isMenuVisible &&
        <div id="menuscontainer" ref={menuRef}>
          <p>Menu Content</p>
        </div>
      }
    </div>
  );
};
export default MenuComponent;

क्लिक आउटसाइड डिटेक्शन के साथ उपयोगकर्ता इंटरैक्शन को बढ़ाना

किसी वेबपेज पर उपयोगकर्ता इंटरैक्शन को बढ़ाने के लिए किसी तत्व के बाहर क्लिक का पता लगाना महत्वपूर्ण है। सहज उपयोगकर्ता अनुभव प्रदान करने के लिए इस तकनीक का उपयोग आमतौर पर ड्रॉपडाउन मेनू, मोडल डायलॉग और टूलटिप्स में किया जाता है। विचार करने के लिए एक उन्नत पहलू कई तत्वों का प्रबंधन है जिन्हें बाहरी क्लिक के आधार पर छिपाने की आवश्यकता होती है। इसमें यह सुनिश्चित करने के लिए अधिक जटिल तर्क शामिल हो सकते हैं कि सही तत्व छिपे रहें जबकि अन्य दृश्यमान रहें। इसे लागू करने के लिए सावधानीपूर्वक घटना प्रबंधन की आवश्यकता होती है और संभवतः उस स्थिति को बनाए रखने की आवश्यकता होती है कि कौन से तत्व वर्तमान में दिखाई दे रहे हैं।

एक अन्य महत्वपूर्ण विचार पहुंच है। यह सुनिश्चित करना महत्वपूर्ण है कि आपके इंटरैक्टिव तत्व विकलांग उपयोगकर्ताओं के लिए सुलभ हों। उदाहरण के लिए, आपको यह सुनिश्चित करना चाहिए कि ड्रॉपडाउन मेनू और मोडल्स को न केवल बाहर क्लिक करके बल्कि दबाकर भी बंद किया जा सकता है चाबी। इसके अतिरिक्त, फोकस को उचित रूप से प्रबंधित करना महत्वपूर्ण है ताकि कीबोर्ड नेविगेशन सहज और कार्यात्मक हो। इन सुविधाओं को लागू करने के लिए समावेशी उपयोगकर्ता अनुभव बनाने के लिए जावास्क्रिप्ट और एक्सेसिबिलिटी सर्वोत्तम प्रथाओं दोनों की अच्छी समझ की आवश्यकता होती है।

  1. मैं बाहरी क्लिक पहचान के साथ एकाधिक मेनू कैसे संभाल सकता हूं?
  2. आप प्रत्येक मेनू में एक क्लास जोड़कर और उन पर पुनरावृत्ति करके यह जांचने के लिए कई मेनू प्रबंधित कर सकते हैं कि क्लिक उनमें से किसी के बाहर हुआ है या नहीं। उपयोग प्रत्येक मेनू से क्लिक किए गए तत्व का संबंध निर्धारित करने की विधि।
  3. एस्केप कुंजी दबाए जाने पर मैं अपना मोडल कैसे बंद करूँ?
  4. के लिए एक इवेंट श्रोता जोड़ें घटना और जाँच करें कि क्या या संपत्ति 27 (एस्केप कुंजी) के बराबर है। यदि सत्य है, तो मोडल छिपाएँ।
  5. क्या मैं jQuery के बिना क्लिक आउटसाइड डिटेक्शन का उपयोग कर सकता हूँ?
  6. हां, आप ईवेंट श्रोताओं को जोड़ने और अपने तत्व के विरुद्ध ईवेंट लक्ष्य की जांच करने के लिए सादे जावास्क्रिप्ट का उपयोग कर सकते हैं। ऊपर दिए गए उदाहरण इसे वेनिला जावास्क्रिप्ट के साथ प्रदर्शित करते हैं।
  7. मैं क्लिक आउटसाइड डिटेक्शन के साथ पहुंच कैसे सुनिश्चित करूं?
  8. सुनिश्चित करें कि आपके इंटरैक्टिव तत्व माउस और कीबोर्ड दोनों से संचालित हो सकते हैं। इन तत्वों को सुलभ बनाने के लिए ARIA भूमिकाओं और गुणों का उपयोग करें, और फोकस स्थितियों को उचित रूप से प्रबंधित करें।
  9. क्या रिएक्ट में किसी तत्व के बाहर क्लिक का पता लगाना संभव है?
  10. हाँ, रिएक्ट जैसे हुक प्रदान करता है और घटक माउंट और अनमाउंट पर ईवेंट श्रोताओं को जोड़कर और हटाकर बाहरी क्लिक को संभालना।
  11. क्लिक आउटसाइड डिटेक्शन के लिए प्रदर्शन संबंधी विचार क्या हैं?
  12. दस्तावेज़ में ईवेंट श्रोताओं को जोड़ने से प्रदर्शन प्रभावित हो सकता है, विशेषकर कई तत्वों के साथ। इवेंट हैंडलर को डिबाउंस करके और आवश्यकता न होने पर श्रोताओं को हटाकर अनुकूलन करें।
  13. क्या मैं Angular या Vue जैसे फ्रेमवर्क के साथ क्लिक आउटसाइड डिटेक्शन का उपयोग कर सकता हूँ?
  14. हाँ, Angular और Vue दोनों बाहरी तत्वों पर क्लिक का पता लगाने के लिए तंत्र प्रदान करते हैं। एंगुलर निर्देशों का उपयोग करता है, जबकि Vue घटक के भीतर कस्टम निर्देशों या ईवेंट हैंडलिंग का उपयोग करता है।
  15. मैं क्लिक आउटसाइड डिटेक्शन कार्यक्षमता का परीक्षण कैसे करूँ?
  16. रिएक्ट के लिए जेस्ट और एंजाइम, या एंगुलर के लिए जैस्मीन और कर्मा जैसे स्वचालित परीक्षण टूल का उपयोग करें। क्लिक इवेंट का अनुकरण करें और सत्यापित करें कि तत्व अपेक्षा के अनुरूप व्यवहार करते हैं।
  17. क्या मैं गतिशील रूप से जोड़े गए तत्वों पर क्लिक आउटसाइड डिटेक्शन लागू कर सकता हूँ?
  18. हां, सुनिश्चित करें कि आपका ईवेंट श्रोता गतिशील रूप से जोड़े गए तत्वों को संभालने के लिए सेट है। प्रारंभिक लोड के बाद जोड़े गए तत्वों के लिए ईवेंट प्रबंधित करने के लिए ईवेंट डेलिगेशन का उपयोग करें।

क्लिक आउटसाइड डिटेक्शन के लिए तकनीकों का समापन

आपके वेब एप्लिकेशन में क्लिक आउटसाइड डिटेक्शन को शामिल करने से उपयोगकर्ता इंटरैक्शन में काफी सुधार होता है। चाहे jQuery, वेनिला जावास्क्रिप्ट, या रिएक्ट का उपयोग कर रहे हों, प्रदान किए गए समाधान गतिशील तत्वों को कुशलतापूर्वक प्रबंधित करने में मदद करते हैं। इन तरीकों को समझने और लागू करने से, आप सुनिश्चित करते हैं कि मेनू और मॉडल पूर्वानुमानित व्यवहार करते हैं, जिससे समग्र उपयोगकर्ता अनुभव में वृद्धि होती है। यह दृष्टिकोण न केवल इंटरफ़ेस को सुव्यवस्थित करता है बल्कि पहुंच को भी बनाए रखता है, यह सुनिश्चित करते हुए कि सभी उपयोगकर्ता आपके वेब एप्लिकेशन के साथ निर्बाध रूप से बातचीत कर सकते हैं।