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函数库-集合框架
Apr 27 Javascript
JS数组的赋值介绍
Mar 10 Javascript
javascript实现密码验证
Nov 10 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
Jan 14 Javascript
jQuery unbind 删除绑定事件详解
May 24 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
Nov 18 Javascript
简单实现node.js图片上传
Dec 18 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
详解Vue取消eslint语法限制
Aug 04 Javascript
express+vue+mongodb+session 实现注册登录功能
Dec 06 Javascript
全面解析JavaScript Module模式
Jul 24 Javascript
微信小程序反编译的实现
Dec 10 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
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
办公室文秘自我鉴定
2013/09/21 职场文书
优秀党员转正的自我评价
2013/10/06 职场文书
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
教师节倡议书
2014/08/30 职场文书
实习指导教师评语
2014/12/30 职场文书
民事调解书范文
2015/05/20 职场文书
2019银行竞聘书
2019/06/21 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
详解Nginx启动失败的几种错误处理
2021/04/01 Servers