用JQuery 实现的自定义对话框


Posted in Javascript onMarch 24, 2007

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();  
        });  
    });      
}); 
Javascript 相关文章推荐
基于jquery用于查询操作的实现代码
May 10 Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 Javascript
window.location.href中url中数据量太大时的解决方法
Dec 23 Javascript
javascript实现图片循环渐显播放的方法
Feb 24 Javascript
JS实现光滑展开合拢的菜单效果代码
Sep 16 Javascript
AngularJS基础 ng-mouseleave 指令详解
Aug 02 Javascript
vue2.0获取自定义属性的值
Mar 28 Javascript
bootstrap select下拉搜索插件使用方法详解
Nov 23 Javascript
微信小程序使用canvas的画图操作示例
Jan 18 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 Javascript
基于node简单实现RSA加解密的方法步骤
Mar 21 Javascript
JQuery 简便实现页面元素数据验证功能
Mar 24 #Javascript
AutoSave/自动存储功能实现
Mar 24 #Javascript
用 javascript 实现的点击复制代码
Mar 24 #Javascript
基于逻辑运算的简单权限系统(实现) JS 版
Mar 24 #Javascript
用js实现的仿sohu博客更换页面风格(简单版)
Mar 22 #Javascript
漂亮的提示信息(带箭头)
Mar 21 #Javascript
自动生成文章摘要的代码[JavaScript 版本]
Mar 20 #Javascript
You might like
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
PHP _construct()函数讲解
2019/02/03 PHP
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
JS常用算法实现代码
2016/11/14 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
Python去除列表中重复元素的方法
2015/03/20 Python
python实现web方式logview的方法
2015/08/10 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
Python变量类型知识点总结
2019/02/18 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
python使用建议技巧分享(三)
2020/08/18 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle
移除Selenium中window.navigator.webdriver值
2022/06/10 Python
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS