如何创建一个自定义的模式弹出窗口-以及如何在它的外部点击关闭它
How to create a custom modal popup - and how to close it clicking outside of it
<a href="javascript:void(0)" onclick = "document.getElementById('light3').style.display='block';document.getElementById('fade').style.display='block'"><button type="button" name="" value="" id="readmorelink3">+<span class="rmore">Read More</span></button></a>
我使用上面的DOM经典onClick
将div简单地显示为一个简单的弹出窗口。我已经在div中创建了一个关闭按钮,但当用户单击body
或任何不是打开div的地方时,我也希望打开div hide
我的简单叠加(1/3(
<!-- read more overlays 1 -->
<div id="light" class="white_content">
<a class="close" href="javascript:void(0)" onclick = "document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'" class="textright" style="color: #DDD !important; float:right;">CLOSE X</a>
<h4>[Hey+]</h4>
<h3>Demo</h3>
<h3>SUP</h3>
<span> 2.5 fl. oz.</span><br>
<br>
<p>
Cool content, about cool things.
</p>
</div>
<!-- // read more overlays 1-->
我试过这个家伙:
$(document).click(function() {
$('#mydiv').fadeOut(300);
});
我搞砸了这个家伙:
if($('#mydiv').is(":not(:visible)") ){
//如果可见,反之亦然
也尝试过。
// To prevent hide #menu when click on #main
$('#mydiv').click(function (e) {
e.stopPropagation();
});
// Click outsite of #menu
$('html').click(function () {
$('#mydiv').hide();
});
意识到我应该用简单的jQuery而不是内联来完成这项工作;但我不想重做所有的东西,所以寻求DOM/JavaScript解决方案。只需关闭打开或显示:当它们被显示时,通过点击元素外部或body标记来阻止divs>
EG:DIV覆盖显示>点击元素外部,它关闭。我在BODY标签上添加了ONCLICK-CLOSE按钮,但它完全杀死了POPUP,添加了一个包装,没有雪茄。
看到这个答案:在外部(而不是内部(单击时关闭/隐藏元素
- 使用EventTarget.addEventListener((将所需的事件侦听器(如
"click"
(分配给document
或window
- 将Event.target与Element.closest((组合用作否定
!
-,以检查Event.targets(启动事件的元素(-其自身或最近的祖先是否具有特定的选择器 - 要控制元素可见性,请创建一个进行必要样式设置的CSS类,并使用element.classlist添加、删除或切换该类(根据需要(
模式示例:
// DOM utility functions:
const el = (sel, par) => (par ||document).querySelector(sel);
const els = (sel, par) => (par ||document).querySelectorAll(sel);
// Task: modal:
const toggleModal = (evt) => {
const sel = evt.currentTarget.dataset.modal;
if (!sel) evt.currentTarget.closest(".Modal").classList.remove("is-open");
el(sel).classList.add("is-open")
};
els("[data-modal]").forEach(elModalButton => {
elModalButton.addEventListener("click", toggleModal);
});
addEventListener("click", (evt) => {
// if click on button or inside modal — do nothing
if (evt.target.closest("[data-modal]") || evt.target.closest('.Modal')) return;
// else — close any open modal:
els(".Modal.is-open").forEach(elModalOpen => {
elModalOpen.classList.remove("is-open");
});
});
/* MODAL */
.Modal {
position: fixed;
z-index: 99999;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
min-width: 200px;
padding: 2em;
background: gold;
/*Hide modal by default */
pointer-events: none;
visibility: hidden;
opacity: 0;
transition: 0.4s;
}
.Modal.is-open {
background: red !important;
pointer-events: auto;
visibility: visible;
opacity: 1;
}
<button data-modal="#modal_1" type="button">Call modal 1</button>
<button data-modal="#modal_2" type="button">Call modal 2</button>
<div class="Modal" id="modal_1">
<h2>Modal 1 title</h2>
<p>Pop 1 description...</p>
<button type="button" data-modal>OK</button>
</div>
<div class="Modal" id="modal_2">
<h2>Modal 2 title</h2>
<p>Pop 2 description...</p>
<button type="button" data-modal>OK</button>
</div>
一个快速(可能在计算上有点昂贵(的肮脏黑客可能是这样的:
$("body").click(function() {
$(".white_content").each(function(){
if($(this).css("display") !== "none")
{
$(this).hide();
}
});
});
工作小提琴。
试试这个:
$("body").click(function (e) {
var elt = $(e.target);
if (!($(e.target).attr("id") == "light") && !($(e.target).parents("div").attr("id")=="light"))
{
$("#light").hide();
}
});
这取决于你的条件。不管怎样,我已经编辑了我的帖子,你现在可以查看了。
相关文章:
- 使用外部数据创建仪表板(谷歌电子表格)-JavaScript
- Javascript:获取“;FORM”;它是在.html到外部.js文件中创建的
- 正在创建网页,并希望将外部链接调用为html和css
- 为在新窗口中打开外部链接创建异常
- 为在外部单击时关闭的库图像创建预览效果
- 如何设置外部javascript创建的iframe的位置
- 内部函数不会为外部函数在 jQuery 中动态创建的元素赋值
- 从外部 js 脚本创建元素并插入到 html 中
- 如何在外部文件中创建选择菜单并将其嵌入到html中以显示菜单
- 从外部xml文件创建标记
- 使用外部数据创建体式任务
- 如何使用 Backbone.js 在 HTML 页面中创建和显示外部模板
- 从外部 JSON 文件创建 JavaScript 变量
- 使用外部 json 文件使用 d3js 创建气泡图
- 使用在外部文件中创建的 值
- 是否可以在Javascript中创建外部闭包
- 仅在 Tag-it 中为获取的数据创建标记.js希望验证任何外部数据的创建标记
- 在外部文件中创建 jquery 函数
- 为什么使用函数构造函数创建的 Javascript 函数无法访问在其外部定义的其他函数
- 在控制器外部创建角模态