[英]Close modal on click outside of the modal JS on iOS
当用户在iOS和非触摸设备上在模式窗口之外单击时,如何使此代码close
modal
?
我在这里了解有关window.onclick
和touch
设备的其他一些类似主题,但是我对JS还是比较陌生的,并且我不知道如何正确组合此功能(对于两个平台)。
var modal = document.getElementById('myModal'); var btn = document.getElementById("myBtn"); var span = document.getElementsByClassName("close")[0]; btn.onclick = function() { modal.style.display = "block"; } span.onclick = function() { modal.style.display = "none"; } var closeModal = function(event) { if (event.target == modal) { modal.style.display = "none"; } } window.addEventListener('click', closeModal); window.addEventListener('touchend', closeModal);
.modal { display: none; position: fixed; overflow: hidden; left: 0; bottom: 0; width: 100%; height: auto; background-color: black; color: white; font-size: 100%; } .close { color: white; float: right; font-size: 70%; } .close:hover, .close:focus { color: #000; text-decoration: none; }
<div id="myModal" class="modal"> <span class="close">×</span> <p>Some content here</p> </div>
将touchend
和click
事件绑定到window元素:
var modal = document.getElementById('myModal'); var btn = document.getElementById("myBtn"); var span = document.getElementsByClassName("close")[0]; var state = 'closed'; btn.onclick = function() { modal.style.display = "block"; setTimeout(function() { state = 'open'; }, 300); } span.onclick = function() { modal.style.display = "none"; } var closeModal = function(event) { var closest = event.target.closest('#myModal'); if ((null === closest || 0 < closest.length) && 'open' === state) { modal.style.display = "none"; state = 'closed'; } } window.addEventListener('click', closeModal); window.addEventListener('touchend', closeModal);
.modal { display: none; position: fixed; overflow: hidden; left: 0; bottom: 0; width: 100%; height: auto; background-color: black; color: white; font-size: 100%; } .close { color: white; float: right; font-size: 70%; } .close:hover, .close:focus { color: #000; text-decoration: none; }
<button id="myBtn">open</button> <div id="myModal" class="modal"> <span class="close">×</span> <p>Some content here</p> </div>
编辑:更新了代码段。
在该解决方案上,我添加了一个简单的状态以仅在状态为open
时运行close方法。 使用最接近的方法,如果存在等于modal
的元素,我们将搜索clicked元素的所有父元素。
仅当closest
为空或长度为0时,我们才会关闭模态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.