jquery Dialog弹框插件
function Dialog(options) {
var defaults = {
// 默认值。
title: '', // 标题文本,若不想显示title请通过CSS设置其display为none
type: 'text', // id,img,iframe,url,text
content: '', // 要显示的内容
showTitle: true, // 是否显示标题栏。
closeText: '关闭', // 关闭按钮文字,若不想显示关闭按钮请通过CSS设置其display为none
closeClass: '',
buttons: null, //按钮,
topOffset: 0,
padding: 0,
//width: 250,
//height: 100,
position: "center", // 弹出框位置 'center', 'left', 'right', 'top', 'bottom',
draggable: false, // 是否移动
modal: true, // 是否是模态对话框
fixed: false, // 是否跟随页面滚动。
time: 0, // 自动关闭时间,为0表示不会自动关闭。
id: false, // 对话框的id,若为false,则由系统自动产生一个唯一id。
transparent: false
};
options = $.extend(defaults, options);
options.id = options.id ? options.id : 'dialog-' + Dialog.__count; // 唯一ID
var overlayId = options.id + '-overlay'; // 遮罩层ID
var timeId = null; // 自动关闭计时器
var isShow = false;
var isIe = /msie/.test(navigator.userAgent.toLowerCase());
var isIe6 = 'undefined' == typeof (document.body.style.maxHeight);
var self = this;
/* 对话框的布局及标题内容。*/
var wrapper = $("<div class=\"wrapper\" style=\"position:relative; overflow:hidden; text-align:left;\">");
if (options.width) {
wrapper.width(options.width);
}
if (options.height) {
wrapper.height(options.height);
}
if (options.background) {
wrapper.css("background", options.background);
}
var dialog = $('<div id="' + options.id + '" class="dialog"></div>').hide();
if (options.transparent) {
dialog.addClass("transparent");
options.showTitle = false;
}
var bar = null;
if (options.showTitle == false) {
bar = $('<a href="javascript:;" title="Close" class="close ' + options.closeClass + '"></a>');
bar.css('z-index', ++Dialog.__zindex);
dialog.append(bar);
} else {
bar = $('<div class="bar"><span class="title">' + options.title + '</span><a class="close ' + options.closeClass + '">' + options.closeText + '</a></div>');
if (options.draggable) {
bar.css({ cursor: "move" });
}
wrapper.append(bar);
}
wrapper.append('<div class="content"></div>');
if (options.padding > 0) {
$(".content", wrapper).css("padding", options.padding + "px");
}
var buttons = $('<div class="buttons"></div>');
if (options.buttons != null) {
$(options.buttons).each(function () {
var item = this;
var button = $('<input type="button" class="w-btn">');
button.val(item.name);
if (item.handler) {
button.click(function () {
item.handler(item.name, self);
});
}
buttons.append(button);
});
wrapper.append(buttons);
}
dialog.append(wrapper);
$('body').append(dialog);
/**
* 重置对话框的位置。
*
* 主要是在需要居中的时候,每次加载完内容,都要重新定位
*
* @return void
*/
var resetPos = function () {
if (typeof options.position == 'string') {
switch (options.position.toLowerCase()) {
case 'center':
var left = ($(window).width() - dialog.width()) / 2;
var top = ($(window).height() - dialog.height()) / 2;
if (!isIe6 && options.fixed) {
dialog.css({ top: top + options.topOffset, left: left });
} else {
dialog.css({ top: top + $(document).scrollTop() + options.topOffset, left: left + $(document).scrollLeft() });
}
break;
}
} else if (typeof options.position == 'object') {
dialog.css({ left: options.position[0], top: options.position[1] });
}
};
/**
* 初始化位置及一些事件函数。
*
* 其中的this表示Dialog对象而不是init函数。
*/
var init = function () {
/* 是否需要初始化背景遮罩层 */
if (options.modal) {
$('body').append('<div id="' + overlayId + '" class="dialog-overlay"></div>');
$('#' + overlayId).css({
'left': 0, 'top': 0,
/*'width':$(document).width(),*/
'width': '100%',
/*'height':'100%',*/
'height': $(document).height(),
'z-index': ++Dialog.__zindex,
'position': 'fixed'
}).hide();
}
dialog.css({ 'z-index': ++Dialog.__zindex, 'position': options.fixed ? 'fixed' : 'absolute' });
/* IE6 兼容fixed代码 */
if (isIe6 && options.fixed) {
dialog.css('position', 'absolute');
resetPos();
var top = parseInt(dialog.css('top')) - $(document).scrollTop();
var left = parseInt(dialog.css('left')) - $(document).scrollLeft();
$(window).scroll(function () {
dialog.css({ 'top': $(document).scrollTop() + top, 'left': $(document).scrollLeft() + left });
});
}
/* 以下代码处理框体是否可以移动 */
var mouse = { x: 0, y: 0 };
function moveDialog(event) {
var e = window.event || event;
var top = parseInt(dialog.css('top')) + (e.clientY - mouse.y);
var left = parseInt(dialog.css('left')) + (e.clientX - mouse.x);
dialog.css({ top: top, left: left });
mouse.x = e.clientX;
mouse.y = e.clientY;
};
dialog.find('.bar').mousedown(function (event) {
if (!options.draggable) { return; }
var e = window.event || event;
mouse.x = e.clientX;
mouse.y = e.clientY;
$(document).bind('mousemove', moveDialog);
});
$(document).mouseup(function () {
$(document).unbind('mousemove', moveDialog);
});
/* 绑定一些相关事件。 */
dialog.find('.close').bind('click', this.close);
dialog.bind('mousedown', function () { dialog.css('z-index', ++Dialog.__zindex); });
// 自动关闭
if (0 != options.time) { timeId = setTimeout(this.close, options.time); }
};
this.getDialogObj = function () {
return dialog;
};
/**
* 设置对话框的内容。
*
* @param string c 可以是HTML文本。
* @return void
*/
this.setContent = function (c) {
var div = dialog.find('.content');
switch (c.type.toLowerCase()) {
case 'id': // 将ID的内容复制过来,原来的还在。
div.html($('#' + c.content).html());
if (c.onLoad) {
c.onLoad.apply(self);
}
break;
case 'img':
div.html('<div class="loading"><img src="/images/loading.gif">加载中...</div>');
$('<img alt="" />').load(function () { div.empty().append($(this)); resetPos(); })
.attr('src', c.content);
if (c.onLoad) {
c.onLoad.apply(self);
}
break;
case 'url':
div.html('<div class="loading"><img src="/images/loading.gif">加载中...</div>');
$.ajax({
url: c.content,
success: function (html) {
div.html(html);
resetPos();
if (c.onLoad) {
c.onLoad.apply(self);
}
},
error: function () {
div.html('出错啦');
if (c.onLoad) {
c.onLoad.apply(self);
}
}
});
break;
case 'iframe':
var iframe = $('<iframe frameborder="0" src="' + c.content + '" style="border:0px;display: block;" />');
iframe.load(function () {
iframe.width(options.width);
iframe.height(options.height - bar.outerHeight());
resetPos();
if (c.onLoad) {
c.onLoad.apply(self);
}
});
div.append(iframe);
break;
case 'text':
div.html(c.content);
if (c.onLoad) {
c.onLoad.apply(self);
}
break;
default:
div.html(c);
if (c.onLoad) {
c.onLoad.apply(self);
}
break;
}
}; /**
* 显示对话框
*/
this.show = function () {
/* 是否显示背景遮罩层 */
if (options.modal) {
$('#' + overlayId).show();
}
dialog.fadeIn(500, function () {
if (options.onShow) {
options.onShow.apply(self);
}
isShow = true;
});
// 自动关闭
if (0 != options.time) {
timeId = setTimeout(this.close, options.time);
}
resetPos();
};
/**
* 隐藏对话框。但并不取消窗口内容。
*/
this.hide = function () {
if (!isShow) { return; }
dialog.fadeOut('slow', function () {
if (options.onHide) {
options.onHide.apply(self);
}
});
if (options.modal) {
$('#' + overlayId).fadeOut('slow');
}
isShow = false;
};
/**
* 关闭对话框
*
* @return void
*/
this.close = function () {
dialog.fadeOut('slow', function () {
if (options.onClose) {
options.onClose.apply(self);
}
$(this).remove();
isShow = false;
});
if (options.modal) {
$('#' + overlayId).fadeOut('slow', function () {
$(this).remove();
});
}
clearTimeout(timeId);
};
init.call(this);
this.setContent(options);
Dialog.__count++;
Dialog.__zindex++;
}
Dialog.__zindex = 900;
Dialog.__count = 1;
Dialog.version = '1.0';
jquery Dialog弹框插件的更多相关文章
- jquery Dialog弹框插件使用
var dialog = new Dialog({ title: '购物车', type: 'url', width: 520, content: "Uplolo.aspx", s ...
- 解决 jquery dialog 弹框destroy销毁方法不能把弹出元素设置成初始状态
在使用jquery ui中的dialog弹出窗口的时候遇到一个问题,就是页面弹出窗口关闭后希望表单元素能回到初始状态 例如文本框输入内容后关闭dialog后里面的内容清除,使用了destroy方法也不 ...
- jQuery Dialog弹出层对话框插件
Dialog.js的相关注释已经添加,可以按照注释,进行相关样式的修改,适用于自定义的各个系统! dialog.js /** * jQuery的Dialog插件. * * @param object ...
- 自己写的基于bootstrap风格的弹框插件
自己写的一款基于bootstrap风格的弹框插件,暂时只有确认框.提示框.后续功能扩展.bug修改再更新. ;(function($){ //默认参数 var PARAMS; var DEFAULTP ...
- 非常强大的jQuery万能浮动框插件
支持hover, click, focus以及无事件触发:支持多达12种位置的定位,出界自动调整:支持页面元素加载,Ajax加载,下拉列表,提示层效果,tip类效果等:可自定义装载容器:内置UI不错的 ...
- jQuery实现搜索框插件+豆瓣音乐接口实现豆瓣搜索框
jQuery实现搜索框插件 豆瓣音乐接口实现豆瓣搜索框 豆瓣接口有时不稳定,网络请求会报400,不要惊慌.我主要是练习一下jQuery的JSONP和封装插件. <div class=" ...
- 基于jQuery消息提示框插件Tipso
今天要分享的这款jQuery消息提示框插件名叫Tipso,它的特点是可以定义提示框的显示位置,以及动态改变提示框的提示内容,应该说是一款相当灵活的jQuery消息提示框插件.效果图如下: 在线预览 ...
- vue项目中使用vue-layer弹框插件
vue-layer弹框插件 安装 npm i --save vue-layer 引用 import layer from 'vue-layer' Vue.prototype.$layer = lay ...
- jQuery下拉框插件8种效果
jQuery自定义漂亮的下拉框插件8种效果 jquery美化选择器实例有:边框.下划线. 伸缩 .滑动. 覆盖. 旋转. 弹出层选择 .环形效果. 在线预览 <body class=" ...
随机推荐
- NumPy快速入门笔记
我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,我快速了解了一下NumPy这个科学计算库的使用方法.下面记录相关学习笔记. 简介 NumPy是一个科学计算库.结合Py ...
- Spring国际化
国际化(Internationalization)有时候被简称为i18n,因为有18个字母在国际化的英文单词的字母i和n之间.Spring对国际化的支持示例如下所示. 需要将spring.tld放到工 ...
- MongoDB - Indexing, Replication, and Security
Introduction of Indexes: 1> Provide high performance 2> Provide efficient execution to queries ...
- LINUX服务器下用root登录ftp
因为安全方面的原因,root用户是默认不能登录ftp服务的. 如果一定要用root登录,则: 1.删除或注释/etc/vsftpd.ftpusers中的root 2.删除或注释/etc/vsftpd. ...
- linux下双网卡的绑定
如果服务器上有两快网卡就可以把它绑定为一块虚拟的网卡,如果一块网卡坏了另一块还可以继续工作,增加了冗余度和负载,具体做法如下: 新建一个虚拟的网卡,命令如下: iv /etc/sysconfig/ne ...
- chrome下input文本框自动填充背景问题解决
chrome下input文本框会自动填充背景,只需要给文本框加一个样式即可解决问题 input:-webkit-autofill {-webkit-box-shadow: 0 0 0px 1000px ...
- 华为云照片的爬虫程序更新(python3.6)
一.背景: 每年终都有一个习惯,就是整理资料进行归档,结果发现手机照片全备份在华为云里,在官网上找了一圈,没找到官方的pc工具用来同步照片. 于是找出上次写的程序,看看能不能爬到数据,然而……果然不好 ...
- ES6的介绍和常用语法
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 ECMAScript 是 JS 的语言标准.而 ES6 是新的 J ...
- xpadder教程:自定义设置游戏手柄的图片
关于xpadder设置按键的教程,网上已经很多,我就不凑这个热闹了.这里介绍的是如何自定义设置手柄的图片,就是按钮的背景图,如下图所示: 步骤: 1)准备一张背景图 注意:格式必须是24位色的BMP位 ...
- 多线程编程学习笔记——异步调用WCF服务
接上文 多线程编程学习笔记——使用异步IO 接上文 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端 接上文 多线程编程学习笔记——异步操作数据库 本示例描述了如何创建一个WCF服务,并宿主 ...