用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 相关文章推荐
JS解析XML的实现代码
Nov 12 Javascript
javascript setTimeout和setInterval计时的区别详解
Jun 21 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
Apr 12 Javascript
JS与jQuery遍历Table所有单元格内容的方法
Dec 07 Javascript
js获取鼠标位置实例详解
Dec 09 Javascript
悬浮广告方法日常收集整理
Mar 18 Javascript
ES6记录异步函数的执行时间详解
Aug 31 Javascript
angular指令笔记ng-options的使用方法
Sep 18 Javascript
bootstrap动态调用select下拉框的实例代码
Aug 09 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
Dec 30 Javascript
node.js的Express服务器基本使用教程
Jan 09 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 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的autoLoad自动加载机制
2012/09/27 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
php计算税后工资的方法
2015/07/28 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
JavaScript 原型链学习总结
2010/10/29 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
express express-session的使用小结
2018/12/12 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
python 域名分析工具实现代码
2009/07/15 Python
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
用Python设计一个经典小游戏
2017/05/15 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
物流经理自我评价
2013/09/23 职场文书
个人自我剖析材料
2014/02/07 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
渡河少年教学反思
2014/02/12 职场文书
药品业务员岗位职责
2014/04/17 职场文书
社区义诊活动总结
2014/04/30 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers
Win11任务栏无法正常显示 资源管理器不停重启的解决方法
2022/07/07 数码科技