空白处点击关闭DIV层

4 篇文章 0 订阅
2 篇文章 0 订阅
继续以我的[url=http://tigerl.iteye.com/blog/1386570]DIV+JS弹出层并置灰窗口为不可点击状态 [/url]为例,在弹出层以后,有时候会有这样一种需求,需要在层以外的空白地方根据鼠标点击事件空白处关闭弹出层!这是个很有意思的东西,其实很简单,不像网上大多数人给出的代码那样复杂,原理就是捕获拦截鼠标按下事件,拿到事件句柄,在做完自己的处理后,继续向下传播或者阻止事件继续向下传播。
看代码:



<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE html>
<html>
<head>

<title>弹出层</title>
<meta http-equiv="Content-type" content="text/html;charset=utf-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="description" content="This is my page">
<style>
body {
margin: 0 0;
padding: 0 0;
}

.myd {
height: 100%;
margin: 0 0;
padding: 0 0; width : 100%;
position: absolute;
z-index: 10000;
background-color: gray;
width: 100%;
opacity:0.8;/* 实现透明 */
}

.pd {
background: #c2ee11;
height: 300px;
width: 450px;
position: absolute;
z-index: 10002;
}
</style>

</head>

<script type="text/javascript">
var flag=1;
//这是核心的地方,用来拦截鼠标点击事件
function fnOnMouse(event){
flag = flag+1;
document.getElementById("binfo").innerHTML=flag;
var targ;
if (!e)
var e = window.event;
if (e.target)
targ = e.target;
else if (e.srcElement)
targ = e.srcElement
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode
var tname;
tname=targ.tagName;

//这里的对象是弹出层的display属性值,根据自己的ID属性来进行相应的业务逻辑处理,根据需要决定事件是否需要继续向下传播,返回true即传播,false不传播,这是js本身,没有使用任何第三方js库
var pds = document.getElementById("pd").style.display;

var f = (tname == "DIV" && pds == "block" && targ.id == "pd");
if(!f){
close_div();
}else{
return false;
}
return true;
}

//window.onmousedown = fnOnMouse;
function pop(){
document.getElementById("md").style.display="block";

//clientWidth取的是实际窗口文档域的大小
var _x = document.body.clientWidth;
var _y = document.body.clientHeight;
var a_w = 450;
var a_h = 300;
//alert(_x+" == " + _y);
//计算弹出层的位置,目的是要显示在正中间
var dleft = _x/2 - a_w/2;
var dtop = _y/2 - a_h/2;
var cd = document.getElementById("pd").style;
cd.left=dleft+"px";
cd.top = dtop+"px";
cd.display="block";
}

function close_div(){
document.getElementById("md").style.display="none";
document.getElementById("pd").style.display="none";
}
</script>

<body onmousedown="fnOnMouse(event)">
<!-- 遮盖层 -->
<div class="myd" style="display: none;" id="md"></div>

<!-- 弹出层 -->
<div class="pd" style="display: none" id="pd">
<button onclick="close_div()"
style="height: 20px;background: red;width: 100%;text-align: right">
点击关闭层:X</button>
<label>这里是要显示的内容</label>

</div>
<input type="button" onclick="pop()" value="弹出层">
<br> This is my JSP page.
<br>
<div style="width:100%;height: 100px;background: red;" id="binfo"
onclick="alert(1);"></div>
<span onclick="alert('so easy...');"
style="margin: 20px auto;height: 100px;width: 100%; display:inline-block; background-color: gray;">
click me,the dom event will still continue to propagate normally </span>
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br> This is my JSP page.
<br>
</body>
</html>



如果弹出层里有好多元素,那么建议使用jquery选择器,在上面的例子中,弹出层顶级元素的ID是pd,所以要实现在pd元素以外的任何空白或不空白的地方点击事件同时关闭弹出层则使用jquery选择器很简单:

$(document).bind("click",function(e){
var target = $(e.target);
if(target.closest("#pd").length == 0){
$("#pd").hide();
}
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值