Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> JavaScript

वेनिला JavaScript से मॉडल विंडो को बंद करें जब यूजर बाहर क्लिक करे

वेनिला JavaScript के साथ मॉडल विंडो, या किसी UI एलिमेंट को बंद करना सीखें जब यूजर उसके बाहर क्लिक करता है।

मॉडल पॉपअप आमतौर पर परेशान करने वाले होते हैं, खासकर जब वे आपकी पूरी स्क्रीन घेर लेते हैं। यह विशेष रूप से परेशान करने वाला होता है जब वे वेबसाइट में प्रवेश करने के कुछ सेकंड के भीतर होते हैं। यह बेवकूफी है, और यह खराब UX डिजाइन है।

कुछ वेबसाइट्स इसे अगले स्तर पर ले जाती हैं और क्लोज मॉडल (X) बटन को इतना छोटा और अजीब तरीके से पोजिशन करती हैं कि आपके पास पहेली को हल करते हुए वास्तव में नाराज होने के लिए बस पर्याप्त समय होता है कि आप भूल जाएं कि आप पहली बार उस वेबसाइट पर क्यों गए थे।

आइए इसे ठीक करें।

HTML: एक साधारण मॉडल विंडो

अपने HTML डॉक्यूमेंट में निम्नलिखित कोड जोड़ें:

<main> 
  <div class="modal"> 
    <button class="button-close-modal">X</button> 
    <h2>Subscribe to my Newsletter</h2> 
    <p>Get access to exclusive content that only share with my email list</p> 
    <label for="email">Enter your email:</label> 
    <input type="email" id="email" name="email" /> 
  </div> 
</main>

CSS: साधारण मॉडल और बटन स्टाइलिंग

.modal { 
  padding: 2rem; 
  border: 1px solid #eee; 
  width: max-content; 
  position: fixed; 
  right: 0; 
  bottom: 0; 
  max-width: 100%; 
} 
.button-close-modal { 
  display: block; 
  font-size: 2rem; 
  font-weight: bold; 
  margin-left: auto; 
}

JavaScript: डॉक्यूमेंट पर सभी क्लिक्स का पता लगाएं

निम्नलिखित JavaScript कोड मॉडल विंडो को बंद कर देगा यदि यूजर या तो मॉडल एलिमेंट के बाहर क्लिक करता है, या X बटन पर क्लिक करता है:

document.addEventListener( 
  "click", 
  function(event) { 
    // यदि यूजर X बटन पर क्लिक करता है OR मॉडल विंडो के बाहर क्लिक करता है, तो मॉडल को closeModal() कॉल करके बंद करें 
    if ( 
      event.target.matches(".button-close-modal") || 
      !event.target.closest(".modal") 
    ) { 
      closeModal() 
    } 
  }, 
  false 
) 

function closeModal() { 
  document.querySelector(".modal").style.display = "none" 
}

यहां सभी कोड प्राप्त करें।

कोड में क्या होता है:

  • सबसे पहले, हम document ऑब्जेक्ट पर एक क्लिक इवेंट लिसनर सेट करते हैं। इसका मतलब है कि HTML डॉक्यूमेंट पर कहीं भी कोई भी क्लिक रजिस्टर होता है, और अब हम कर्ली ब्रेसेस { .. } के अंदर हर क्लिक के लिए फंक्शन्स चला सकते हैं।
  • फिर हम मॉडल विंडो को बंद करने के दो तरीके/टार्गेट सेट करते हैं, या तो बटन क्लिक के साथ या मॉडल विंडो के बाहर क्लिक के साथ।
  • if स्टेटमेंट के अंदर हम कहते हैं "यदि टार्गेट या तो बटन से मेल खाता है (matches(".button-close-modal")) या (||) टार्गेट मॉडल विंडो पर नहीं हो रहा है !event.target.closest(".modal"), तो closeModal() फंक्शन को कॉल करें।
  • जब closeModal() फंक्शन को कॉल किया जाता है, तो यह .modal क्लास सेलेक्टर को चुनता है और इसे display = 'none' के साथ छुपा देता है।

closest() मेथड किसी एलिमेंट के सबसे करीब के मैचिंग पैरेंट को ढूंढता है जिसमें एक सेलेक्टर होता है जिसे आप पास करते हैं, इस मामले में, हम एक क्लास सेलेक्टर (.modal) पास करते हैं।

matches() मेथड जांचता है कि इवेंट.टार्गेट एक विशिष्ट सेलेक्टर से मेल खाता है या नहीं, इस मामले में, यह क्लोज बटन क्लास सेलेक्टर .button-close-modal है।

  1. JavaScript में बटन क्लिक पर li एलिमेंट्स कैसे हटाएं? JavaScript में बटन क्लिक पर li एलिमेंट्स कैसे हटाएं?

    प्रत्येक <li> में बटन जोड़ें, इवेंट डेलिगेशन या व्यक्तिगत लिसनर से remove() या closest() मेथड से पैरेंट <li> हटाएं। HTML स्ट्रक्चर <ul id=subjectList> <li class=subjectName>JavaScript <button class=removeBtn>हटाएं</button></li> <li class=subjectN

  1. JavaScript में क्लास वाले बटन पर क्लिक करके अलर्ट कैसे दिखाएं? JavaScript में क्लास वाले बटन पर क्लिक करके अलर्ट कैसे दिखाएं?

    उदाहरण document.getElementsByClassName() का उपयोग करके क्लास वाले बटन पर इवेंट लगाएं। <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8> <meta name=viewport content=width=device-width, initial-scale=1.0> <title>Document</title> </head> &

  1. JavaScript में बटन क्लिक पर नाम कैसे जोड़ें और हटाएं? JavaScript में बटन क्लिक पर नाम कैसे जोड़ें और हटाएं?

    उदाहरण addEventListener() और remove() का उपयोग करके डायनामिकली नाम जोड़ें और हटाएं। { var actualName = givenName.value; if (actualName.length != 0) { var createAnHTMLList = `${actualName}Remove Name`; listOfName.innerHTML += createAnHTMLList;