zoukankan      html  css  js  c++  java
  • 分享一个灰常简单好用的jQuery弹出层插件:jquery.artwl.thickbox.js

    最终效果:

    插件原理

      所有弹出层的原理都差不多,就是用一个全屏半透明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; 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-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; 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下载地址:https://files.cnblogs.com/artwl/Demo.zip

    插件更新

      园友“技术宅男”发现了有滚动条时的bug,之前没考虑周全,修改后插件代码如下:

    ; (function ($) {
    $.extend({
    artwl_bind: function (options) {
    options = $.extend({
    title: "",
    content: "",
    "500px"
    }, 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>\
    正在加载,请稍后...</h2>\
    </div>\
    <div id="artwl_message">\
    正在加载,请稍后...<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; 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-300px;min-height:150px;}\
    #artwl_title{position: relative;height: 27px;border-bottom: 1px solid #999;color:#444;font-size:14px;}\
    #artwl_close{position: absolute;cursor: pointer;outline: none;top: 0;right: 0;z-index: 4; 42px;height: 42px;overflow: hidden;background-image: url(/Images/thickboxclose.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>");
    }
    else{
    $("#artwl_boxcontain").remove();
    $("body").append(boxcontain);
    }

    if (options.title != "") {
    $("#artwl_title").html(options.title);
    }
    if (options.content != "") {
    $("#artwl_message").html(options.content);
    }

    if($(window).width()>parseInt(options.width)){
    $("#artwl_boxcontain").css("width",options.width);
    }
    else{
    $("#artwl_boxcontain").css("width",$(window).width()-40+"px");
    }
    var height = $("#artwl_boxcontain").height();
    var width = $("#artwl_boxcontain").width();
    $("#artwl_mask").css("height",$("body").height()>$(window).height()?$("body").height():$(window).height()+"px").show();

    $("#artwl_boxcontain").css("top", ($(window).height() - height) / 2+$(document).scrollTop()).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);

      测试地址:

  • 相关阅读:
    H50062:meta 定义浏览器的渲染方式
    PHPJN0004:PHP文件上传被安全狗拦截处理
    APP0006- 提示弹窗
    MySQL0002:命令行操作数据库常用命令
    APP0005- data属性的定义
    CSS0018: 字体超长自动隐藏
    JS_0041:JS加载JS文件 异步同步加载js文件
    CSS0017: DIV 上下左右都居中样式
    CSS0016: 多个DIV并排均匀分布 box-sizing
    H50061:html 中引入外部 html 片段
  • 原文地址:https://www.cnblogs.com/artwl/p/2376099.html
Copyright © 2011-2022 走看看