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 相关文章推荐
js获取变量
Aug 24 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Sep 26 Javascript
js比较日期大小的方法
May 12 Javascript
jquery动态增加删减表格行特效
Nov 20 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
jQuery grep()方法详解及实例代码
Oct 30 Javascript
jQuery选择器实例应用
Jan 05 Javascript
jQuery表单设置值的方法
Jun 30 jQuery
zTree树形菜单交互选项卡效果的实现方法
Dec 25 Javascript
jQuery实现标签子元素的添加和赋值方法
Feb 24 jQuery
javascript实现的时间格式加8小时功能示例
Jun 13 Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 jQuery
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
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
Bootstrap基础学习
2015/06/16 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
python框架中flask知识点总结
2018/08/17 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
初一新生军训方案
2014/05/22 职场文书
爱的承诺书
2015/01/20 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
雨中的树观后感
2015/06/03 职场文书
导游词之西递宏村
2019/12/10 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL