JQuery实现自定义对话框的代码


Posted in Javascript onJune 15, 2008

为了得到更丰富的自定义对话框功能,于是用JQuery编写了一个对话框插件;只需简单地引用相关JavaScript就能得到丰富的自定义对话框功能。

插件功能特点:

允许通过CSS进行外观控制。

可以任意把面页的元素作为对话框显示。

当对话框激活时,对话框外的任何元素不能接受鼠标操作。

对话框可以在工作区范围内任意移动,根据工作区大小自适应居中功能。

并不需要编写复杂的JavaScript,通过简单HTML属性描述即可。

经过测试插件可以在Firefox和IE下正常工作。

简单使用描述:

引用JQuery和对话框插件文件:

<script src=jquery-latest.js></script>
<script src=messageBox.js></script> 
定义相关按钮为行:
<input id=”Button4″ type=”button” value=”提问对话框“ showoption=”control:test2;width:220;height:120;title:对话框” />
定义相关对话框显示的内容:
<div id=”test2″ style=”display:none”>
<table style=”width: 200px”>
<tr>
<td >
JQuery模式对话框插件好用吗?</td>
</tr>
<tr>
<td align=”right” >
<input id=”Button2″ onclick=”CloseMessageBox()” type=”button” value=”是” />
<input id=”Button6″ onclick=”CloseMessageBox()” type=”button” value=”否” /></td>
</tr>
</table>
</div>

/* JQuery 模式对话框插件 * writer: FanJianHan (henryfan@msn.com) 
* License: GPL (GPL-LICENSE.txt) licenses. 
*/ 
//是否已初始化过对话框 
var MessageOninit = false; 
//记录body滚动条的x,y偏移量;显示内容的元素对象,显示内容元素对象的父对象 
var MessageBox_scrolltop,MessageBox_scrollleft,Messagebox_AC,MessageBox_PC; 
//对话框对象,对话框宽度,对话框高度 
var MessageBox_win,MessageBox_width,MessageBox_height; 
//对话框是否处于移动状态 
var MessageBox_Moving = false; 

//显示模式提示框 
function ShowMessageBox(option) 
{ 
var container,iframe,enabled,enabledframe; 
var height=400; 
var width =400; 
MessageBox_scrolltop =0; 
MessageBox_scrollleft =0; 
if(!MessageOninit) 
{ 
CreateContainer(option); 
MessageOninit = true; 
$('#messagebox_close').click(function(){ 
CloseMessageBox(); 
}); 
$(window).resize(function(){ 
SetStyle(option); 
SetEnabledStyle(); 

}); 
$(window).scroll(function(e){ 
MessageBox_scrolltop =document.documentElement.scrollTop; 
MessageBox_scrollleft = document.documentElement.scrollLeft; 
SetEnabledStyle(); 
}); 
MessageBox_win = $(”#messagebox_win”); 
$('#messagebox_title').mousedown(handleMouseDown); 
$('#messagebox_title').mouseup(handleMouseUp); 
$('#messagebox_title').mousemove(handleMouseMove); 
document.onmouseup = handleMouseUp; 

} 

if(option.height) 
height = parseInt(option.height); 
if(option.width) 
width = parseInt(option.width); 
MessageBox_height = height; 
MessageBox_width = width; 
Messagebox_AC = $('#'+option.control); 
MessageBox_PC = Messagebox_AC.parent(); 
Messagebox_AC.css('display',”); 
enabled='<div id=”messagebox_enabled” style=”background-color: lightgrey;width:100%;height:100%;position:absolute;z-index:99998;”></div>' 
enabledframe='<iframe id=”messagebox_enabledframe” frameborder=0 scrolling=no style=”position:absolute; visibility:inherit; top:0px; left_0px; width:100%;height:100%;z-index:99997; “></iframe>'; 
$('#messagebox_enabledframe').remove()_ 
$('#messagebox_enabled').remove(); 
$('#messagebox_title').html(option.title); 

$('#messagebox_from').append(Messagebox_AC); 
SetStyle(option); 
$(document.body).append(enabledframe); 
$(document.body).append(enabled); 
SetEnabledStyle(); 
$('#messagebox_win').fadeIn(”slow”); 

//创建对话框容器 
function CreateContainer(option) 
{ 
var html; 
html='<div id=”messagebox_win” style=”position:absolute;z-index:99999;”><table cellpadding=”0″ cellspacing=”0″ id=”messagebox_table”><tr><td id=”messagebox_title_td”><table id=”messagebox_title_table” ><tr><td style=”width:99%;” ><div id=”messagebox_title” style=”width:100%;cursor: default;”></div></td><td><button id=”messagebox_close”></button></td></tr></table></td></tr><tr id=”messagebox_body_td”><td valign=”top” ><div id=”messagebox_from” style=”text-align: center;”></div></td></tr></table></div>'; 
if(option.parent) 
{ 
$('#' + option.parent).append(html); 
} 
else 
{ 
$(document.body).append(html); 
} 
} 

//设置显示时背景式样 
function SetEnabledStyle() 
{ 
var de,w,h,css,region; 
region = GetDocumentRegion(); 
css ={width:region.width+”px”,height:region.height+”px”, 
left: MessageBox_scrollleft+'px',top: MessageBox_scrolltop +'px'} 
GetOpacity(css); 
$(”#messagebox_enabled”).css(css); 
$(”#messagebox_enabledframe”).css(css); 
} 

//设置透明式样 
function GetOpacity(css) 
{ 
if(window.navigator.userAgent.indexOf('MSIE')>=1) 
{ 
css.filter= ‘progid:DXImageTransform.Microsoft.Alpha(opacity=30)'; 
} 
else 
{ 
css.opacity= ‘0.3′; 
}  
} 

//设置对话框试样 
function SetStyle(option) 
{ 
var region,css; 
region = GetDocumentRegion(); 
css ={width:MessageBox_width+'px',height:MessageBox_height+'px', 
left: ((region.width - MessageBox_width)/2)+'px',top: ((region.height - MessageBox_height)/2)+'px'} 
if(region.height < MessageBox_height )//如果body显示的高度小于对话框高度 
{ 
css.top=10+'px'; 
} 
else 
{ 
css.top=((region.height - MessageBox_height)/2)+'px' 
} 
$('#messagebox_win').css(css); 
css.top='0px'; 
css.left='0px'; 
$('#messagebox_table').css(css); 
css.width='100%'; 
css.height='16px'; 
$('#messagebox_title_td').css(css); 
css.height= height-46 +'px'; 
$('#messagebox_body_td').css(css); 

} 

var down_x,down_y,cx,cy; 
function handleMouseDown(e) 
{ 
var evt = e || event; 

down_x=evt.clientX; 
down_y = evt.clientY; 
cx =(parseInt(MessageBox_win.css('left'))|0); 
cy = (parseInt(MessageBox_win.css('top'))|0) 
MessageBox_Moving= true;³ 
document.documentElement.onselectstart = function(){return false}; 
document.documentElement.ondrag = function(){return false}; 
document.onmousemove = handleMouseMove; 
$(document.body).append('<div id=”messagebox_move” style=”position: absolute; z-index:100000;border-right: midnightblue 1px dashed; border-top: midnightblue 1px dashed; border-left: midnightblue 1px dashed; border-bottom: midnightblue 1px dashed;”></div>'); 
$('#messagebox_move').css('width',MessageBox_win.css('width')); 
$('#messagebox_move').css('height',MessageBox_win_u99 ?ss('height')); 
$('#messagebox_move').css('left',MessageBox_win.css('left')); 
$('#messagebox_move').css('top',MessageBox_win.css('top')); 

} 

function GetDocumentRegion() 
{ 
var w,h,de; 
de = document.documentElement; 
w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; 
h = self.innerHeight || (de&&de.clientHeight)|| document.body.clientHeight; 
return {height:h,width:w}; 
} 

function handleMouseMove(e) 
{ 
var left,top,region; 
if (MessageBox_Moving) 
{ 
var evt = e || event; 

left =evt.clientX+cx-down_x; 
top = evt.clientY+cy-down_y; 
region = GetDocumentRegion(); 
if(left+ MessageBox_width > region.width) 
{ 
left = region.width - 10- MessageBox_width; 
} 
if(top + MessageBox_height >region.height)³ 
{ 
top = region.height-10 - MessageBox_height; 
} 
if(left <10) 
left =10; 
if(top <10) 
top =10; 
var css ={left:left+'px',top:top+'px'} 
$('#messagebox_move').css(css); 
} 
} 

function handleMouseUp() 
{ 
if(MessageBox_Moving) 
{ 
MessageBox_win.css('width',$('#messagebox_move').css(”width”)); 
MessageBox_win.css('height',$('#messagebox_move').css(”height”)); 
MessageBox_win.css('left',$('#messagebox_move').css(”left”)); 
MessageBox_win.css('top',$('#messagebox_move').css(”top”)); 
} 
MessageBox_Moving _u61 ? false; 
document.onmousemove = null; 
$('#messagebox_move').remove(); 
} 

} 

//关闭模式对话框 
function CloseMessageBox() 
{ 
if(MessageOninit) 
{ 
$('#messagebox_win').hide(); 
$('#messagebox_enabled').remove(); 
$('#messagebox_enabledframe').remove(); 
Messagebox_AC.css('display','none'); 
MessageBox_PC.append(Messagebox_AC); 

} 
document.documentElement.onselectstart = null; 
document.documentElement.ondrag = null; 
} 
$(document).ready(function(){ 
$(document).find('[@showoption]‘).each(function(){ 
var namevalue; 
//虽然显示的元素id,显示宽度,显示高度,标题,对话框寄居的元素对象id 
var option={control:”,width:'400′,height:'400′,title:”,parent:null}; 
var properties = $(this).attr('showoption').split(';');  
for(i=0;i<properties.length;i++) 
{ 
namevalue = properties[i].split(':'); 
if(namevalue.length >1) 
{ 
execute =”option.” + namevalue[0] +'=\”+ namevalue[1]+'\';'; 
eval(execute); 
} 
} 

$(this).click(function(){ 
ShowMessageBox(option); 
document.body.focus(); 
}); 
});  
});

JQuery实现自定义对话框的代码messageboxscript.rar
Javascript 相关文章推荐
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
js 全兼容可高亮二级缓冲折叠菜单
Jun 04 Javascript
firebug的一个有趣现象介绍
Nov 30 Javascript
js动态创建标签示例代码
Jun 09 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
Jul 10 Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 Javascript
Node.js搭建WEB服务器的示例代码
Aug 15 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 Javascript
详解vue3.0 的 Composition API 的一种使用方法
Oct 26 Javascript
JavaScript中document.activeELement焦点元素介绍
Nov 27 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
Jun 14 Javascript
javascript基本语法分析说明
Jun 15 #Javascript
javascript新手语法小结
Jun 15 #Javascript
JavaScript入门学习书籍推荐
Jun 12 #Javascript
asp.net和asp下ACCESS的参数化查询
Jun 11 #Javascript
json跟xml的对比分析
Jun 10 #Javascript
json 定义
Jun 10 #Javascript
json简单介绍
Jun 10 #Javascript
You might like
非常不错的MySQL优化的8条经验
2008/03/24 PHP
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
php的ajax简单实例
2014/02/27 PHP
PHP打印输出函数汇总
2016/08/28 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
屏蔽script注入小例子
2013/11/12 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
Python读写zip压缩文件的方法
2018/08/29 Python
django 将model转换为字典的方法示例
2018/10/16 Python
django settings.py 配置文件及介绍
2019/07/15 Python
python之生产者消费者模型实现详解
2019/07/27 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
宣传活动总结范文
2014/07/01 职场文书
爱心捐书活动总结
2014/07/05 职场文书
大学生党员自我评价
2015/03/04 职场文书
困难补助申请报告
2015/05/19 职场文书
比较几种Redis集群方案
2021/06/21 Redis
Python进行区间取值案例讲解
2021/08/02 Python
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL