Web開(kāi)發(fā)中的彈出對(duì)話框控件介紹
Web開(kāi)發(fā)中,目前由于Jquery的大行其道,因此很多彈出對(duì)話框,都用到Jquery技術(shù),反而原始的彈出對(duì)話框的方式較為少用了。不過(guò)基于JQuery的方式實(shí)現(xiàn)對(duì)話框窗口彈出,也有很多控件可以利用,由于工作需要及業(yè)余興趣所至,我比較了近10種的對(duì)話框控件,其中發(fā)現(xiàn)有一些做得很好的,除了功能強(qiáng)大,而且也支持多種皮膚樣式,甚至有些對(duì)話框的居中都考慮到了,細(xì)節(jié)決定體驗(yàn),有些真的不錯(cuò)。
1、原始的彈出對(duì)話框?qū)崿F(xiàn)(彈出窗口也可以)
我們知道,以前在沒(méi)有應(yīng)用其他javascript庫(kù)(例如各種類型的Jquery庫(kù))的時(shí)候,一般是通過(guò)window.open或者window.showModalDialog來(lái)彈出非模態(tài)或者模態(tài)的對(duì)話框的,如下腳本所示。
- function OpenWin( sURL , sFeatures )
 - {
 - window.open( sURL , null , sFeatures , null)
 - //window.open("Sample.htm",null,"height=200,width=400,status=yes,toolbar=no,menubar=no,location=no");
 - //window.open( [sURL] [, sName] [, sFeatures] [, bReplace])
 - //sName{_blank; _media; _parent; _search; _self; _top}
 - //sFeatures{channelmode; directories; fullscreen; height; left; location; menubar; resizable; scrollbars; status; titlebar; toolbar; top; width}
 - }
 - function ShowWin( sURL , sFeatures )
 - {
 - if(sFeatures == null || sFeatures == ""){
 - sFeatures = 'dialogHeight:300px;dialogWidth:850px;status:no;scroll:yes;resizable:yes;help:no;center:yes;';
 - }
 - var returnValue= window.showModalDialog( sURL , null , sFeatures)
 - //window.showModalDialog("Sample.htm",null,"dialogHeight:591px;dialogWidth:650px;")
 - //window.showModalDialog([sURL] [, vArguments] [, sFeatures])
 - //sFeatures{dialogHeight; dialogLeft; dialogTop; dialogWidth; center; dialogHide; edge; help; resizable; scroll; status; unadorned}
 - if(returnValue != undefined)
 - {
 - return returnValue;
 - }
 - else
 - {
 - return "";
 - }
 - }
 
這種是原始方式,好處壞處大家都明白,就不說(shuō)了。
還有一種基于Jquery的原始彈出窗口方式,由于我一般使用的是easy-ui作為界面的基礎(chǔ)組件,因此基于easy-ui的原始彈出窗口方式,只能是彈出內(nèi)部的HTML層內(nèi)容,對(duì)于彈出獨(dú)立的頁(yè)面這種方式支持不夠好。
- <script type="text/javascript">
 - function initDialog(divname) {
 - var dlg = jQuery(divname).dialog({
 - draggable: true,
 - resizable: true,
 - closed: true,
 - show: 'Transfer',
 - hide: 'Transfer',
 - autoOpen: false,
 - width: 500,
 - height: 250,
 - minHeight: 10,
 - minwidth: 10
 - });
 - dlg.parent().appendTo(jQuery("form:first"));
 - };
 - function close(divname) {
 - $(divname).dialog('close');
 - }
 - </script>
 
2、Popup的彈出式對(duì)話框

這個(gè)popup控件彈出的對(duì)話框,它好像把彈出的子頁(yè)面放到了父窗口里面了,感覺(jué)是一體化的,所以操作父窗口的對(duì)話框也可以,非常方便。

這個(gè)popup控件,比較容易使用,不過(guò)不好的地方就是不兼容其他瀏覽器如Chrome等,其他瀏覽器顯示層是錯(cuò)位的,不好看,而且樣式也相對(duì)比較簡(jiǎn)單一點(diǎn)了。
但由于在彈出窗口中可以很好操作父窗口的腳本以及使用方便,在我以前的一些項(xiàng)目里面,用的還算比較多。
3、AsyncBox的彈出對(duì)話框

這個(gè)控件感覺(jué)做的很不錯(cuò),而且提供了Chrome、QQBrowser、Ext、ZCMS四種不錯(cuò)的窗體皮膚,適應(yīng)多種需要,通過(guò)修改它們的皮膚圖片,還可以定義適合自己項(xiàng)目的樣式皮膚,如我修改定義了一種黃色調(diào)的樣式例子。

不過(guò)在使用過(guò)程中,發(fā)現(xiàn)這個(gè)控件,對(duì)有些腳本或者Jquery控件有沖突,具體原因未明,總之發(fā)現(xiàn)了和基于Jquery的ZTree運(yùn)行不正常,還有一些Jquery組件使用也不正常,在我的Web權(quán)限管理系統(tǒng)中,本來(lái)想用這個(gè)作為彈出窗口顯示一些設(shè)置信息的,發(fā)現(xiàn)zTree的Node選中值獲取不了,也就相當(dāng)于失效了,非常郁悶,弄了很久,沒(méi)有找到具體原因。還有另外一個(gè)問(wèn)題,就是這個(gè)控件的作者不知道什么原因,好像停止了對(duì)該控件的開(kāi)發(fā)了,連它的官網(wǎng)也下架了。
不過(guò)對(duì)于彈出窗口的使用來(lái)說(shuō),該控件已經(jīng)很不錯(cuò)了,提供了多種調(diào)用模塊,而我一般傾向于彈出另外一個(gè)頁(yè)面這種方式,當(dāng)然它也支持彈出頁(yè)面內(nèi)部的層或者HTML代碼等等方式。
#p#
4、artDialog彈出對(duì)話框
這個(gè)artDialog彈出對(duì)話框組件,是我覺(jué)得相當(dāng)好的一款了,除了支持多種瀏覽器,而且提供的界面效果更多,目前的版本是V4.1.6,好像還有一個(gè)V5.0的Beta版本(https://github.com/aui/artDialog),但是V5.0的就調(diào)整了不支持通過(guò)art.dialog.open方式彈出獨(dú)立Web頁(yè)面的方式了,要實(shí)現(xiàn)彈出獨(dú)立頁(yè)面,需要使用Iframe的代碼,效果就差了一些,所以我傾向于V4.1.6。

該控件支持自動(dòng)計(jì)算居中位置,我們只需要指定對(duì)話框的大小即可,當(dāng)然它很好支持頁(yè)面內(nèi)的層內(nèi)容的彈出顯示,不過(guò)我更關(guān)注的是獨(dú)立頁(yè)面的彈出對(duì)話框顯示,我在具體的Web權(quán)限管理系統(tǒng)中應(yīng)用的效果如下所示(結(jié)合了ZTree控件,運(yùn)行正常)。

這個(gè)控件提供了很多參數(shù)以及方法,對(duì)實(shí)現(xiàn)調(diào)用非常強(qiáng)大。
- <script src="http://www.cnblogs.com/JQueryTools/artDialog/artDialog.source.js?skin=blue" type="text/javascript"></script>
 - <script src="http://www.cnblogs.com/JQueryTools/artDialog/plugins/iframeTools.source.js" type="text/javascript"></script>
 
首先封裝一個(gè)通用的Javascript函數(shù)
- function ShowArtDlg(title, url, width, height, lock)
 - {
 - if (width == null || width == "") {
 - width = '90%';
 - }
 - if (!width.indexOf('px') && !width.indexOf('%')) {
 - width = width + 'px';
 - }
 - if (width.indexOf('px') < 0 && width.indexOf('%') < 0) {
 - width = width + 'px';
 - }
 - if (height == null || height == "") {
 - height = '90%'
 - }
 - if (height.indexOf('px') < 0 && height.indexOf('%') < 0) {
 - height = height + 'px';
 - }
 - if (lock == null || lock == "") {
 - lock = false;
 - }
 - art.dialog.open(url, { height: height, width: width, title: title, lock: lock }, false); //打開(kāi)子窗體
 - }
 
頁(yè)面里面調(diào)用的代碼如下所示。
- <tr align="right">
 - <td>
 - <a href="#" class="easyui-linkbutton" iconcls="icon-edit" id="btnAddUser" onclick="ShowArtDlg('編輯-包含用戶', 'EditTree.aspx?type=user&ouid=' + $('#txtID').val(), '360px', '500px')" runat="server">編輯</a>  
 - <a href="#" class="easyui-linkbutton" iconcls="icon-remove" id="btnDeleteUser" onclick="deleteUser()" runat="server">移除</a>
 - </td>
 - </tr>
 
如果你用5.0+的ArtDialog,調(diào)整了不支持通過(guò)art.dialog.open方式彈出獨(dú)立Web頁(yè)面的方式,但還是可以通過(guò)以下的方法去彈出獨(dú)立頁(yè)面。
- art.dialog({title : "選擇***",
 - cancel : true,
 - width : 600,
 - padding : '5px',
 - content : '<iframe src="test.aspx" id="test" name="test" height="400" width="600" frameborder="0"></iframe>',
 - ok : function(){
 - ...
 - }
 - });
 
5、還有一些彈出窗口控件,還支持窗口的最大化操作,這個(gè)功能還是不錯(cuò)的。


原文鏈接:http://www.cnblogs.com/wuhuacong/archive/2012/12/02/2797803.html















 
 
 

 
 
 
 