下面是写的简单的Jquery弹窗组件 暂不支持animate,只能满足一般的弹窗显示隐藏需求,更多功能后续会完善!网上及jquery组件很多这样的弹窗,但是用别人的感觉心里过不去,所以就随便写写,当做练习下!代码如下:
/**
 * fileoverview WindowAlert
 * @desc jQuery弹窗组件
 * @param {clickElem} 点击元素
 * @param {container} 弹窗窗口最外层容器
 * 默认配置参数如下:{
     eventType: 'click', // 默认为点击
     closed: '.closed', //关闭按钮
     bgColor: '#000',   //默认颜色
     opacity: '0.5',    // 默认透明度
     position: {
        x: 0, //默认情况下居中
        y: 0
     },
     isScroll: true, //默认情况下 窗口随着滚动而滚动
     isResize: true  // 默认情况下 随着窗口缩放而缩放
 }
 * @callback 回调函数  
 */
 
var WindowAlert = (function(){
    function WindowAlert(clickElem,container,config,callback){
        var self = this,
            isIE6 = navigator.userAgent.match(/MSIE 6.0/)!= null;
        self.isIE6 = isIE6;
        if(!(self instanceof WindowAlert)){
            return new WindowAlert(clickElem,container,config,callback);
        }
        
        // 匹配传参数clickElem
        if($.isPlainObject(clickElem)){
            self.clickElem = clickElem;
        }else if(/^\./.test(clickElem)){
            self.clickElem = $(clickElem);
        }else if(/^#/.test(clickElem)){
            self.clickElem = $(clickElem);
        }else if($('.'+clickElem)){
            self.clickElem = $('.'+clickElem);
        }else {
            throw new Error('传递参数不符合!');
        }

// 匹配传参数container
        if($.isPlainObject(container)){
            self.container = container;
        }else if(/^\./.test(container)){
            self.container = $(container);
        }else if(/^#/.test(container)){
            self.container = $(container);
        }else if($('.'+container)){
            self.container = $('.'+container);
        }else {
            throw new Error('传递参数不符合!');
        }
        config = $.extend(WindowAlert.Config,config || {});
        self.config = config || {};
        self._init();

// 显示后 回调
        callback && callback();

// 点击关闭按钮
        $(self.config.closed).bind('click',function(){
            self.hide();
            $('.kissy-mask').hide();

if(true === isIE6) {
                $('body').css({'filter':'','opacity':'','background-color':'',
                            'position':'','top':'','left':'','z-index':''});
            }
            
        });

// 窗口缩放
        $(window).bind('resize',function(){
            t && clearTimeout(t);
            var t = setTimeout(function(){
                if(!$(self.container).hasClass('hidden') && self.config.isResize){
                    self._showDialog(self.container);
                }
            },200);
        });

// 窗口滚动
        $(window).bind('scroll',function(){
            t && clearTimeout(t);
            var t = setTimeout(function(){
                if(!$(self.container).hasClass('hidden') && self.config.isScroll){
                    self._showDialog(self.container);
                }
            },200);
            
        });
    }
    // 默认配置参数
    
    WindowAlert.Config = {
        eventType: 'click', // 默认为点击
        closed: '.closed', //关闭按钮
        bgColor: '#000',   //默认颜色
        opacity: '0.5',    // 默认透明度
        position: {
            x: 0, //默认情况下居中
            y: 0
        },
        isScroll: true, //默认情况下 窗口随着滚动而滚动
        isResize: true  // 默认情况下 随着窗口缩放而缩放
        
    };
    
    WindowAlert.prototype = {
        
        _init: function(){
            var self = this;
            
            $(self.clickElem).each(function(index,item){
                $(item).bind(self.config.eventType,function(){

if(!self.flag){
                        var div = $('<div class="kissy-mask"></div>');
                        $('body').prepend(div);
                        flag = true;
                    }
                    
                    if(false === self.isIE6) {
                        $('.kissy-mask').css({'opacity':self.config.opacity,'background-color':self.config.bgColor,
                            'position':'fixed','top':0,'left':0,'width':'100%','height':'100%','z-index':1});
                    }else {
                        /**$('body').css({'opacity':self.config.opacity,'background-color':self.config.bgColor,
                            'position':'absolute','top':0,'left':0,'z-index':1}); **/

/* IE6不支持fixed 所以对IE6做特殊的处理下 就空白背景*/
                        $('body').css({'position':'absolute','top':0,'left':0,'z-index':1});
                    }

self.show();
                    self._showDialog(self.container);
                });
            })
            
        },

flag: false,

_showDialog: function(container){
            
            var self = this;
            $(container).css({'position':'absolute','z-index':99999});
            var offsetTop = Math.floor(($(window).height() - $(self.container).height())/2) + $(document).scrollTop(),
                offsetLeft = Math.floor(($(window).width() - $(self.container).width())/2) + $(document).scrollLeft();
            
            // 判断x,y位置默认是不是等于0 如是的话 居中 否则 根据传进来的位置重新定位
            if(0 === self.config.position.x && 0 === self.config.position.y){

$(container).offset({'top':offsetTop, 'left':offsetLeft});
            }else{

$(container).offset({'top':self.config.position.y,'left':self.config.position.x});
            }
            
        },
        hide: function(){
            var self = this;
            if(!$(self.container).hasClass('hidden')){
                $(self.container).addClass('hidden');
            }
        },
        show: function(){
            var self = this;
            if($(self.container).hasClass('hidden')){
                $(self.container).removeClass('hidden');
            }
        },
        
        // 销毁
        destory: function(){
            var self = this;
            $(self.clickElem).each(function(index,item){
                $(item).unbind(self.config.eventType);
            });
            self.clickElem = [];
            self.container = [];
        }
    };
    return WindowAlert;
 })();
 
 调用方式如下 :

new WindowAlert(要点击的元素,弹窗的外层容器,{},function(){
            $('.windowAlert').append('<div class="closed">XXX</div>');
        });

Jquery弹窗组件的更多相关文章

  1. 基于JQ的自定义弹窗组件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引

    因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...

  3. 扩展 jquery miniui 组件实现自动查询数据

    主题 之前写过一篇文章分享了公司basecode查找数据后台是怎么实现的(http://www.cnblogs.com/abcwt112/p/6085335.html).今天想分享一下公司前台是怎么扩 ...

  4. Web jquery表格组件 JQGrid 的使用 - 11.问题研究

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  5. Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数、ColModel API、事件及方法

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  6. Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页、搜索、格式化、自定义按钮

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  7. Web jquery表格组件 JQGrid 的使用 - 6.准备工作 & Hello JQGrid

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  8. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  9. Web jquery表格组件 JQGrid 的使用 - 8.Pager、新增数据、查询、刷新、查看数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

随机推荐

  1. Apollo源码阅读笔记(二)

    Apollo源码阅读笔记(二) 前面 分析了apollo配置设置到Spring的environment的过程,此文继续PropertySourcesProcessor.postProcessBeanF ...

  2. That Nice Euler Circuit(LA3263+几何)

    That Nice Euler Circuit Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu D ...

  3. API接口规范V1.0——制定好规范,才好合作开发

    返回码规范: 统一六位 000000 表示成功! 参数相关返回码预留100000-199999:系统相关返回码预留200000-299999:数据中心310000-319999后续项目以此类推,后续根 ...

  4. echarts环形图,自定义说明文字

    一.代码 app.title = '已安装通讯盒电站统计'; option = { backgroundColor: '#0f0f31',//#0f0f31 title: { show:true, x ...

  5. Python 正则介绍

    正则表达式是一种小型的,高度专业化的变成语言,在 Python 中,它通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的引擎执行. findall() 方法,所有匹配的结 ...

  6. Linux vsftd配置文件

    vi /etc/vsftpd.conf listen=YES userlist_deny=NO userlist_enable=YES anonymous_enable=YES local_enabl ...

  7. JS代码段:返回yyyy-mm-dd hh:mm:ss

    最近做项目的时候正好用到,本着能抄就抄的心态去百度搜索现成的代码, 没想到抄下来的好几个都是错的,要么getMonth没有加1,要么10以下的数字前面没有加0, 我真是日了狗了,这次把写好的正确的直接 ...

  8. MySQL5.7中的sql_mode默认值

    简介 在正常项目开发过程中,如果MySQL版本从5.6升级到5.7版本.作为DBA在考虑数据库版本升级带来的影响时,一般会有几个注意点: sql_mode 默认值的改变 optimizer_switc ...

  9. My strength (C-A-R)

    My strength: I am good at problem resolving Challenge In the first year when I come to America I pas ...

  10. SonarQube 配置 LDAP(AD域)

    安装插件 1.下载 LDAP Plugin 插件,地址:https://docs.sonarqube.org/display/SONARQUBE67/LDAP+Plugin2.将下载的插件,放到 SO ...