走过平凡人生、留下平凡足迹 注册 | 登陆

JQuery实现自定义对话框

 javascript为我们提供几种对话框功能,但功能都十分有限;虽然在IE下可以通过模式窗体的方式创建更丰富的对话框功能,但毕竟只有IE得到支持。为了得到更丰富的自定义对话框功能,于是用jquery编写了一个对话框插件;只需简单地引用相关JavaScript就能得到丰富的自定义对话框功能。

插件功能特点:

       允许通过css进行外观控制。

       可以任意把面页的元素作为对话框显示。

       当对话框激活时,对话框外的任何元素不能接受鼠标操作。

       对话框可以在工作区范围内任意移动,根据工作区大小自适应居中功能。

       并不需要编写复杂的JavaScript,通过简单HTML属性描述即可。

       经过测试插件可以在Firefox和IE下正常工作。

简单使用描述:

       引用JQuery和对话框插件文件:

       <script src=jquery-latest.js></script>

<script src=messageBox.js></script>

JavaScript代码
  1. /* JQuery 模式对话框插件  
  2.  
  3.  * writer: FanJianHan (henryfan@msn.com)  
  4.  
  5.  * License: GPL (GPL-LICENSE.txt) licenses.  
  6.  
  7.  */  
  8.   
  9.  //是否已初始化过对话框   
  10.   
  11. var MessageOninit = false;   
  12.   
  13. //记录body滚动条的x,y偏移量;显示内容的元素对象,显示内容元素对象的父对象   
  14.   
  15. var MessageBox_scrolltop,MessageBox_scrollleft,Messagebox_AC,MessageBox_PC;   
  16.   
  17. //对话框对象,对话框宽度,对话框高度   
  18.   
  19. var MessageBox_win,MessageBox_width,MessageBox_height;   
  20.   
  21. //对话框是否处于移动状态   
  22.   
  23. var MessageBox_Moving = false;   
  24.   
  25.     
  26.   
  27. //显示模式提示框   
  28.   
  29. function ShowMessageBox(option)   
  30.   
  31. {   
  32.   
  33.     var container,iframe,enabled,enabledframe;   
  34.   
  35.     var height=400;   
  36.   
  37.     var width =400;   
  38.   
  39.     MessageBox_scrolltop =0;   
  40.   
  41.     MessageBox_scrollleft =0;   
  42.   
  43.     if(!MessageOninit)   
  44.   
  45.     {   
  46.   
  47.        CreateContainer(option);   
  48.   
  49.        MessageOninit = true;   
  50.   
  51.        $('#messagebox_close').click(function(){   
  52.   
  53.              CloseMessageBox();   
  54.   
  55.        });   
  56.   
  57.        $(window).resize(function(){   
  58.   
  59.             SetStyle(option);   
  60.   
  61.             SetEnabledStyle();   
  62.   
  63.           
  64.   
  65.        });   
  66.   
  67.        $(window).scroll(function(e){   
  68.   
  69.             MessageBox_scrolltop =document.documentElement.scrollTop;   
  70.   
  71.             MessageBox_scrollleft = document.documentElement.scrollLeft;   
  72.   
  73.             SetEnabledStyle();   
  74.   
  75.        });   
  76.   
  77.        MessageBox_win = $("#messagebox_win");   
  78.   
  79.        $('#messagebox_title').mousedown(handleMouseDown);   
  80.   
  81.        $('#messagebox_title').mouseup(handleMouseUp);   
  82.   
  83.        $('#messagebox_title').mousemove(handleMouseMove);   
  84.   
  85.        document.onmouseup = handleMouseUp;   
  86.   
  87.           
  88.   
  89.           
  90.   
  91.     }   
  92.   
  93.        
  94.   
  95.        
  96.   
  97.     if(option.height)   
  98.   
  99.         height = parseInt(option.height);   
  100.   
  101.     if(option.width)   
  102.   
  103.         width = parseInt(option.width);   
  104.   
  105.     MessageBox_height = height;   
  106.   
  107.     MessageBox_width = width;   
  108.   
  109.     Messagebox_AC = $('#'+option.control);   
  110.   
  111.     MessageBox_PC = Messagebox_AC.parent();   
  112.   
  113.     Messagebox_AC.css('display','');   
  114.   
  115.     enabled='<div id="messagebox_enabled" style="background-color: lightgrey;width:100%;height:100%;position:absolute;z-index:99998;"></div>'  
  116.   
  117.     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>';   
  118.   
  119.     $('#messagebox_enabledframe').remove()_   
  120.   
  121.     $('#messagebox_enabled').remove();   
  122.   
  123.     $('#messagebox_title').html(option.title);   
  124.   
  125.      
  126.   
  127.     $('#messagebox_from').append(Messagebox_AC);   
  128.   
  129.     SetStyle(option);   
  130.   
  131.     $(document.body).append(enabledframe);   
  132.   
  133.     $(document.body).append(enabled);   
  134.   
  135.     SetEnabledStyle();   
  136.   
  137.     $('#messagebox_win').fadeIn("slow");   
  138.   
  139.      
  140.   
  141.        
  142.   
  143.     //创建对话框容器   
  144.   
  145.     function CreateContainer(option)   
  146.   
  147.     {   
  148.   
  149.         var html;   
  150.   
  151.         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>';   
  152.   
  153.         if(option.parent)   
  154.   
  155.         {   
  156.   
  157.             $('#' + option.parent).append(html);   
  158.   
  159.         }   
  160.   
  161.         else  
  162.   
  163.         {   
  164.   
  165.             $(document.body).append(html);   
  166.   
  167.         }   
  168.   
  169.     }   
  170.   
  171.        
  172.   
  173.     //设置显示时背景式样   
  174.   
  175.     function SetEnabledStyle()   
  176.   
  177.     {   
  178.   
  179.         var de,w,h,css,region;   
  180.   
  181.         region = GetDocumentRegion();   
  182.   
  183.         css ={width:region.width+"px",height:region.height+"px",   
  184.   
  185.         left: MessageBox_scrollleft+'px',top: MessageBox_scrolltop +'px'}   
  186.   
  187.         GetOpacity(css);   
  188.   
  189.         $("#messagebox_enabled").css(css);   
  190.   
  191.         $("#messagebox_enabledframe").css(css);   
  192.   
  193.     }   
  194.   
  195.        
  196.   
  197.     //设置透明式样   
  198.   
  199.     function GetOpacity(css)   
  200.   
  201.     {   
  202.   
  203.         if(window.navigator.userAgent.indexOf('MSIE')>=1)   
  204.   
  205.         {   
  206.   
  207.             css.filter= 'progid:DXImageTransform.Microsoft.Alpha(opacity=30)';   
  208.   
  209.         }   
  210.   
  211.         else  
  212.   
  213.         {   
  214.   
  215.             css.opacity= '0.3';   
  216.   
  217.         }      
  218.   
  219.     }   
  220.   
  221.        
  222.   
  223.     //设置对话框试样   
  224.   
  225.     function SetStyle(option)   
  226.   
  227.     {   
  228.   
  229.         var region,css;   
  230.   
  231.         region = GetDocumentRegion();   
  232.   
  233.         css ={width:MessageBox_width+'px',height:MessageBox_height+'px',   
  234.   
  235.         left: ((region.width - MessageBox_width)/2)+'px',top: ((region.height - MessageBox_height)/2)+'px'}   
  236.   
  237.         if(region.height < MessageBox_height )//如果body显示的高度小于对话框高度   
  238.   
  239.         {   
  240.   
  241.             css.top=10+'px';   
  242.   
  243.         }   
  244.   
  245.         else  
  246.   
  247.         {   
  248.   
  249.             css.top=((region.height - MessageBox_height)/2)+'px'  
  250.   
  251.         }   
  252.   
  253.         $('#messagebox_win').css(css);   
  254.   
  255.         css.top='0px';   
  256.   
  257.         css.left='0px';   
  258.   
  259.         $('#messagebox_table').css(css);   
  260.   
  261.         css.width='100%';   
  262.   
  263.         css.height='16px';   
  264.   
  265.         $('#messagebox_title_td').css(css);   
  266.   
  267.         css.height= height-46 +'px';   
  268.   
  269.         $('#messagebox_body_td').css(css);   
  270.   
  271.          
  272.   
  273.           
  274.   
  275.     }   
  276.   
  277.        
  278.   
  279.     var down_x,down_y,cx,cy;   
  280.   
  281.     function handleMouseDown(e)   
  282.   
  283.     {   
  284.   
  285.             var evt = e || event;   
  286.   
  287.              
  288.   
  289.          down_x=evt.clientX;   
  290.   
  291.          down_y = evt.clientY;   
  292.   
  293.          cx =(parseInt(MessageBox_win.css('left'))|0);   
  294.   
  295.          cy = (parseInt(MessageBox_win.css('top'))|0)   
  296.   
  297.          MessageBox_Moving= true;³   
  298.   
  299.          document.documentElement.onselectstart = function(){return false};   
  300.   
  301.          document.documentElement.ondrag = function(){return false};   
  302.   
  303.          document.onmousemove = handleMouseMove;   
  304.   
  305.          $(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>');   
  306.   
  307.          $('#messagebox_move').css('width',MessageBox_win.css('width'));   
  308.   
  309.          $('#messagebox_move').css('height',MessageBox_win_u99 ?ss('height'));   
  310.   
  311.          $('#messagebox_move').css('left',MessageBox_win.css('left'));   
  312.   
  313.          $('#messagebox_move').css('top',MessageBox_win.css('top'));   
  314.   
  315.           
  316.   
  317.           
  318.   
  319.     }   
  320.   
  321.       
  322.   
  323.     function GetDocumentRegion()   
  324.   
  325.     {   
  326.   
  327.         var w,h,de;   
  328.   
  329.         de = document.documentElement;   
  330.   
  331.         w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;   
  332.   
  333.         h = self.innerHeight || (de&&de.clientHeight)|| document.body.clientHeight;   
  334.   
  335.         return {height:h,width:w};   
  336.   
  337.     }   
  338.   
  339.        
  340.   
  341.     function handleMouseMove(e)   
  342.   
  343.     {   
  344.   
  345.         var left,top,region;   
  346.   
  347.         if (MessageBox_Moving)   
  348.   
  349.         {   
  350.   
  351.             var evt = e || event;   
  352.   
  353.                
  354.   
  355.             left =evt.clientX+cx-down_x;   
  356.   
  357.             top = evt.clientY+cy-down_y;   
  358.   
  359.             region = GetDocumentRegion();   
  360.   
  361.             if(left+ MessageBox_width > region.width)   
  362.   
  363.             {   
  364.   
  365.                 left = region.width - 10- MessageBox_width;   
  366.   
  367.             }   
  368.   
  369.             if(top + MessageBox_height >region.height)³   
  370.   
  371.             {   
  372.   
  373.                 top = region.height-10 - MessageBox_height;   
  374.   
  375.             }   
  376.   
  377.             if(left <10)   
  378.   
  379.                 left =10;   
  380.   
  381.             if(top <10)   
  382.   
  383.                 top =10;   
  384.   
  385.             var css ={left:left+'px',top:top+'px'}   
  386.   
  387.             $('#messagebox_move').css(css);   
  388.   
  389.         }   
  390.   
  391.     }   
  392.   
  393.        
  394.   
  395.     function handleMouseUp()   
  396.   
  397.     {   
  398.   
  399.         if(MessageBox_Moving)   
  400.   
  401.         {   
  402.   
  403.             MessageBox_win.css('width',$('#messagebox_move').css("width"));   
  404.   
  405.             MessageBox_win.css('height',$('#messagebox_move').css("height"));   
  406.   
  407.             MessageBox_win.css('left',$('#messagebox_move').css("left"));   
  408.   
  409.             MessageBox_win.css('top',$('#messagebox_move').css("top"));   
  410.   
  411.         }   
  412.   
  413.         MessageBox_Moving _u61 ? false;   
  414.   
  415.         document.onmousemove = null;   
  416.   
  417.        $('#messagebox_move').remove();   
  418.   
  419.     }   
  420.   
  421.     
  422.   
  423.         
  424.   
  425. }   
  426.   
  427.     
  428.   
  429. //关闭模式对话框   
  430.   
  431. function CloseMessageBox()   
  432.   
  433. {   
  434.   
  435.     if(MessageOninit)   
  436.   
  437.     {   
  438.   
  439.        $('#messagebox_win').hide();   
  440.   
  441.        $('#messagebox_enabled').remove();   
  442.   
  443.        $('#messagebox_enabledframe').remove();   
  444.   
  445.       Messagebox_AC.css('display','none');   
  446.   
  447.        MessageBox_PC.append(Messagebox_AC);   
  448.   
  449.            
  450.   
  451.     }   
  452.   
  453.      document.documentElement.onselectstart = null;   
  454.   
  455.          document.documentElement.ondrag = null;   
  456.   
  457. }   
  458.   
  459. $(document).ready(function(){   
  460.   
  461.     $(document).find('[@showoption]').each(function(){   
  462.   
  463.         var namevalue;   
  464.   
  465.         //虽然显示的元素id,显示宽度,显示高度,标题,对话框寄居的元素对象id   
  466.   
  467.         var option={control:'',width:'400',height:'400',title:'',parent:null};   
  468.   
  469.         var properties = $(this).attr('showoption').split(';');    
  470.   
  471.         for(i=0;i<properties.length;i++)   
  472.   
  473.         {   
  474.   
  475.             namevalue = properties[i].split(':');   
  476.   
  477.             if(namevalue.length >1)   
  478.   
  479.             {   
  480.   
  481.                 execute ="option." + namevalue[0] +'=\''+ namevalue[1]+'\';';   
  482.   
  483.                 eval(execute);   
  484.   
  485.             }   
  486.   
  487.         }   
  488.   
  489.            
  490.   
  491.         $(this).click(function(){   
  492.   
  493.             ShowMessageBox(option);   
  494.   
  495.             document.body.focus();   
  496.   
  497.         });   
  498.   
  499.     });       
  500.   
  501. });   
  502.   

 定义相关按钮为行:

       <input id="Button4" type="button" value="提问对话框"              showoption="control:test2;width:220;height:120;title:对话框" />

       定义相关对话框显示的内容:

 

xml/HTML代码
  1. <div id="test2" style="display:none">  
  2.   
  3.         <table style="width: 200px">  
  4.   
  5.             <tr>  
  6.   
  7.                 <td >  
  8.   
  9.                     JQuery模式对话框插件好用吗?</td>  
  10.   
  11.             </tr>  
  12.   
  13.             <tr>  
  14.   
  15.                 <td align="right" >  
  16.   
  17.                     <input id="Button2" onclick="CloseMessageBox()" type="button" value="是" />  
  18.   
  19.                     <input id="Button6" onclick="CloseMessageBox()" type="button" value="否" /></td>  
  20.   
  21.             </tr>  
  22.   
  23.         </table>  
  24.   
  25.     </div>  

 

 

Tags: juqery, 对话框

« 上一篇 | 下一篇 »

Trackbacks

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

发表评论

评论内容 (必填):