Posted in Javascript onMarch 01, 2012
最终效果:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>弹出层插件:jquery.artwl.thickbox.js</title> <script src="/js_lib/jQuery-1.7.1.js" type="text/javascript"></script> <script type="text/javascript"> /* File Created: 三月 1, 2012 Author:artwl */ ;(function ($) { $.extend({ artwl_bind: function (options) { options=$.extend({ showbtnid:"", title:"", content:"" },options); var mask = '<div id="artwl_mask"></div>'; var boxcontain = '<div id="artwl_boxcontain">\ <a id="artwl_close" href="javascript:void(0);" title="Close"></a>\ <div id="artwl_showbox">\ <div id="artwl_title">\ <h2>\ Title</h2>\ </div>\ <div id="artwl_message">\ Content<br />\ </div>\ </div>\ </div>'; var cssCode = 'html, body, h1, h2, h3, h4, h5{margin: 0px;padding: 0px;}\ #artwl_mask{background-color: #000;position: absolute;top: 0px;left: 0px;width: 100%;height: 100%;opacity: 0.5;filter: alpha(opacity=50);display: none;}\ #artwl_boxcontain{margin: 0 auto;position: absolute;z-index: 2;line-height: 28px;display: none;}\ #artwl_showbox{padding: 10px;background: #FFF;border-radius: 5px;margin: 20px;min-width:300px;min-height:200px;}\ #artwl_title{position: relative;height: 27px;border-bottom: 1px solid #999;}\ #artwl_close{position: absolute;cursor: pointer;outline: none;top: 0;right: 0;z-index: 4;width: 42px;height: 42px;overflow: hidden;background-image: url(/upload/201203/20120301220903376.png);_background: none;}\ #artwl_message{padding: 10px 0px;overflow: hidden;line-height: 19px;}'; if ($("#artwl_mask").length == 0) { $("body").append(mask + boxcontain); $("head").append("<style type='text/css'>" + cssCode + "</style>"); if(options.title!=""){ $("#artwl_title").html(options.title); } if(options.content!=""){ $("#artwl_message").html(options.content); } } $("#"+options.showbtnid).click(function () { var height = $("#artwl_boxcontain").height(); var width = $("#artwl_boxcontain").width(); $("#artwl_mask").show(); $("#artwl_boxcontain").css("top", ($(window).height() - height) / 2).css("left", ($(window).width() - width) / 2).show(); if ($.browser.msie && $.browser.version.substr(0, 1) < 7) { width = $(window).width() > 600 ? 600 : $(window).width() - 40; $("#artwl_boxcontain").css("width", width + "px").css("top", ($(window).height() - height) / 2).css("left", ($(window).width() - width) / 2).show(); $("#artwl_mask").css("width", $(window).width() + "px").css("height", $(window).height() + "px").css("background", "#888"); $("#artwl_close").css("top", "30px").css("right", "30px").css("font-size", "20px").text("关闭"); } }); $("#artwl_close").click(function () { $("#artwl_mask").hide(); $("#artwl_boxcontain").hide(); }); }, artwl_close:function(options){ options=$.extend({ callback:null },options); $("#artwl_mask").hide(); $("#artwl_boxcontain").hide(); if(options.callback!=null){ options.callback(); } } }); })(jQuery); $(function () { $.artwl_bind({ showbtnid: "btn_show", title: "From Cnblogs Artwl", content: $("#Content").html() }); }); function test() { alert("Before close"); $.artwl_close({ callback: other }); } function other() { alert("After close"); } </script> </head> <body> <h3>弹出层插件jquery.artwl.thickbox.js(https://3water.com)</h3> <input type="button" value="Click Me" id="btn_show" /> <span id="Content" style="display:none;"> <a href="https://3water.com">Artwl</a><br /> <input type="button" onclick="test()" value="Test"/> </span> </body> </html>
插件原理
所有弹出层的原理都差不多,就是用一个全屏半透明DIV做遮罩层,在这个遮罩层上再显示出一个层放要显示的内容,其他的就是CSS的运用了。
本插件为了使用简单,把JS跟CSS封装在了一个JS文件(插件)中,所以使用起来非常方便,做到了一行代码调用。
插件源代码
插件(jquery.artwl.thickbox.js)的源码如下:
/* File Created: 三月 1, 2012 Author:artwl blog:http://artwl.cnblogs.com */ ;(function ($) { $.extend({ artwl_bind: function (options) { options=$.extend({ showbtnid:"", title:"", content:"" },options); var mask = '<div id="artwl_mask"></div>'; var boxcontain = '<div id="artwl_boxcontain">\ <a id="artwl_close" href="javascript:void(0);" title="Close"></a>\ <div id="artwl_showbox">\ <div id="artwl_title">\ <h2>\ Title</h2>\ </div>\ <div id="artwl_message">\ Content<br />\ </div>\ </div>\ </div>'; var cssCode = 'html, body, h1, h2, h3, h4, h5{margin: 0px;padding: 0px;}\ #artwl_mask{background-color: #000;position: absolute;top: 0px;left: 0px;width: 100%;height: 100%;opacity: 0.5;filter: alpha(opacity=50);display: none;}\ #artwl_boxcontain{margin: 0 auto;position: absolute;z-index: 2;line-height: 28px;display: none;}\ #artwl_showbox{padding: 10px;background: #FFF;border-radius: 5px;margin: 20px;min-width:300px;min-height:200px;}\ #artwl_title{position: relative;height: 27px;border-bottom: 1px solid #999;}\ #artwl_close{position: absolute;cursor: pointer;outline: none;top: 0;right: 0;z-index: 4;width: 42px;height: 42px;overflow: hidden;background-image: url(/Images/feedback-close.png);_background: none;}\ #artwl_message{padding: 10px 0px;overflow: hidden;line-height: 19px;}'; if ($("#artwl_mask").length == 0) { $("body").append(mask + boxcontain); $("head").append("<style type='text/css'>" + cssCode + "</style>"); if(options.title!=""){ $("#artwl_title").html(options.title); } if(options.content!=""){ $("#artwl_message").html(options.content); } } $("#"+options.showbtnid).click(function () { var height = $("#artwl_boxcontain").height(); var width = $("#artwl_boxcontain").width(); $("#artwl_mask").show(); $("#artwl_boxcontain").css("top", ($(window).height() - height) / 2).css("left", ($(window).width() - width) / 2).show(); if ($.browser.msie && $.browser.version.substr(0, 1) < 7) { width = $(window).width() > 600 ? 600 : $(window).width() - 40; $("#artwl_boxcontain").css("width", width + "px").css("top", ($(window).height() - height) / 2).css("left", ($(window).width() - width) / 2).show(); $("#artwl_mask").css("width", $(window).width() + "px").css("height", $(window).height() + "px").css("background", "#888"); $("#artwl_close").css("top", "30px").css("right", "30px").css("font-size", "20px").text("关闭"); } }); $("#artwl_close").click(function () { $("#artwl_mask").hide(); $("#artwl_boxcontain").hide(); }); }, artwl_close:function(options){ options=$.extend({ callback:null },options); $("#artwl_mask").hide(); $("#artwl_boxcontain").hide(); if(options.callback!=null){ options.callback(); } } }); })(jQuery);
调用也非常简单,在页面引入此JS文件后,在页面加载方法中调用如下代码即可:
$.artwl_bind({ showbtnid: "btn_show", title: "From Cnblogs Artwl", content: $("#Content").html() });
这三个参数非常简单,第一个是弹出层触发事件的元素ID,第二个为弹出层的标题,第三个为弹出层的内容
注意事项
为了使用方便,本插件把JS跟CSS写在了一个文件中,如果要调整弹出层的样式可以修改如下CSS即可。
插件CSS代码:
html, body, h1, h2, h3, h4, h5 { margin: 0px; padding: 0px; } #artwl_mask { background - color: #000; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; opacity: 0.5; filter: alpha(opacity= 50); display: none; } #artwl_boxcontain { margin: 0 auto; position: absolute; z - index: 2; line - height: 28px; display: none; } #artwl_showbox { padding: 10px; background: #FFF; border - radius: 5px; margin: 20px; min - width: 300px; min - height: 200px; } #artwl_title { position: relative; height: 27px; border - bottom: 1px solid #999; } # artwl_close { position: absolute; cursor: pointer; outline: none; top: 0; right: 0; z - index: 4; width: 42px; height: 42px; overflow: hidden; background - image: url(/Images/feedback - close.png); _background: none; } #artwl_message { padding: 10px 0px; overflow: hidden; line - height: 19px; }
另外,针对IE6不支持透明作了特殊处理,在IE6下显示为:
IE6
其他浏览器
Demo下载地址:http://xiazai.3water.com/201203/yuanma/thickbox_demo.rar
jquery.artwl.thickbox.js 一个非常简单好用的jQuery弹出层插件
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@