class.php弹出框使用,分享一个非常好用的弹出框小技巧

相信大家或多或少都会见到这样的需求:

42981ef3700c

Paste_Image.png

如图所示,点击按钮弹出下面的弹出框,点击空白处或者关闭按钮弹出框就会关闭,但同时点击弹出框的里面的其他部分,不会使弹出框关闭。

好,我们按步骤来一步步实现,这里引入jQuery方便DOM操作。

1、实现点击按钮弹框弹出

这个很容易办到,就不多废话了,直接上代码:

document

#pop_box {

border: 1px solid #000;

background-color: #bce;

width: 300px;

height: 300px;

}

#pop_box.hide {

display: none;

}

#btn_close{

background: #71d7d0;

border-radius: 5px;

display: block;

padding: 10px;

width: 100px;

margin: 0 auto;

color: #fff;

}

点我弹出

我是一个弹出框

一个无聊的按钮

关闭弹出框

$('#btn_open').click((e) => {

$('#pop_box').removeClass('hide')

e.stopPropagation()

})

2、实现点击空白处弹框隐藏

这个时候,问题就来了,一般的思路肯定是给document绑定一个点击事件,然后传入event参数,判断event.target的元素是不是弹出框里面的元素。但是很明显,弹出框里面包含的可不是一个元素,弹出框里面包含了多个子元素,用普通的直接判定event.target的方式肯定是不行的了。

那么怎么办呢,接下来就要介绍两个jQuery库里非常好用的函数了

一、 .is() 函数。它的用法总共有四种,这里就不一一介绍了,只介绍现在用到的一种:

.is(jQuery Object)

它传入的是一个jQuery对象,返回的是一个布尔值,用以判断当前对象与参数里的jQuery对象是否是同一个对象。

二、.has()函数。如果说.is()函数的作用一般般的话,那么这个.has()函数就厉害了。它的厉害之处就是可以方便的检查一个元素是否在另一个元素之内:

.has(jQuery Object)

需要注意的是,传入的参数是父元素,前面的对象是子元素。它返回的是一个包含jQuery对象的类数组对象,具有length属性,我们刚好可以利用这个length属性。当当前对象不属于传入的对象的时候,这个length就为0。

那么,利用这两个jquery函数,我们的代码就可以这么写:

$(document).click((e) => {

var box = $('#pop_box'),

btn_close = $('#btn_close')

e.stopPropagation

console.log(box.has(e.target).length)

if (!box.is(e.target) && box.has(e.target).length == 0) {

$('#pop_box').addClass('hide')

}

})

这样,就可以实现点击空白处弹出框隐藏的功能了。

最后,将上面代码改进,实现点击隐藏按钮,也能隐藏弹出框的功能:

$(document).click((e) => {

var box = $('#pop_box'),

btn_close = $('#btn_close')

e.stopPropagation

console.log(box.has(e.target).length)

if (!box.is(e.target) && box.has(e.target).length == 0 || btn_close.is(e.target) || btn_close.has(e.target).length > 0) {

$('#pop_box').addClass('hide')

}

})

这样,一个基本的弹出框的功能就大功告成了,下面贴出所有代码:

document

#pop_box {

border: 1px solid #000;

background-color: #bce;

width: 300px;

height: 300px;

}

#pop_box.hide {

display: none;

}

#btn_close{

background: #71d7d0;

border-radius: 5px;

display: block;

padding: 10px;

width: 100px;

margin: 0 auto;

color: #fff;

}

点我弹出

我是一个弹出框

一个无聊的按钮

关闭弹出框

$('#btn_open').click((e) => {

$('#pop_box').removeClass('hide')

e.stopPropagation()

})

$(document).click((e) => {

var box = $('#pop_box'),

btn_close = $('#btn_close')

e.stopPropagation

console.log(box.has(e.target).length)

if (!box.is(e.target) && box.has(e.target).length == 0 || btn_close.is(e.target) || btn_close.has(e.target).length > 0) {

$('#pop_box').addClass('hide')

}

})

如果大家有更好的方法实现此功能,请不吝赐教在评论区留言!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的弹出样式和 JavaScript 代码,你可以根据你的需求进行修改和美化: ```html <!-- 弹出的 HTML 代码 --> <div id="modal" class="modal"> <div class="modal-content"> <span class="close">×</span> <p>这是一个弹出。</p> </div> </div> <!-- 在页面底部添加弹出的样式 --> <style> .modal { display: none; /* 默认隐藏弹出 */ position: fixed; /* 固定定位 */ z-index: 1; /* 设置 z-index,确保弹出显示在其他元素之上 */ left: 0; top: 0; width: 100%; height: 100%; overflow: auto; /* 添加滚动条,以便在内容太长时可以滚动 */ background-color: rgba(0,0,0,0.4); /* 添加半透明的背景 */ } .modal-content { background-color: #fefefe; margin: 15% auto; padding: 20px; border: 1px solid #888; width: 80%; max-width: 600px; } .close { color: #aaa; float: right; font-size: 28px; font-weight: bold; } .close:hover, .close:focus { color: black; text-decoration: none; cursor: pointer; } </style> <!-- 在页面底部添加弹出的 JavaScript 代码 --> <script> // 获取弹出、关闭按钮和内容元素 const modal = document.getElementById("modal"); const closeBtn = document.querySelector(".close"); const content = document.querySelector(".modal-content"); // 当用户点击关闭按钮或弹出之外的区域时,关闭弹出 window.onclick = function(event) { if (event.target == modal) { modal.style.display = "none"; } }; // 当用户点击关闭按钮时,关闭弹出 closeBtn.onclick = function() { modal.style.display = "none"; }; // 显示弹出 function showModal() { modal.style.display = "block"; } </script> ``` 这个弹出包含一个半透明的背景和一个浮动在中央的内容。你可以根据需要修改样式,例如更改背景颜色、边样式、字体大小等等。 要显示弹出,可以调用 `showModal()` 函数。例如在按钮的点击事件中调用该函数: ```html <button onclick="showModal()">显示弹出</button> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值