123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857 |
- /**
- +-------------------------------------------------------------------
- * jQuery thinkbox - 弹出层插件 - http://zjzit.cn/thinkbox
- +-------------------------------------------------------------------
- * @version 1.0.0 beta2
- * @since 2013.05.10
- * @author 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
- * @github https://github.com/Aoiujz/thinkbox.git
- +-------------------------------------------------------------------
- */
- (function($){
- var
- /* 当前脚本文件名 */
- __FILE__ = $("script").last().attr("src"),
- /* 弹出层对象 */
- ThinkBox,
- /* 弹出层默认选项 */
- defaults = {
- "style" : "default", //弹出层样式
- "title" : null, // 弹出层标题
- "fixed" : true, // 是否使用固定定位(fixed)而不是绝对定位(absolute),IE6不支持。
- "center" : true, // 弹出层是否屏幕中心显示
- "display" : true, // 创建后是否立即显示
- "x" : 0, // 弹出层 x 坐标。 当 center 属性为 true 时此属性无效
- "y" : 0, // 弹出层 y 坐标。 当 center 属性为 true 时此属性无效
- "modal" : true, // 弹出层是否设置为模态。设置为 true 将显示遮罩背景
- "modalClose" : true, // 点击模态背景是否关闭弹出层
- "resize" : true, // 是否在窗口大小改变时重新定位弹出层位置
- "unload" : false, // 关闭后是否卸载
- "escHide" : true, // 按ESC是否关闭弹出层
- "delayClose" : 0, // 延时自动关闭弹出层 0表示不自动关闭
- "drag" : false, // 点击标题框是否允许拖动
- "width" : "", // 弹出层内容区域宽度 空表示自适应
- "height" : "", // 弹出层内容区域高度 空表示自适应
- "dataEle" : "", // 弹出层绑定到的元素,设置此属性的弹出层只允许同时存在一个
- "locate" : ["left", "top"], //弹出层位置属性
- "show" : ["fadeIn", "normal"], //显示效果
- "hide" : ["fadeOut", "normal"], //关闭效果
- "actions" : ["minimize", "maximize", "close"], //窗口操作按钮
- "tools" : false, //是否创建工具栏
- "buttons" : {}, //工具栏默认按钮 仅tools为true时有效
- "beforeShow" : $.noop, //显示前的回调方法
- "afterShow" : $.noop, //显示后的回调方法
- "afterHide" : $.noop, //隐藏后的回调方法
- "beforeUnload": $.noop, //卸载前的回调方法
- "afterDrag" : $.noop //拖动停止后的回调方法
- },
- /* 弹出层层叠高度 */
- zIndex = 2013,
- /* 弹出层语言包 */
- lang = {},
- /* 弹出层列表 */
- lists = {},
- /* 弹出层容器 */
- wrapper = [
- "<div class=\"thinkbox\" style=\"position:fixed\">",
- //使用表格,可以做到良好的宽高自适应,而且方便低版本浏览器做圆角样式
- "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">",
- "<tr>",
- "<td class=\"thinkbox-top-left\"></td>", //左上角
- "<td class=\"thinkbox-top\"></td>", //上边
- "<td class=\"thinkbox-top-right\"></td>", //右上角
- "</tr>",
- "<tr>",
- "<td class=\"thinkbox-left\"></td>", //左边
- "<td class=\"thinkbox-inner\">", //弹出层inner
- "<div class=\"thinkbox-title\"></div>", //弹出层标题栏
- "<div class=\"thinkbox-body\"></div>", //弹出层body
- "<div class=\"thinkbox-tools\"></div>", //弹出层工具栏
- "</td>",
- "<td class=\"thinkbox-right\"></td>", //右边
- "</tr>",
- "<tr>",
- "<td class=\"thinkbox-bottom-left\"></td>", //左下角
- "<td class=\"thinkbox-bottom\"></td>", //下边
- "<td class=\"thinkbox-bottom-right\"></td>", //右下角
- "</tr>",
- "</table>",
- "</div>"].join(""),
- /* document和window对象分别对应的jQuery对象 */
- _doc = $(document), _win = $(window);
- /* 加载指定的CSS文件 */
- function includeCss(css, onload){
- var path = __FILE__.slice(0, __FILE__.lastIndexOf("/"));
- if($("link[href='" + path + css + "']").length){
- fire(onload);
- return;
- };
- //加载CSS文件
- $("<link/>")
- .load(function(){fire(onload)})
- .attr({
- "href" : path + css + "?" + Math.random(),
- "type" : "text/css",
- "rel" : "stylesheet"
- }).appendTo("head");
- }
- /* 获取屏幕可视区域的大小和位置 */
- function viewport(){
- return {
- "width" : _win.width(),
- "height" : _win.height(),
- "left" : _win.scrollLeft(),
- "top" : _win.scrollTop()
- };
- }
- /* 调用回调函数 */
- function fire(event, data){
- if($.isFunction(event))
- return event.call(this, data);
- }
- /* 删除options中不必要的参数 */
- function del(keys, options){
- if($.isArray(keys)){ //删除多个
- for(i in keys){
- _(keys[i]);
- }
- } else { //删除一个
- _(keys);
- }
- //从options中删除一个指定的元素
- function _(key){
- if(key in options) delete options[key];
- }
- }
- /* 禁止选中文字 */
- function unselect(){
- var element = $("body")[0];
- element.onselectstart = function() {return false}; //ie
- element.unselectable = "on"; // ie
- element.style.MozUserSelect = "none"; // firefox
- element.style.WebkitUserSelect = "none"; // chrome
- }
- /* 允许选中文字 */
- function onselect(){
- var element = $("body")[0];
- element.onselectstart = function() {return true}; //ie
- element.unselectable = "off"; // ie
- element.style.MozUserSelect = ""; // firefox
- element.style.WebkitUserSelect = ""; // chrome
- }
- /* 设置为当前选中的弹出层对象 */
- function setCurrent(){
- var options = lists[this.key][0], box = lists[this.key][1];
- if(lists.current != this.key){
- lists.current = this.key;
- options.modal && box.data("ThinkBoxModal").css({"zIndex": zIndex-1})
- box.css({"zIndex": zIndex++});
- }
- }
- /* 卸载弹出层容器 */
- function unload(){
- var options = lists[this.key][0], box = lists[this.key][1];
- fire.call(this, options.beforeUnload); //卸载前的回调方法
- options.modal && box.data("ThinkBoxModal").remove();
- box.remove();
- _win.off("resize." + this.key);
- delete lists[this.key];
- options.dataEle && $(options.dataEle).removeData("ThinkBox");
- }
- /* 安装模态背景 */
- function setupModal(){
- var self = this,
- options = lists[this.key][0],
- box = lists[this.key][1],
- modal = box.data("ThinkBoxModal");
- //存在隐藏的遮罩层则直接显示
- if(modal){
- modal.show();
- return;
- }
- modal = $("<div class=\"thinkbox-modal-blackout-" + options.style + "\"></div>")
- .css({
- "zIndex" : zIndex++,
- "position" : "fixed",
- "left" : 0,
- "top" : 0,
- "right" : 0,
- "bottom" : 0
- })
- .click(function(event){
- options.modalClose && lists.current == self.key && self.hide();
- event.stopPropagation();
- })
- .mousedown(function(event){event.stopPropagation()})
- .appendTo($("body"));
- box.data("ThinkBoxModal", modal);
- }
- /* 安装标题栏 */
- function setupTitleBar() {
- var title = $(".thinkbox-title", lists[this.key][1]), options = lists[this.key][0];
- if(options.title){
- //拖动弹出层
- if (options.drag) {
- title.addClass("thinkbox-draging");
- drag.call(this, title);
- }
- this.setTitle(options.title);
- //安装窗口操作按钮
- setupWindowActions.call(this, title);
- } else {
- title.remove();
- }
- }
- /* 安装弹出层操作按钮 */
- function setupWindowActions(title){
- var actions, button, action, options = lists[this.key][0], self = this;
- if(options.actions && $.isArray(options.actions)){
- actions = $("<div/>").addClass("thinkbox-window-actions").appendTo(title)
- .on("click", "button", function(){
- if(!$(this).hasClass("disabled")){
- switch(this.name){
- case "minimize": //最小化
- self.minimize(this);
- break;
- case "maximize": //最大化
- self.maximize(this);
- break;
- case "close": //关闭
- self.hide();
- break;
- }
- }
- })
- .on("mousedown mouseup", function(event){event.stopPropagation()});
- for(i in options.actions){
- button = options.actions[i];
- action = $("<button/>").appendTo(actions).addClass("thinkbox-actions-" + button)
- .attr("name", button) //设置名称
- .attr("title", button) //设置title
- .text(lang[button] || button); //设置显示文本
- }
- }
- }
- /* 拖动弹出层 */
- function drag(title){
- var draging = null, self = this, options = lists[this.key][0], box = lists[this.key][1];
- _doc.mousemove(function(event){
- draging &&
- box.css({left: event.pageX - draging[0], top: event.pageY - draging[1]});
- });
- title.mousedown(function(event) {
- var offset = box.offset();
- if(options.fixed){
- offset.left -= _win.scrollLeft();
- offset.top -= _win.scrollTop();
- }
- unselect(); //禁止选中文字
- draging = [event.pageX - offset.left, event.pageY - offset.top];
- }).mouseup(function() {
- draging = null;
- onselect(); //允许选中文字
- fire.call(self, options.afterDrag); //拖动后的回调函数
- });
- }
- /* 安装工具栏 */
- function setupToolsBar() {
- var tools = $(".thinkbox-tools", lists[this.key][1]),
- options = lists[this.key][0], button, self = this;
- if(options.tools){
- if(options.buttons && $.isPlainObject(options.buttons)){
- for(name in options.buttons){
- this.addToolsButton(name, options.buttons[name]);
- }
- /* 绑定按钮点击事件 */
- tools.on("click", "button", function(){
- if(!$(this).hasClass("disabled")){
- if(false === options.buttons[this.name][2].call(self)){
- return;
- }
- /* 执行默认事件 */
- switch(this.name){
- case "close":
- case "cancel":
- self.hide(false);
- break;
- case "submit":
- self.find("form").submit();
- break;
- }
- }
- });
- }
- } else {
- tools.remove();
- }
- }
- /**
- * 构造方法,用于实例化一个新的弹出层对象
- +----------------------------------------------------------
- * element 弹出层内容元素
- * options 弹出层选项
- +----------------------------------------------------------
- */
- ThinkBox = function(element, options){
- var self = this, options, box, boxLeft; //初始化变量
- options = $.extend({}, defaults, options || {}); //合并配置选项
- /* 创建弹出层容器 */
- box = $(wrapper).addClass("thinkbox-" + options.style).data("thinkbox", self);
- /* 保存弹出层基本信息到全局变量 */
- this.key = "thinkbox_" + new Date().getTime() + (Math.random() + "").substr(2,12);
- lists[this.key] = [options, box];
- /* 缓存弹出层,防止弹出多个 */
- options.dataEle && $(options.dataEle).data("thinkbox", self);
- /**
- * 给box绑定事件
- * 鼠标按下记录当前弹出层对象
- * 鼠标点击阻止事件冒泡
- */
- box.on("click mousedown", function(event){
- setCurrent.call(self);
- event.stopPropagation();
- });
- /* 设置弹出层位置属性 */
- options.fixed || box.css("position", "absolute");
- /* 安装弹出层相关组件 */
- setupTitleBar.call(self); // 安装标题栏
- setupToolsBar.call(self);// 安装工具栏
- /* 自动加载css文件并显示弹出层 */
- includeCss("/skin/" + options.style + "/style.css", function(){
- box.hide().appendTo("body"); //放入body
- /* 解决拖动出浏览器时左边不显示的BUG */
- boxLeft = $(".thinkbox-left", box).width();
- boxLeft && $(".thinkbox-left", box).append($("<div/>").css("width", boxLeft));
- self.setSize(options.width, options.height);
- self.setContent(element || "<div></div>"); //设置内容
- options.display && self.show();
- });
- }; //END ThinkBox
- /**
- * 注册ThinkBox开放API接口
- */
- ThinkBox.prototype = {
- /* 显示弹出层 */
- "show" : function(){
- var self = this, options = lists[this.key][0], box = lists[this.key][1];
- if(box.is(":visible")) return this;
- options.modal && setupModal.call(this); // 安装模态背景
- fire.call(this, options.beforeShow); //调用显示之前回调函数
- //显示效果
- switch(options.show[0]){
- case "slideDown":
- box.stop(true, true).slideDown(options.show[1], _);
- break;
- case "fadeIn":
- box.stop(true, true).fadeIn(options.show[1], _);
- break;
- default:
- box.show(options.show[1], _);
- }
- //窗口大小改变后重设位置和大小
- options.resize && _win.on("resize." + self.key, function(){
- self.setSize(options.width, options.height);
- self.resetLocate();
- });
- setCurrent.call(this);
- return this;
- function _(){
- options.delayClose &&
- $.isNumeric(options.delayClose) &&
- setTimeout(function(){
- self.hide();
- }, options.delayClose);
- //调用显示后的回调方法
- fire.call(self, options.afterShow);
- }
- },
- /* 关闭弹出层 data 为传递给关闭后回调函数的额外数据 */
- "hide" : function(data){
- var self = this, options = lists[this.key][0], box = lists[this.key][1], modal;
- if(!box.is(":visible")) return this;
- //隐藏遮罩层
- modal = box.data("ThinkBoxModal");
- modal && modal.fadeOut();
- //影藏效果
- switch(options.hide[0]){
- case "slideUp":
- box.stop(true, true).slideUp(options.hide[1], _);
- break;
- case "fadeOut":
- box.stop(true, true).fadeOut(options.hide[1], _);
- break;
- default:
- box.hide(options.hide[1], _);
- }
- return this;
- function _() {
- fire.call(self, options.afterHide, data); //隐藏后的回调方法
- options.unload && unload.call(self);
- }
- },
- /* 显示或隐藏弹出层 */
- "toggle" : function(){
- return lists[this.key][1].is(":visible") ? self.hide() : self.show();
- },
- /* 在弹出层内容中查找 */
- "find" : function(selector){
- var content = $(".thinkbox-body", lists[this.key][1]);
- return selector ? $(selector, content) : content.children();
- },
- /* 获取弹出层内容 */
- "getContent" : function(){
- return $(".thinkbox-body", lists[this.key][1]).html()
- },
- /* 设置弹出层内容 */
- "setContent" : function(content){ //设置弹出层内容
- var options = lists[this.key][0];
- $(".thinkbox-body", lists[this.key][1]).empty().append($(content).show()); // 添加新内容
- this.resetLocate(); //设置弹出层显示位置
- return this;
- },
- /* 设置弹出层内容区域大小 */
- "setSize" : function(width, height){
- var width = $.isFunction(width) ? width.call(this) : width,
- height = $.isFunction(height) ? height.call(this) : height;
- $(".thinkbox-body", lists[this.key][1]).css({"width" : width, "height" : height});
- return this;
- },
- /* 移动弹出层到屏幕中间 */
- "moveToCenter" : function() {
- var size = this.getSize(),
- view = viewport(),
- overflow = lists[this.key][1].css("position") == "fixed" ? [0, 0] : [view.left, view.top],
- x = overflow[0] + view.width / 2,
- y = overflow[1] + view.height / 2;
- this.moveTo(x - size[0] / 2, y - size[1] / 2);
- return this;
- },
- /* 移动弹出层到指定坐标 */
- "moveTo" : function (x, y) {
- var box = lists[this.key][1], options = lists[this.key][0];
- $.isNumeric(x) &&
- (options.locate[0] == "left" ? box.css({"left" : x}) : box.css({"right" : x}));
- $.isNumeric(y) &&
- (options.locate[1] == "top" ? box.css({"top" : y}) : box.css({"bottom" : y}));
- return this;
- },
- /* 获取弹出层尺寸 */
- "getSize" : function (){
- var size = [0, 0], box = lists[this.key][1];
- if(box.is(":visible")) //获取显示的弹出层尺寸
- size = [box.width(), box.height()];
- else { //获取隐藏的弹出层尺寸
- box.css({"visibility" : "hidden", "display" : "block"});
- size = [box.width(), box.height()];
- box.css({"visibility" : "visible", "display" : "none"});
- }
- return size;
- },
- /* 设置弹出层标题 */
- "setTitle" : function(title){
- $(".thinkbox-title", lists[this.key][1]).empty().append("<span>" + title + "</span>");
- return this;
- },
- /* 重置弹出层位置 */
- "resetLocate" : function(){
- var options = lists[this.key][0];
- options.center ?
- this.moveToCenter() :
- this.moveTo(
- $.isNumeric(options.x) ?
- options.x :
- ($.isFunction(options.x) ? options.x.call($(options.dataEle)) : 0),
- $.isNumeric(options.y) ?
- options.y :
- ($.isFunction(options.y) ? options.y.call($(options.dataEle)) : 0)
- );
- return this;
- },
- /* 设置状态栏信息 */
- "setStatus" : function(content, name){
- var options = lists[this.key][0],
- box = lists[this.key][1],
- name = name ? "thinkbox-status-" + name : "", status;
- /* 存在工具栏则显示状态信息 */
- if(options.tools){
- $(".thinkbox-status", box).remove();
- status = $("<div class=\"thinkbox-status\">").addClass(name).html(content);
- $(".thinkbox-tools", box).prepend(status);
- }
- return this;
- },
- /* 添加一个按钮 */
- "addToolsButton" : function(name, config){
- var options = lists[this.key][0],
- box = lists[this.key][1], button;
- /* 存在工具栏则创建button */
- if(options.tools){
- button = $("<button/>").attr("name", name).text(config[0]);
- config[1] && button.addClass("thinkbox-button-" + config[1]);
- if(!$.isFunction(config[2])){config[2] = $.noop};
- $(".thinkbox-tools", box).append(button);
- }
- return this;
- },
- /* 重置一个按钮 */
- "setToolsButton" : function(oldName, newName, config){
- var options = lists[this.key][0],
- box = lists[this.key][1], button;
- button = $(".thinkbox-tools", box).find("button[name=" + oldName + "]", box)
- .attr("name", newName).text(config[0]);
- options.buttons[newName] = config;
- config[1] && button.removeClass().addClass("thinkbox-button-" + config[1]);
- if(!$.isFunction(config[2])){config[2] = $.noop};
- return this;
- },
- /* 卸载一个按钮 */
- "removeToolsButton" : function(name){
- $(".thinkbox-tools", lists[this.key][1]).find("button[name='" + name + "']").remove();
- return this;
- },
- /* 禁用一个按钮 */
- "disableToolsButton" : function(name){
- $(".thinkbox-tools", lists[this.key][1]).find("button[name='" + name + "']")
- .addClass("disabled").attr("disabled", "disabled");
- return this;
- },
- /* 启用一个按钮 */
- "enableToolsButton" : function(name){
- $(".thinkbox-tools", lists[this.key][1]).find("button[name='" + name + "']")
- .removeClass("disabled").removeAttr("disabled", "disabled");
- return this;
- },
- /* 最小化弹出层 */
- "minimize" : function(){
- return this;
- },
- /* 最大化弹出层 */
- "maximize" : function(){
- return this;
- }
- }
- /* 按ESC关闭弹出层 */
- _doc.mousedown(function(){lists.current = null})
- .keydown(function(event){
- lists.current
- && lists[lists.current][0].escHide
- && event.keyCode == 27
- && lists[lists.current][1].data("thinkbox").hide();
- });
- /**
- * 创建一个新的弹出层对象
- +----------------------------------------------------------
- * element 弹出层内容元素
- * options 弹出层选项
- +----------------------------------------------------------
- */
- $.thinkbox = function(element, options){
- if($.isPlainObject(options) && options.dataEle){
- var data = $(options.dataEle).data("thinkbox");
- if(data) return options.display === false ? data : data.show();
- }
- return new ThinkBox(element, options);
- }
- /**
- +----------------------------------------------------------
- * 弹出层内置扩展
- +----------------------------------------------------------
- */
- $.extend($.thinkbox, {
- /**
- * 设置弹出层默认参数
- * @param {string} name 配置名称
- * @param {string} value 配置的值
- */
- "defaults" : function(name, value){
- if($.isPlainObject(name)){
- $.extend(defaults, name);
- } else {
- defaults[name] = value;
- }
- },
- // 以一个URL加载内容并以ThinBox弹出层的形式展现
- "load" : function(url, opt){
- var options = {
- "clone" : false,
- "loading" : "加载中...",
- "type" : "GET",
- "dataType" : "text",
- "cache" : false,
- "onload" : undefined
- }, self, ajax, onload, loading, url = url.split(/\s+/);
- $.extend(options, opt || {}); //合并配置项
- //保存一些参数
- onload = options.onload;
- loading = options.loading;
- //组装AJAX请求参数
- ajax = {
- "data" : options.data,
- "type" : options.type,
- "dataType" : options.dataType,
- "cache" : options.cache,
- "success" : function(data) {
- url[1] && (data = $(data).find(url[1]));
- if($.isFunction(onload))
- data = fire.call(self, onload, data); //调用onload回调函数
- self.setContent(data); //设置内容并显示弹出层
- loading || self.show(); //没有loading状态则直接显示弹出层
- }
- };
- //删除ThinkBox不需要的参数
- del(["data", "type", "cache", "dataType", "onload", "loading"], options);
- self = loading ?
- //显示loading信息
- $.thinkbox("<div class=\"thinkbox-load-loading\">" + loading + "</div>", options) :
- //不显示loading信息则创建后不显示弹出层
- $.thinkbox("<div/>", $.extend({}, options, {"display" : false}));
- $.ajax(url[0], ajax);
- return self;
- },
- // 弹出一个iframe
- "iframe" : function(url, opt){
- var options = {
- "width" : 500,
- "height" : 400,
- "scrolling" : "no",
- "onload" : undefined
- }, self, iframe, onload;
- $.extend(options, opt || {}); //合并配置项
- onload = options.onload; //设置加载完成后的回调方法
- //创建iframe
- iframe = $("<iframe/>").attr({
- "width" : options.width,
- "height" : options.height,
- "frameborder" : 0,
- "scrolling" : options.scrolling,
- "src" : url})
- .load(function(){fire.call(self, onload)});
- del(["width", "height", "scrolling", "onload"], options);//删除不必要的信息
- self = $.thinkbox(iframe, options);
- return self;
- },
- // 提示框 可以配合ThinkPHP的ajaxReturn
- "tips" : function(msg, type, opt){
- var options = {
- "modalClose" : false,
- "escHide" : false,
- "unload" : true,
- "close" : false,
- "delayClose" : 1000
- }, html;
- //数字type转换为字符串type
- switch(type){
- case 0: type = "error"; break;
- case 1: type = "success"; break;
- }
- html = "<div class=\"thinkbox-tips thinkbox-tips-" + type + "\">" + msg + "</div>";
- $.extend(options, opt || {});
- return $.thinkbox(html, options);
- },
- // 成功提示框
- "success" : function(msg, opt){
- return this.tips(msg, "success", opt);
- },
- // 错误提示框
- "error" : function(msg, opt){
- return this.tips(msg, "error", opt);
- },
- // 数据加载
- "loading" : function(msg, opt){
- var options = opt || {};
- options.delayClose = 0;
- return this.tips(msg, "loading", options);
- },
- //消息框
- "msg" : function(msg, opt){
- var options = {
- "drag" : false,
- "escHide" : false,
- "delayClose" : 0,
- "center" : false,
- "title" : "消息",
- "x" : 0,
- "y" : 0,
- "locate" : ["right", "bottom"],
- "show" : ["slideDown", "slow"],
- "hide" : ["slideUp", "slow"]
- }, html;
- $.extend(options, opt || {});
- html = $("<div/>").addClass("thinkbox-msg").html(msg);
- return $.thinkbox(html, options);
- },
- //提示框
- "alert" : function(msg, opt){
- var options = {
- "title" : lang.alert || "Alert",
- "modal" : true,
- "modalClose" : false,
- "unload" : false,
- "tools" : true,
- "actions" : ["close"],
- "buttons" : {"ok" : [lang.ok || "Ok", "blue", function(){this.hide()}]}
- };
- $.extend(options, opt || {});
- //删除ThinkBox不需要的参数
- del("ok", options);
- var html = $("<div/>").addClass("thinkbox-alert").html(msg);
- return $.thinkbox(html, options);
- },
- //确认框
- "confirm" : function(msg, opt){
- var options = {"title" : "确认", "modal" : false, "modalClose" : false},
- button = {"ok" : "确定", "cancel" : "取消"};
- $.extend(options, opt || {});
- options.ok && (button.ok = options.ok);
- options.cancel && (button.cancel = options.cancel);
- //删除ThinkBox不需要的参数
- del(["ok", "cancel"], options);
- options.buttons = button;
- var html = $("<div/>").addClass("thinkbox-confirm").html(msg);
- return $.thinkbox(html, options);
- },
- //弹出层内部获取弹出层对象
- "get" : function(selector){
- //TODO:通过弹窗内部元素找
- return $(selector).closest(".thinkbox").data("thinkbox");
- }
- });
- $.fn.thinkbox = function(opt){
- if(opt == "get") return $(this).data("thinkbox");
- return this.each(function(){
- var self = $(this), box = self.data("thinkbox"), options, event;
- switch(opt){
- case "show":
- box && box.show();
- break;
- case "hide":
- box && box.hide();
- break;
- case "toggle":
- box && box.toggle();
- break;
- default:
- options = {
- "title" : self.attr("title"),
- "dataEle" : this,
- "fixed" : false,
- "center" : false,
- "modal" : false,
- "drag" : false
- };
- opt = $.isPlainObject(opt) ? opt : {};
- $.extend(options, {
- "x" : function(){return $(this).offset().left},
- "y" : function(){return $(this).offset().top + $(this).outerHeight()}
- }, opt);
- if(options.event){
- self.on(event, function(){
- _.call(self, options);
- return false;
- });
- } else {
- _.call(self, options);
- }
- }
- });
- function _(options){
- var href = this.data("href") || this.attr("href");
- if(href.substr(0, 1) == "#"){
- $.thinkbox(href, options);
- } else if(href.substr(0, 7) == "http://" || href.substr(0, 8) == "https://"){
- $.thinkbox.iframe(href, options);
- } else {
- $.thinkbox.load(href, options);
- }
- }
- }
- })(jQuery);
|