JS DIV模式弹出

  在web前端开发中,某些情况下需要自定义弹出窗口。一般采用弹出DIV层的方式来实现这种效果,其基本原理是先弹出一个半透明的DIV空白层,使其长度和宽度等于html页面中body的长度和宽度。使其下层不可用,然后再弹出需要弹出的一个DIV信息层。

   JS主要代码如下:

   1.ShowMask函数是弹出遮挡层,SetMaskPos是设置遮挡层的位置;

ShowMask(false, "", "");
	var BoxID      = "tdzcxx";
	var BoxConID   = "tdzcxx_con";
	if($("#"+BoxID).size() <= 0){
		var html = "<div id=\""+BoxID+"\" class=\""+BoxID+"\">";
		html += "<div id=\""+BoxConID+"\" class=\""+BoxConID+"\"></div>";
		html += "<table width=\"90%\" border=\"0\" cellspacing=\"0\" cellpadding=\"10\" align=\"center\">";
		html += "<tr><td id=\"tdzcxx_txt\">";
		html +=  str;
		html += "</td></tr>";
		html += "</table>";
		html += "<table width=\"90%\" border=\"0\" cellspacing=\"0\" cellpadding=\"10\" align=\"center\">";
		html += "<tr>";
		html += "<td><a href=\"#\" id=\"tdzcxx_btn_ok\" class=\"layer_btn\">一 致</a></td>";
		html += "<td><a href=\"#\" id=\"tdzcxx_btn_no\" class=\"layer_btn\">不一致</a></td>";
		html += "</tr>";
		html += "</table>";
		html += "</div>";
		$("body").append(html);
		
		$("#tdzcxx_btn_no").click(function(){
			$(this).blur();
			$("#"+BoxID).hide();
			CloseMask();
			window.location.reload();
			return false;
		});
		$("#tdzcxx_btn_ok").click(function(){
			$(this).blur();
			$("#"+BoxID).hide();
			CloseMask();
			document.loginform.submit();
			return false;
		});

	}
	$("#"+BoxID).show();
	SetMaskPos("#"+BoxID);

   设置遮挡层函数

function ShowMask(bol, title, content){
	var maskID = "#maskbox";
	var infoID = "#maskinfo";
	if($(maskID).size() <= 0){
		$("body").append(getNodeMask());
	}
	$(maskID).show();
	if(bol){
		if($(infoID).size() <= 0){
			$("body").append(getNodeMaskInfo(title, content));
			SetMaskPos(infoID);
		}
		$(infoID).show();
	}
}

   设置遮挡层的长度和宽度与body长度和宽度分别一致;

function getNodeMask(){
	var nodeMask = document.createElement("div");
	nodeMask.id = "maskbox";
	nodeMask.style.width = $("body").width();
	nodeMask.style.height = $("body").height();
	return nodeMask;
}
function getNodeMaskInfo(title, content){
	var nodeMaskInfo = document.createElement("div");
	nodeMaskInfo.id = "maskinfo";
	var nodeMaskTitle = document.createElement("div");
	nodeMaskTitle.id = "masktitle";
	nodeMaskTitle.innerHTML = title;
	var nodeMaskContent = document.createElement("div");
	nodeMaskContent.id = "maskcontent";
	nodeMaskContent.innerHTML = content;
	nodeMaskInfo.appendChild(nodeMaskTitle);
	nodeMaskInfo.appendChild(nodeMaskContent);
	return nodeMaskInfo;
}
function SetMaskPos(oid){
	var scrollT = document.documentElement.scrollTop;
	var scrollL = document.documentElement.scrollLeft;
	var clientH = document.documentElement.clientHeight;
	var clientW = document.documentElement.clientWidth;
	var $obj = $(oid);
	var h = $obj.height();
	var w = $obj.width();
	var posL = Number(scrollL) + (Number(clientW) - Number(w))/2;
	var posT = Number(scrollT) + (Number(clientH) - Number(h))/2;
	$obj.css({"left":posL+"px", "top":posT+"px"});
}

  PS: 有时候会出现信息弹出层和遮挡弹出层都被遮挡的情况,这个时候可以设置信息弹出层的css参数:z-index为一个较大值,使其在div中最上层

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单例模式是一种常用的设计模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在 JavaScript 中,可以使用单例模式来实现弹出 div 的功能。 下面是一个简单的例子: ```javascript var Popup = (function() { var instance; function createInstance() { var div = document.createElement("div"); div.innerHTML = "Hello, world!"; div.style.display = "none"; document.body.appendChild(div); return div; } return { getInstance: function() { if (!instance) { instance = createInstance(); } return instance; }, show: function() { this.getInstance().style.display = "block"; }, hide: function() { this.getInstance().style.display = "none"; } }; })(); // 使用 Popup.show(); // 显示弹出框 Popup.hide(); // 隐藏弹出框 ``` 在这个例子中,我们使用了一个立即执行函数,创建了一个私有变量 `instance`,它存储了唯一的实例。在 `createInstance` 函数中,我们创建了一个 div 元素,并将其添加到页面中。然后,我们返回这个 div 元素,作为单例的实例。 在 `getInstance` 方法中,我们首先检查实例是否已经存在。如果不存在,我们调用 `createInstance` 方法来创建实例。最后,我们返回实例。 在 `show` 和 `hide` 方法中,我们通过 `getInstance` 方法来获取实例,并设置其样式属性来显示或隐藏弹出框。 通过这种方式,我们可以确保只有一个弹出框实例存在,并且可以在任何时候访问它。同时,我们可以在需要时方便地显示或隐藏弹出框。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值