JavaScript为我们提供几种对话框功能,但功能都十分有限;虽然在IE下可以通过模式窗体的方式创建更丰富的对话框功能,但毕竟只有IE得到支持。为了得到更丰富的自定义对话框功能,于是用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;3
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)3
{
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();
});
});
});