jquery.artDialog.source.js学习
1 关键的对象关系
art = jQuery = $ function artDialog() {...} artDialog.fn = artDialog.prototype = artDialog.fn._init.prototype jQuery.fn = jQuery.prototype = jQuery.fn.init.prototype jQuery.extend = jQuery.fn.extend $.fn.dialog = $.fn.artDialog window.artDialog = $.dialog = $.artDialog = artDialog
2 默认配置
artDialog.defaults = { // 消息内容 content: '<div class="aui_loading"><span>loading..</span></div>', title: '\u6d88\u606f', // 标题. 默认'消息' button: null, // 自定义按钮 ok: null, // 确定按钮回调函数 cancel: null, // 取消按钮回调函数 init: null, // 对话框初始化后执行的函数 close: null, // 对话框关闭前执行的函数 okVal: '\u786E\u5B9A', // 确定按钮文本. 默认'确定' cancelVal: '\u53D6\u6D88', // 取消按钮文本. 默认'取消' width: 'auto', // 内容宽度 height: 'auto', // 内容高度 minWidth: 96, // 最小宽度限制 minHeight: 32, // 最小高度限制 padding: '20px 25px', // 内容与边界填充距离 skin: '', // 皮肤名(预留接口,尚未实现) icon: null, // 消息图标名称 time: null, // 自动关闭时间 esc: true, // 是否支持Esc键关闭 focus: true, // 是否支持对话框按钮自动聚焦 show: true, // 初始化后是否显示对话框 follow: null, // 跟随某元素(即让对话框在元素附近弹出) path: _path, // artDialog路径 lock: false, // 是否锁屏 background: '#000', // 遮罩颜色 opacity: .7, // 遮罩透明度 duration: 300, // 遮罩透明度渐变动画速度 fixed: false, // 是否静止定位 left: '50%', // X轴坐标 top: '38.2%', // Y轴坐标 zIndex: 1987, // 对话框叠加高度值(重要:此值不能超过浏览器最大限制) resize: true, // 是否允许用户调节尺寸 drag: true // 是否允许用户拖动位置 };
3 获取某对话框
artDialog.get = function (id) { return id === undefined ? artDialog.list : artDialog.list[id]; };
iframeTools.source.js学习
var _top = artDialog.top // 引用顶层window对象; artDialog.parent = _top; // 兼容v4.1之前版本,未来版本将删除此; _topDialog = _top.artDialog; // 顶层window对象的artDialog对象; artDialog.data // 跨框架数据共享接口,保存在顶层框架下面; artDialog.through = _proxyDialog // 跨框架普通对话框 artDialog.open // 弹出窗口 artDialog.open.api // 引用open方法扩展方法 artDialog.opener // 引用open方法触发来源页面window artDialog.open.origin = artDialog.opener; // 兼容v4.1之前版本,未来版本将删除此 artDialog.close // 关闭对话框 artDialog.alert // 警告对话框 artDialog.confirm // 确认对话框 artDialog.prompt // 输入提示对话框 artDialog.tips // 短暂提示对话框 // 获取源窗口 var winOpener = (art.dialog.opener == window) && window.opener || art.dialog.opener; // 关闭窗口 var api = art.dialog.open.api; api && api.close() || window.close();
JavaScript闭包写法的优势:隐藏实现细节,不污染window对象;
例如:
// 变量a的获取细节被隐藏,这样不会污染window对象; var a = function() { // do something return 1; }(); // 逻辑表达式特殊应用 a && alert("a=" + a); // 创建自己的API并隐藏了实现细节,这样不会污染window对象; ;(function(p1, p2) { // do something // 将自己的对象赋值到window window.xxx = xxx; alert(p1 + "-" + p2); })(1, 2);
常见的对话框实现
结合iframetools.source.js提供的默认实现;
建议使用时候同时导入jquery.artDialog.source.js和iframetools.source.js,由于默认实现的alert是一个警告消息框,这里可以自己去覆盖掉;
artDialog.shake = function () { var style = this.DOM.wrap[0].style, p = [4, 8, 4, 0, -4, -8, -4, 0], fx = function () { style.marginLeft = p.shift() + 'px'; if (p.length <= 0) { style.marginLeft = 0; clearInterval(timerId); }; }; p = p.concat(p.concat(p)); timerId = setInterval(fx, 13); return this; }; artDialog.notice = function (options) { var opt = options || {}, api, aConfig, hide, wrap, top, duration = 800; var config = { id: 'Notice', left: '100%', top: '100%', fixed: true, drag: false, resize: false, follow: null, lock: false, init: function(here){ api = this; aConfig = api.config; wrap = api.DOM.wrap; top = parseInt(wrap[0].style.top); hide = top + wrap[0].offsetHeight; wrap.css('top', hide + 'px') .animate({top: top + 'px'}, duration, function () { opt.init && opt.init.call(api, here); }); }, close: function(here){ wrap.animate({top: hide + 'px'}, duration, function () { opt.close && opt.close.call(this, here); aConfig.close = $.noop; api.close(); }); return false; } }; for (var i in opt) { if (config[i] === undefined) config[i] = opt[i]; }; return artDialog.through(config); }; artDialog.alert = function (content, callback) { return artDialog.through({ id: 'Alert', fixed: true, content: content, ok: true, close: callback }); }; artDialog.warn = function (content, callback) { return artDialog.through({ id: 'Warn', title: '警告', icon: 'warning', fixed: true, lock: true, content: content, ok: true, close: callback }); };