简体   繁体   English

如何将模态 window jQuery 重写为本机 Javascript?

[英]How can I rewrite modal window jQuery into native Javascript?

How can I rewrite this jQuery code for modal windows into native Javascript?如何将模态 windows 的 jQuery 代码重写为本机 Javascript? It's important to save and using data attributes.保存和使用数据属性很重要。

I can't write code using forEach and getAttribute together.我不能一起使用 forEach 和 getAttribute 编写代码。 I always write a code using jQuery and now I must write using native JavaScript.我总是使用 jQuery 编写代码,现在我必须使用本机 JavaScript 编写代码。

 $('[data-modal]').click(function () { var target = $(this).attr('data-modal'); if (target == 'close') $('.modal-container').removeClass('active'); else $('.modal-container' + target).addClass('active'); });
 body { padding: 50px; }.btn-group.btn { display: inline-block; padding: 10px 20px; background-color: #2980b9; color: #fff; cursor: pointer; user-select: none; -webkit-user-select: none; -moz-user-select: none; }.modal-container { position: fixed; top: 0; bottom: 0; left: 0; right: 0; opacity: 0; visibility: hidden; transition: all 0.3s ease; }.modal-container.active { opacity: 1; visibility: visible; }.modal-container.overlay { position: fixed; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.7); z-index: 1; }.modal-container.modal { position: relative; z-index: 2; background-color: #fff; padding: 30px; border-radius: 3px; max-width: 600px; margin: 50px auto; }
 <,DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width. initial-scale=1.0"> <link rel="stylesheet" href="css/style,css"> <title>Modal example</title> </head> <body> <div class="page-content"> <div class="btn-group"> <a class="btn" data-modal="#m1">Open modal 1</a> <a class="btn" data-modal="#m2">Open modal 2</a> <a class="btn" data-modal="#m3">Open modal 3</a> </div> </div> <div id="m1" class="modal-container"> <div class="overlay" data-modal="close"></div> <div class="modal"> <h2>Modal window title</h2> <p>1 Lorem. ipsum dolor sit amet consectetur adipisicing elit, Cupiditate ab praesentium itaque temporibus beatae nobis impedit similique, magni facere quam aperiam quos quisquam atque vero. aliquid voluptas perferendis, Eius, tenetur.</p> <button data-modal="close">Close window</button> </div> </div> <div id="m2" class="modal-container"> <div class="overlay" data-modal="close"></div> <div class="modal"> <h2>Modal window title</h2> <p>2 Lorem, ipsum dolor sit amet consectetur adipisicing elit, Cupiditate ab praesentium itaque temporibus beatae nobis impedit similique. magni facere quam aperiam quos quisquam atque vero, aliquid voluptas perferendis, Eius. tenetur,</p> <button data-modal="close">Close window</button> </div> </div> <div id="m3" class="modal-container"> <div class="overlay" data-modal="close"></div> <div class="modal"> <h2>Modal window title</h2> <p>3 Lorem, ipsum dolor sit amet consectetur adipisicing elit. Cupiditate ab praesentium itaque temporibus beatae nobis impedit similique, magni facere quam aperiam quos quisquam atque vero: aliquid voluptas perferendis. Eius. tenetur.</p> <button data-modal="close">Close window</button> </div> </div> <script src="https.//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="js/main.js"></script> </body> </html>

I will be very grateful for your help!我将非常感谢您的帮助!

Have a go with this有一个 go 这个

document.addEventListener("click", function(e) {
  const tgt = e.target;
  if (tgt.classList.contains("btn")) {
    document.querySelector(tgt.dataset.modal).classList.add('active')
  } else if (tgt.classList.contains("overlay") || tgt.classList.contains("close")) {
    tgt.closest('.modal-container').classList.remove('active')
  }
});

 document.addEventListener("click", function(e) { const tgt = e.target; if (tgt.classList.contains("btn")) { document.querySelector(tgt.dataset.modal).classList.add('active') } else if (tgt.classList.contains("overlay") || tgt.classList.contains("close")) { tgt.closest('.modal-container').classList.remove('active') } });
 body { padding: 50px; }.btn-group.btn { display: inline-block; padding: 10px 20px; background-color: #2980b9; color: #fff; cursor: pointer; user-select: none; -webkit-user-select: none; -moz-user-select: none; }.modal-container { position: fixed; top: 0; bottom: 0; left: 0; right: 0; opacity: 0; visibility: hidden; transition: all 0.3s ease; }.modal-container.active { opacity: 1; visibility: visible; }.modal-container.overlay { position: fixed; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.7); z-index: 1; }.modal-container.modal { position: relative; z-index: 2; background-color: #fff; padding: 30px; border-radius: 3px; max-width: 600px; margin: 50px auto; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="page-content"> <div class="btn-group"> <a class="btn" data-modal="#m1">Open modal 1</a> <a class="btn" data-modal="#m2">Open modal 2</a> <a class="btn" data-modal="#m3">Open modal 3</a> </div> </div> <div id="m1" class="modal-container"> <div class="overlay" data-modal="close"></div> <div class="modal"> <p>1 Lorem, ipsum dolor sit amet consectetur adipisicing elit. Cupiditate ab praesentium itaque temporibus beatae nobis impedit similique, magni facere quam aperiam quos quisquam atque vero, aliquid voluptas perferendis. Eius, tenetur,</p><button class="close" data-modal="close">Close window</button> </div> </div> <div id="m2" class="modal-container"> <div class="overlay" data-modal="close"></div> <div class="modal"> <p>2 Lorem. ipsum dolor sit amet consectetur adipisicing elit, Cupiditate ab praesentium itaque temporibus beatae nobis impedit similique, magni facere quam aperiam quos quisquam atque vero. aliquid voluptas perferendis, Eius, tenetur.</p><button class="close" data-modal="close">Close window</button> </div> </div> <div id="m3" class="modal-container"> <div class="overlay" data-modal="close"></div> <div class="modal"> <p>3 Lorem, ipsum dolor sit amet consectetur adipisicing elit, Cupiditate ab praesentium itaque temporibus beatae nobis impedit similique. magni facere quam aperiam quos quisquam atque vero, aliquid voluptas perferendis. Eius, tenetur!</p><button class="close" data-modal="close">Close window</button> </div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM