js弹出层(jQuery插件形式附带reLoad功能)

 更新时间:2013年04月12日 17:30:11   作者:  
之前的弹出层做的挺好,但是代码结构有问题,这次用到了,重构了一下,改为jQuery的插件形式,感觉还不错,有兴趣的朋友可以参考下,希望可以帮助到你
之前做一个项目,感觉里面的弹出层做的挺好,但是代码结构有问题,这次用到了,重构了一下,改成jQuery的插件形式,并增加了reLoad的功能,感觉还不错,代码如下:
复制代码 代码如下:

(function($){
$.module={
_showCoverLayer:function(){//显示遮盖层
this.coverLayer=$("#TB_overlay");
var height=$(document).height()+"px";
var width=$(document).width()+"px";
if(this.coverLayer.length>0){
this.coverLayer.css({"visibility":"visible","height":height,"width":width});
}else{
this.coverLayer=$("<div id='TB_overlay' style='height:"+height+";width:"+width+"'></div>");
$("body").append(this.coverLayer);
}
},
_hideCoverLayer:function(){//隐藏遮盖层
this.coverLayer.css("visibility","hidden");
},
_showAjaxLoad:function(imgUrl){
this.ajaxLayer=$("#TB_load");
if(this.ajaxLayer.length>0){
this.ajaxLayer.css({"visibility":"visible"});
$("#TB_loadContent").css({"display":"block"});
}else{
this.ajaxLayer=$("<div id='TB_load'><div id='TB_loadContent'><img src='"+imgUrl+"' /></div></div>");
$("body").append(this.ajaxLayer);
}
},
_hideAjaxLoad:function(){
this.ajaxLayer.css("visibility","hidden");
$("#TB_loadContent").css({"display":"none"});
},
showWin:function(opt){//url,title,width,height,fixTop,fixLeft,imgUrl,top
this._showCoverLayer();
this.imgUrl=opt.imgUrl || "/image/ajax-loader.gif";
this._showAjaxLoad(this.imgUrl);
this.win=$("#TB_window");
var that=this;
if(this.win.length==0){
this.win=$("<div id='TB_window'></div>");
$("body").append(this.win);
this.win.append("<div id='TB_closeAjaxWindow' style='cursor:move' onmousedown='drag(this.parentNode,event);'><span id='TB_close'>X</span><span id='TB_title'>"+opt.title+"</span></div><div id='TB_ajaxContent'></div>");
$("#TB_close").click(function(){
that.hideWin();
});
}

this._init(opt);

$("#TB_ajaxContent").load(opt.url, function() {
that._hideAjaxLoad();
that.win.slideDown("normal");
});
},
hideWin:function(){
var that=this;
this.win.fadeOut("fast",function(){
that._hideCoverLayer();
});
},
_init:function(opt){
$("#TB_title").html(opt.title);
var top=opt.top || ( $(window).height() - opt.height ) /2+(opt.fixTop || 0);// +$(window).scrollTop() ;
var left=( $(window).width() - opt.width ) / 2+(opt.fixLeft || 0);//+$(window).scrollLeft();
this.win.css({"height":opt.height+"px",
"width":opt.width+"px",
"top":top+"px",
"left":left+"px"
});
},
reLoad:function(opt){//加载新页面
var that=this;
this.win.fadeOut("fast",function(){
that._showAjaxLoad(that.imgUrl);
that._init(opt);
$("#TB_ajaxContent").load(opt.url, function() {
that._hideAjaxLoad();
that.win.fadeIn("normal");
});
});
}
}
})(jQuery);

CSS代码如下:
复制代码 代码如下:

body {background-color:#fff;}
html, body {height:100%;}
html body{font:12px Arial, Helvetica, sans-serif;color:#333333}
html>body{font:12px Arial, Helvetica, sans-serif;color:#333333}
#TB_overlay {
position: absolute;
top: 0;
left: 0;
z-index:100;
width: 100%;
height: 100%;
background-color:#CCC;
filter:alpha(opacity=60);
-moz-opacity: 0.6;
opacity: 0.6;
}
#TB_window {
top: 0px;
left: 0px;
position: fixed;
_position: absolute;
background: #fff;
z-index: 102;
color:#000000;
display:none;
border:5px solid #666;
}
#TB_caption{
height:25px;
padding:10px 30px 10px 25px;
}
#TB_closeWindow{
height:25px;
padding:10px 25px 10px 0;
float:right;
}
#TB_closeAjaxWindow{
padding:5px 10px 7px 0;
margin-bottom:1px;
text-align:right;
background-color:#e8e8e8;
}
#TB_close{
cursor:pointer;
}
#TB_title{
float: left;
font-weight: bold;
margin-left: 10px;
}
#TB_ajaxContent{
padding:2px 15px 15px 15px;
overflow:auto;
}
#TB_load{
text-align: center;
position: fixed;
top: 50%;
left: 0px;
width: 100%;
overflow: visible;
visibility: visible;
display: block;
z-index:101;
}
/*Download by http://sc.xueit.com*/
#TB_loadContent{
margin-left: -125px;
position: absolute;
top: -50px;
left: 50%;
width: 250px;
height: 100px;
visibility: visible;
}

这样来使用:
复制代码 代码如下:

$.module.showWin({url:"/deposit/clear/"+depositId+"?"+(+new Date),
title:"清退关闭",
width:550,
height:350});

效果如下:
 
关闭的时候,这样调用:
复制代码 代码如下:

$.module.hideWin();

这个弹出层有几个问题:
1、因为采用的是$.load()的方式,所以只能加载同源的url
2、在单页面的情况下,可以很好的定位,如果作为在iframe中弹出,则需要传入top值来辅助定位。这个问题是因为$(window).top()在单页面下和iframe下取的值不一样导致的,也不知该怎么解决。有了解的朋友说一下,不胜感激。

相关文章

  • ES6模板字符串和标签模板的应用实例分析

    ES6模板字符串和标签模板的应用实例分析

    这篇文章主要介绍了ES6模板字符串和标签模板的应用,结合实例形式分析了ES6模板字符串和标签模板的功能、原理、用法及相关操作注意事项,需要的朋友可以参考下
    2019-06-06
  • Object.defineProperty()函数之属性描述对象

    Object.defineProperty()函数之属性描述对象

    这篇文章主要介绍了Object.defineProperty()函数之属性描述对象,JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为:属性描述对象
    2022-09-09
  • JavaScript中实现sprintf、printf函数

    JavaScript中实现sprintf、printf函数

    这篇文章主要介绍了JavaScript中实现sprintf、printf函数,这两个函数在大多数编程语言中都有,但JS中却没有,本文介绍在js中实现这两个函数功能,需要的朋友可以参考下
    2015-01-01
  • 在layer弹层layer.prompt中,修改placeholder的实现方法

    在layer弹层layer.prompt中,修改placeholder的实现方法

    今天小编大家分享一篇在layer弹层layer.prompt中,修改placeholder的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JavaScript实现瀑布动画

    JavaScript实现瀑布动画

    这篇文章主要为大家详细介绍了JavaScript实现瀑布动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • zeroclipboard复制到剪切板的flash

    zeroclipboard复制到剪切板的flash

    虽然网上实现Ctrl + C的JS代码已经有很多了,但我还是向大家推荐一个比较好的插件zeroclipboard,兼容所有浏览器
    2010-08-08
  • JavaScript中的call和apply的用途以及区别

    JavaScript中的call和apply的用途以及区别

    本文主要介绍了JavaScript中的call和apply的用途以及区别。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • JavaScript Table排序 2.0 (更新)

    JavaScript Table排序 2.0 (更新)

    JavaScript,Table,排序,order,attribute,property,sort,Compare
    2009-05-05
  • javascript实现避免页面按钮重复提交

    javascript实现避免页面按钮重复提交

    很多时候我们都需要防止重复提交,这方面的文章也比较多,实现的途径差别也很大.因为有些时候即使服务器能够识别重复的提交,也会造成问题.比如需要很长等待时间的操作,在首次提交后,不断重复提交,页面可能会死掉.用脚本来控制的话可以防止这种问题.
    2015-01-01
  • js支持键盘控制的左右切换立体式图片轮播效果代码分享

    js支持键盘控制的左右切换立体式图片轮播效果代码分享

    这篇文章主要介绍了js支持键盘控制的左右切换立体式图片轮播效果,很实用的代码,推荐给大家,有需要的小伙伴可以参考下。
    2015-08-08

最新评论