自制的超好用jQ插件,弹层,模态窗口插件2
来源:互联网 发布:sql注入 编辑:程序博客网 时间:2024/06/05 01:54
没想到,我那个代码,自我感觉还可以,主管看了一眼就否定了,
说完全没有拓展性。他说他来改。然后变成这个样子了。这个代码的关键点是这个 return dialogObj;
下面是代码给大家分享下,看看插件是如何写的。
define(['jquery'], function($){ "use strict"; $.extend({ /** * 属性类参数: * type: loading|msg(自定义HTML内容) * timeout: 超时自动关闭(毫秒) * title: 标题 * content: 内容 * class: 弹出框class * width: 弹出框宽度 * height: 弹出框高度 * style: 弹出框内联样式 * noButtons: 是否需要按钮,默认false * * 事件类参数: * init: 弹出框插入body时 * confrim: 用户点击确认时 * close: 弹出框点击关闭时 * show: 弹出框显示时 * hide: 弹出框隐藏时 * * 按钮类buttons: * name: 按钮文字 * btnClass: 按钮样式名 * click: 按钮点击事件 * close: true|false 是否在点击后关闭弹出框 */ dialog: function(setting){ if('string' == typeof(setting) ){ var tmp = {}; tmp.type = 'msg'; tmp.content = setting; setting = tmp; } //事件回调 var _events = { init: setting.init || function(){}, confirm: setting.confirm || function(){}, concel: setting.concel || function(){}, close: setting.close || function(){}, show: setting.show || function(){}, hide: setting.hide || function(){}, }; //属性 var _type = setting.type || 'msg', _timeout = setting.timeout || 0, _title = setting.title || '提示', _content = setting.content || "", _class = setting.class || "", _width = setting.width || '', _height = setting.height || '', _style = setting.style || ";", _buttons = setting.buttons || [], _noButtons = setting.noButtons ||false; //dialog的dom和对象 var dialogDom, dialogObj = {}; dialogObj.resize = function(){ _width = dialogDom.find('.modal-dialog').outerWidth(); // 判断内容层宽度设置居中 if ((_width != undefined && _width != "") || _style.indexOf("width") != -1) { _width = dialogDom.children('.modal-dialog').css("width"); var m_left; switch (_width.replace(/[0-9]/g, "")) { case "px": m_left = -Number(_width.slice(0, -2)) / 2 + "px"; dialogDom.children('.modal-dialog').css("margin-left", m_left); break; case "em": m_left = -Number(_width.slice(0, -2)) / 2 + "em"; dialogDom.children('.modal-dialog').css("margin-left", m_left); break; case "rem": m_left = -Number(_width.slice(0, -3)) / 2 + "rem"; dialogDom.children('.modal-dialog').css("margin-left", m_left); break; case "%": m_left = -Number(_width.slice(0, -1)) / 2 + "%"; dialogDom.children('.modal-dialog').css("margin-left", m_left); break; } } _height = dialogDom.find('.modal-dialog').outerHeight(); //判断内容层高度设置居中 if ((_height != undefined && _height != "") || _style.indexOf("height") != -1) { _height = dialogDom.children('.modal-dialog').css("height"); var m_top; switch (_height.replace(/[0-9]/g, "")) { case "px": m_top = -Number(_height.slice(0, -2)) / 2 + "px"; dialogDom.children('.modal-dialog').css("margin-top", m_top); break; case "em": m_top = -Number(_height.slice(0, -2)) / 2 + "em"; dialogDom.children('.modal-dialog').css("margin-top", m_top); break; case "rem": m_top = -Number(_height.slice(0, -3)) / 2 + "rem"; dialogDom.children('.modal-dialog').css("margin-top", m_top); break; case "%": m_top = -Number(_height.slice(0, -1)) / 2 + "%"; dialogDom.children('.modal-dialog').css("margin-left", m_top); break; } } } dialogObj.append = function(dialogHtml){ dialogDom = $('<div class="modal-wrap">' + dialogHtml + '<div class="modal-bg"></div></div>'); dialogObj.hide(); $('body').append(dialogDom); _events.init(dialogDom); return dialogObj; } dialogObj.show = function(){ dialogDom.show(); $('body').addClass('noscroll'); _events.show(dialogDom, dialogObj); dialogDom.find('.btn-focus').focus(); return dialogObj; } dialogObj.hide = function(){ dialogDom.hide(); if($('.modal-wrap') <= 1){ $('body').removeClass('noscroll') } _events.hide(dialogDom, dialogObj); return dialogObj; } dialogObj.close = function(){ dialogObj.hide(); dialogDom.remove(); _events.close(); return dialogObj; } if( _type == 'msg' && _buttons.length < 1 &&_noButtons == false){ _buttons = [{name: '确认', btnClass: 'dialog-ok', click: _events.confirm, focus: true}] } var buttonsHtml = []; $(_buttons).each(function(i){ this.btnClass += _buttons[i].focus? ' btn-focus' : ''; buttonsHtml.push('<a href="javascript:void(0)" data-btn-index="' + i + '" class="btn dialog-default '+ this.btnClass + '">' + this.name + '</a>'); }) buttonsHtml = buttonsHtml.join('\n'); var dialogHtml = ''; switch(_type){ case 'loading': dialogHtml = '<div class="modal-loadimg">\n' + ' <img src="images/gears.gif" alt="">\n' + ' <p class="load-text">正在读取数据...</p>\n' + '</div>\n'; break; case 'msg': dialogHtml = '<div class="modal-dialog dialog-tipsbox '+ _class + '" style="' + 'width:' + _width + ';height:' + _height + ';'+_style + '">' + ' <h4 class="modal-title">' + ' <i class="fa fa-info-circle"></i>' + ' <span class="dialog-title">' + _title + '</span>' + ' <span class="modal-close">×</span>' + ' </h4>' + ' <div class="modal-inner">' + ' <div class="dialog-text">' + _content + '</div>' + ' <div class="dialog-btn-group">'+ buttonsHtml +'</div>\n' + ' </div>\n' + '</div>'; break; default: break; } dialogObj.append(dialogHtml) dialogDom.find('.dialog-btn-group > a').each(function(){ var button = $(this); var i = button.attr('data-btn-index'); button.click(function(){ _buttons[i].click(); if(typeof(_buttons[i].close) == 'undefined' || _buttons[i].close){ dialogObj.close() } }); }) //使title可以拖动。 var title = dialogDom.find('.modal-title'); var move = false; //移动标记 var _x, _y,//鼠标离控件左上角的相对位置 x, y; //对话框实时的位置 title.mousedown(function(e) { move = true; _x = e.pageX - parseInt(dialogDom.css("left")); _y = e.pageY - parseInt(dialogDom.css("top")); }); $(document).mousemove(function(e) { if (move) { x = e.pageX - _x; //控件左上角到屏幕左上角的相对位置 y = e.pageY - _y; dialogDom.css({ "top": y, "left": x }); } }).mouseup(function() { move = false; }); dialogDom.find('.dialog-ok').focus(); dialogDom.find('.modal-close').click(function() { dialogObj.close(); // 传this到function }); dialogObj.show(); if(_timeout > 0){ setTimeout(function(){ dialogObj.close() }, _timeout); } dialogObj.resize(); return dialogObj; } })})
0 0
- 自制的超好用jQ插件,弹层,模态窗口插件2
- 自制的超好用jQ插件,弹层,模态窗口插件
- 异步弹出窗口的jq插件-asyncbox
- 自制图片预加载jq插件
- 自制的mousewheel插件
- jq插件的原理
- JQ插件
- jq插件
- jq的插件的写法
- jq插件的编写方法(自定义jq插件)
- jq插件validate的使用
- JQ验证插件的使用
- 【前端】jq插件的编写
- 封装自己的jq插件
- JQ放大镜插件的调用
- 弹出层窗口插件:WBOX的优点和陷井
- JQ插件第四十三:网页内容自适应窗口大小
- iframe弹层插件
- linux下mysql的安装
- POJ 2677 双调欧几里得旅行商问题
- iOS巅峰之点击UIAlertView的灰色部分也能dismiss消失
- 安卓Timpicker样式修改、多版本适配、ScrollView滑动冲突
- 剑指offer 28题 【分解让复杂问题简单】字符串的排列
- 自制的超好用jQ插件,弹层,模态窗口插件2
- 统计apk方法数的jar包
- 过滤器核心代码
- 谢希仁版TCP/IP学习笔记
- Chrome渲染分析之Timeline工具的使用
- android 进程间通信之aidl
- Android快速实现文件下载(只有4行代码)
- HDU 1394 线段树
- 2016年7月20日 第三天