Js弹出层
使用方法:
1,首先导入css和js
<script type="text/javascript" src="js/PopUpManager-compressed.js" ></script>
<link href="css/PopUpLayer.css" type="text/css" rel="stylesheet"/>
2.
Alert.show(el,modal,dragTitle); Alert.close(el); Alert.showIframe(url,width,height,modal); Alert.closeIframe(); 如果在iframe页关闭弹出层, 则是 parent.Alert.close(el); parent.Alert.closeIframe();
PopUpManager.js源码如下:
if(typeof EventFactory == "undefinded"){
alert('aa');
}
var getClient = function(e)
{
if (e) {
w = e.clientWidth;
h = e.clientHeight;
} else {
w = (window.innerWidth) ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth) ? document.documentElement.clientWidth : document.body.offsetWidth;
h = (window.innerHeight) ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.offsetHeight;
}
return {w:w,h:h};
};
function removeElementById(id){
var el = document.getElementById(id);
if(el && el.parentNode) el.parentNode.removeChild(el);
}
var isIE = navigator.userAgent.toLowerCase().indexOf("msie") != -1;
var isIE6 = navigator.userAgent.toLowerCase().indexOf("msie 6.0") != -1;
var isMacXFF = navigator.userAgent.toLowerCase().indexOf('mac')!= -1 && navigator.userAgent.toLowerCase().indexOf('firefox')!=-1;
var Alert = {
"instance" : null,
"show" : function(el,modal,dragTitle){
var len = arguments.length;
if(len==0 || !el){
alert('温馨提示:待弹出对象不存在!\n请确认您要弹出的对象在dom中');
return;
}
if(!this.instance)
{
this.instance = new PopUpManager();
}
if(typeof el =="string")
{
el = document.getElementById(el);
}
if(typeof dragTitle == "string")
{
dragTitle = document.getElementById(dragTitle);
}
el.style.display='block';
this.instance.addPopUp(el,modal,dragTitle);
},
"close": function(el){
if(this.instance){
try{
if(el){
el.style.display="none";
}else{
this.instance.removePopUp();
}
}catch(e){
this.instance.currentWin.style.display="none";
}
}
},
"showIframe": function(url,width,height,modal){
if(!this.instance)
{
this.instance = new PopUpManager();
}
this.instance.showIframe(url,width,height,modal);
},
"closeIframe": function(){
if(this.instance){
this.instance.removeIframe();
}
}
}
var Drag={
"maxDepth":10,
"currentWin":null,
"swapList":[],
"obj":null,
"init":function(handle, dragBody,swapEnable){
//自动交换深度
if(swapEnable != false){
this.autoSwap(dragBody);
}
handle.onmousedown=Drag.start;
handle.root = dragBody;
handle.root.onDragStart=new Function();
handle.root.onDragEnd=new Function();
handle.root.onDrag=new Function();
},
"start":function(e){
var handle=Drag.obj=this;
Drag.fixPos(handle.root);
e=Drag.fixEvent(e);
var top=parseInt(handle.root.style.top);
var left=parseInt(handle.root.style.left);
handle.root.onDragStart(left,top,e.pageX,e.pageY);
handle.lastMouseX=e.pageX;
handle.lastMouseY=e.pageY;
document.onmousemove=Drag.drag;
document.onmouseup=Drag.end;
return false;
},
"drag":function(e){
e=Drag.fixEvent(e);
var handle=Drag.obj;
var mouseY=e.pageY;
var mouseX=e.pageX;
var top=parseInt(handle.root.style.top);
var left=parseInt(handle.root.style.left);
var currentLeft,currentTop;
currentLeft=left+mouseX-handle.lastMouseX;
currentTop=top+(mouseY-handle.lastMouseY);
handle.root.style.left=currentLeft +"px";
handle.root.style.top=currentTop+"px";
handle.lastMouseX=mouseX;
handle.lastMouseY=mouseY;
handle.root.onDrag(currentLeft,currentTop,e.pageX,e.pageY);//调用外面对应的函数
return false;
},
"end":function(){
document.onmousemove=null;
document.onmouseup=null;
Drag.obj.root.onDragEnd(parseInt(Drag.obj.root.style.left),parseInt(Drag.obj.root.style.top));
Drag.obj=null;
},
"fixEvent":function(e){
if(typeof e=="undefined")e=window.event;
if(typeof e.layerX=="undefined")e.layerX=e.offsetX;
if(typeof e.layerY=="undefined")e.layerY=e.offsetY;
if(typeof e.pageX == "undefined")e.pageX = e.clientX + document.body.scrollLeft - document.body.clientLeft;
if(typeof e.pageY == "undefined")e.pageY = e.clientY + document.body.scrollTop - document.body.clientTop;
return e;
},
"fixPos":function(e){
var top,left;
if(isIE){
top = e.currentStyle.top;
left = e.currentStyle.left;
}else{//此处有小BUG 未计算伪类
top = window.getComputedStyle(e,null).top;
left = window.getComputedStyle(e,null).left;
}
if(left.indexOf("%") != -1) left = getClient().w * parseInt(left) / 100 ;
if(top.indexOf("%") != -1) top = getClient().h * parseInt(top) / 100 ;
top = parseInt(top) || 0;
left = parseInt(left) || 0;
e.style.left=left+"px";
e.style.top=top+"px";
},
"autoSwap":function(dragBody){
var zIndex;
if(isIE){
zIndex = dragBody.currentStyle.zIndex;
}else{
zIndex = window.getComputedStyle(dragBody,null).zIndex;
}
if(zIndex>this.maxDepth){
this.maxDepth = zIndex;
}
if(this.swapList.indexOf(dragBody) == -1){
this.swapList.push(dragBody);
Drag.addEventListener(dragBody,"mousedown",
function(){
if(dragBody!=Drag.currentWin && Drag.currentWin){
Drag.currentWin.style.zIndex = Drag.maxDepth-1;
dragBody.style.zIndex=Drag.maxDepth;
Drag.currentWin = dragBody;
}else{
Drag.currentWin = dragBody;
}
});
}
}
};
Drag.addEventListener = function(target, eventName, handler, argsObject)
{
var eventHandler = handler;
if(argsObject)
{
eventHander = function(e)
{
handler.call(argsObject, e);
}
}
if(window.attachEvent)
{
target.attachEvent("on" + eventName, eventHandler );
}else{
target.addEventListener(eventName, eventHandler, false);
}
}
var PopUpManager = function (){
this.overlayId = "TB_overlay";
this.containerId = "TB_window";
this.iframeId = "TB_iframe";
this.IE6OriginalStyle =null;
if(isMacXFF){
this.overlayClass = "TB_overlayMacFFBGHack";
}else{
this.overlayClass = "TB_overlayBG";
}
};
PopUpManager.prototype.addPopUp = function(el,modal,dragTitle)
{
var instance = this;
if(!modal){
this.overlayDiv = this.addLayover(); //添加遮罩层
this.overlayDiv.onclick = function(){instance.removePopUp();}
this.addContent(el);
if(dragTitle)
{
var container = document.getElementById(this.containerId);
Drag.init(dragTitle,container,false);
}
}else{
if(this.currentWin && this.currentWin != el){
this.currentWin.style.zIndex = Drag.maxDepth-1;
el.style.zIndex=Drag.maxDepth;
}
this.currentWin = el;
this.centerPopUp(el);
if(dragTitle)
{
Drag.init(dragTitle,el);//可拖拽
}
}
}
PopUpManager.prototype.showIframe = function(url,width,height,modal)
{
width = width || 600;
height = height || 400;
var instance = this;
this.overlayDiv = this.addLayover(); //添加遮罩层
if(!modal){
this.overlayDiv.onclick = function(){instance.removeIframe();}
}
this.iframe = this.addIframe();
this.iframe.src = url;
this.iframe.style.width = width+"px";
this.iframe.style.height = height+"px";
this.centerPopUp(this.iframe);
}
PopUpManager.prototype.centerPopUp = function(el)
{
el.style.display = "block";
el.style.top = "50%";
el.style.left = "50%";
if(isIE6){
el.style.position = "absolute";
el.style.marginTop = parseInt(document.documentElement.scrollTop-el.offsetHeight/2,10) + 'px';
}else{
el.style.position = "fixed";
el.style.marginTop = '-'+ parseInt(el.offsetHeight/2,10) + 'px';
}
el.style.marginLeft = "-" + parseInt(el.offsetWidth/2,10) + "px";
}
//IE6 private <iframe id="TB_HideSelect"></iframe>
//MacFF <div id="TB_overlay" class="TB_overlayMacFFBGHack"></div>
//other <div id="TB_overlay" class="TB_overlayBG"></div>
PopUpManager.prototype.addLayover = function(){
var overlay = document.getElementById(this.overlayId);
if(!overlay){
if(isIE6){
this.addIE6TemStyle();
var iframe = document.createElement("iframe");
iframe.id = "TB_HideSelect";
iframe.frameBorder=0;
document.body.appendChild(iframe);
}
overlay = document.createElement("div");
overlay.id = this.overlayId;
overlay.className = this.overlayClass;
document.body.appendChild(overlay);
}
var zIndex;
if(isIE){
zIndex = isIE && overlay.currentStyle.zIndex;
}else{
zIndex = window.getComputedStyle(overlay,null).zIndex;
}
if(zIndex<Drag.maxDepth)
{
}
overlay.style.display = "block";
return overlay;
}
//<div id="TB_window"></div>
PopUpManager.prototype.addContent = function(el){
var container = document.getElementById(this.containerId);
if(!container){
container = document.createElement("div");
container.id = this.containerId;
document.body.appendChild(container);
}
container.appendChild(el);
this.centerPopUp(container);
document.getElementById(this.containerId).style.display = "block";
}
PopUpManager.prototype.addIframe = function()
{
var iframe = document.getElementById(this.iframeId);
if(!iframe)
{
iframe = document.createElement("iframe");
iframe.id = this.iframeId;
iframe.frameBorder = 0;
document.body.appendChild(iframe);
}
return iframe;
}
PopUpManager.prototype.removePopUp = function()
{
this.removeOverlay();
this.removeContent();
}
PopUpManager.prototype.removeIframe = function(){
this.removeOverlay();
removeElementById(this.iframeId);
}
PopUpManager.prototype.removeOverlay = function()
{
removeElementById(this.overlayId);
if(isIE6){
this.removeIE6TemStyle();
removeElementById("TB_HideSelect");
}
}
PopUpManager.prototype.removeContent = function()
{
document.getElementById(this.containerId).style.display = "none";
//document.body.removeChild(this.container);
}
PopUpManager.prototype.addIE6TemStyle = function()
{
var htmlEl = document.getElementsByTagName("HTML")[0];
var bodyEl = document.body;
this.IE6OriginalStyle = {htmlHeight: htmlEl.currentStyle.height,
htmlWidth: htmlEl.currentStyle.width,
htmlOverflow: htmlEl.currentStyle.overflow,
bodyHeight: bodyEl.currentStyle.height,
bodyWidth: bodyEl.currentStyle.width};
htmlEl.style.width = "100%";
htmlEl.style.height = "100%";
htmlEl.style.overflow = "hidden";
bodyEl.style.width = "100%";
bodyEl.style.height = "100%";/**/
}
PopUpManager.prototype.removeIE6TemStyle = function()
{
if(this.IE6OriginalStyle)
{
var htmlEl = document.getElementsByTagName("HTML")[0];
var bodyEl = document.body;
htmlEl.style.width = this.IE6OriginalStyle.htmlWidth;
htmlEl.style.height = this.IE6OriginalStyle.htmlHeight;
htmlEl.style.overflow = this.IE6OriginalStyle.htmlOverflow;
bodyEl.style.width = this.IE6OriginalStyle.bodyWidth;
bodyEl.style.height = this.IE6OriginalStyle.bodyHeight;
}
}
本文介绍了一款基于JavaScript的弹窗插件实现方法,包括弹窗层的显示与关闭功能,并提供了完整的PopUpManager.js源码。该插件支持自定义弹窗样式及位置,同时具备iframe页面弹窗功能。
685

被折叠的 条评论
为什么被折叠?



