您的位置:首页 > Web前端 > JQuery

【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.6.Dialog控件

2013-08-15 18:29 597 查看
习惯上,我们播放一条简短的信息,或向浏览者询问一个问题,都会用到dialog。

创建一个基本的dialog

使用dialog 选项

形式

启用内置动画

给dialog添加按钮

使用dialog回调函数

编码的形式控制dialog

1 创建一个基本的dialog

<div id="myDialog" title="This is the title!"> hello </div> <script src="development-bundle/jquery-1.4.4.js"></script> <script src="development-bundle/ui/jquery.ui.core.js"></script> <script src="development-bundle/ui/jquery.ui.widget.js"></script> <script src="development-bundle/ui/jquery.ui.position.js"></script> <script src="development-bundle/ui/jquery.ui.dialog.js"></script> <script src="development-bundle/ui/jquery.ui.mouse.js"></script> <script src="development-bundle/ui/jquery.ui.draggable.js"></script> <script src="development-bundle/ui/jquery.ui.resizable.js"></script> <script> $(function(){ $("#myDialog").dialog(); }); </script>

使用 jquery.ui.position.js后,dialog会自动居中。

使用 jquery.ui.draggable.js后,可以拖拽。

使用 jquery.ui.resizable.js后,可以重设大小。

1 dialog的选项

OptionDefault valueUsed to…
autoOpentrue当设为true时,dialog()方法一被调用就显示
buttons{}支持一个包含button的对象。每个key会成为<button>的text,每个value会成为button点击时执行的回调函数
closeOnEscapetrue如果设为true,按下ESC键能关闭dialog
closeTextclose设置关闭按钮的text
dialogClass“”出于主题的目的,为dialog设置额外的classnames
disablefalse禁用控件
draggabletrue在使用 jquery.ui.draggable.js 的情况下,使得dialog可以拖拽
heightauto设置dialog的初始高度
hidenull设置dialog被关闭时的效果
maxHeightfalse设置最大高度
maxWidthfalse设置最大宽度
minHeight150设置最小高度
minwidth150设置最小宽度
modalfalse当dialog打开期间启用遮罩层
positioncenter在使用 jquery.ui.position.js 时,设置dialog在 viewport中的起始位置。可以接受一个字符串,一个字符串数组,一个包含相对于viewport的top 和left的精准坐标的数组,
resizabletrue在使用 jquery.ui.resizable.js时,可调整大小
shownull设置dialog打开时的效果
stacktrue当多个dialog打开时,时focused的dialog处于最前端
title“”制定一个 title属性,可选地
width300设置dialog的其实宽度
zIndex1000设置空间起始的CSS z-index。当使用多个dialog,并且 stack选项设为true,每个dialog移动到stack前面时,z-index会改变

1.1 显示dialog

var dialogOpts = { autoOpen: false };

当autoOpen设为false时,页面加载后,dialog不会自动打开。

1.2 dialog的title

默认地,dialog的 title text 不能被选择,在操作系统的默认 tool tip style中,不会显示。给下层的元素使用 title 属性,text会出现在<span>元素中,这个<span>外层的<div>有 ui-dialog-titlebar 的classnames。这些属性会出现在控件的header中。

如果我们想给dialog 的DOM结构注入额外的元素,来展现额外的样式或不同的行为,我们可以使用title选项。

var dialogOpts = { title: '<a href="#">A link title!</a>' };

建议系统会播放OS tooltip,如果 title属性以这种方式被指定给一个控件的新元素。

1.3 遮罩层

dialog最伟大的资产之一是遮罩层。这个特性创建一个覆盖层,覆盖住下面的页面。当dialog打开时,任何页面上的东西都不能被交互。当dialog关闭时,覆盖层被移除。
这个特性最有益的是,需要关闭dialog才能使得页面再次可以被交互。并且为访问者提供了一个清晰的可视化指示器,在他们继续之前,dialog必须被交互。

var dialogOpts={
modal:true
};

完全由CSS framework创建的覆盖层,所以可以通过 ThemmeRoller 进行配置主题。我们也能使用自己的图片。ui-widget-overlay被加载覆盖层上,这个选择器是自定义时必须的。

1.4 添加按钮组

button 选项接受一个对象,用来指定不同的 button 元素如何呈现。每个 property:value pair代表一个单独的按钮。

var dialogOpts={
modal:true,
buttons:{
"OK":function(){},
"Cancel":function(){}
}
};

buttons对象中的 key 是 button的文本, value是按钮点击后,所执行的回调函数的名字。

1.5 启用dialog动画

var dialogOpts = {
show: true,
hide: true
};

启用内置的效果,会优雅地减小dialog的尺寸,并 透明知道它优雅地小时。

1.6 配置dialog的规模大小

var dialogOpts = {
width: 500,
height: 300,
minWidth: 150,
minHeight: 150,
maxWidth: 600,
maxHeight: 450
}

1.7 堆积

堆积属性被默认设为true,后最后调用dialog()方法的 对话框,会用友较高的 z-index,自动地处于前方。

2 dialog的事件模型

EventFired when…
beforeclosedialog将要被关闭
closedialog被关闭
createdialog 被初始化
dragdialog被拖拽
dragStartdialog开始被拖拽
dragStop停止被拖拽
focus得到焦点
open被打开
resize
resizeStart
resizeStop
<div id="status" class="ui-widget ui-dialog ui-corner-all
ui-widget-content"> <div class="ui-widget-header ui-dialog-titlebar
ui-corner-all">Dialog Status
</div> <div class="ui-widget-content ui-dialog-content"> </div> </div> <script> $(function(){
var dialogOpts = {
open:function(){
$("#status").children(":last").text("The dialog is open");
},
close:function(){
$("#status").children(":last").text("The dialog is closed");
},
beforeclose:function(){
if(parseInt($(".ui-dialog").css("width"),10)>300){
returnfalse;
}
}
};
$("#myDialog").dialog(dialogOpts);
});
</script>

此处parseInt($(".ui-dialog").css("width"),10) 并不能获得 最终的 width。

dialog控件只传递一个单一的对象(原始事件对象)给回调函数,不传递第二个ui对象给handler函数。

3 以编码的方式控制dialog

MethodUsed to..
close关闭或隐藏dialog
destroy永远禁用dialog。destroy方法轻微的不同。与其他控件的destroy将下层HTML返回到原始状态相比,dialog的destroy方法仅仅是隐藏它
disable临时禁用
enable如果被禁用,启用它
isOpen检测有没有打开
moveToTop将指定dialog移动到stack的顶部
open
optiondialog初始化后,get 或 set 其配置选项
widget返回调用 dialog() 方法的外层元素

3.1 切换dialog的状态

<div id="myDialog" title="This is the title!"> hello
</div> <button type="button" id="button">toggle</button> <script> $(function(){
var dialogOpts = {
autoOpen:false };
$("#myDialog").dialog(dialogOpts);
$("#button").click(function(){
if($("#myDialog").dialog("isOpen")){
$("#myDialog").dialog("close")
}
else{
$("#myDialog").dialog("open")
}
});
});
</script>

4 从dialog获取数据

因为控件是下层页面的一部分,所以传递和接收数据都很简单。

<p>Please answer the opinion poll:
</p> <div id="myDialog" title="Best Widget Library"> <p>Is jQuery UI the greatest JavaScript widget library?
</p> <label for="yes">Yes!
</label> <input type="radio" id="yes" value="yes" name="question" checked="checked"><br> <label for="no">No!
</label> <input type="radio" id="no" value="no" name="question"> </div> <button type="button" id="button">toggle</button> <script> $(function(){
var dialogOpts = {
buttons:{
"OK":function(){
var answer=$("#myDialog").find("input:checked").val();
$("<p>").text("Thanks for selecting "+answer).appendTo($("body"));
$("#myDialog").dialog("close");
},
"Cancel":function(){
$("#myDialog").dialog("close");
}
}
};
$("#myDialog").dialog(dialogOpts);
});
</script>

5 创建一个动态的基于图片的dialog

<style> #thumbs { width:342px; padding:10px 0 10px 10px; border:1px solid #ccc; background-color:#eee; } #thumbs p { width:330px; font-family:Verdana; font-size:9px; text-align:center; } .thumb { width:310px; height:114px; padding:10px; border:1px solid #ccc; border-bottom:none; } .last { border-bottom:1px solid #ccc;} .thumb img { border:1px solid #ccc; margin-right:10px; float:left; cursor:pointer; } .thumb h3 { margin:0; float:left; width:198px;} #thumbs .thumb p { width:310px; margin:0; font-family:Verdana; font-size:13px; text-align:left; } #thumbs .ui-widget-header { width:330px; text-align:center;} </style> </script> <div id="thumbs" class="ui-corner-all"> <div class="ui-widget-header ui-corner-top"> <h2>Flowers</h2> </div> <p>(click a thumbnail to view a full-size image)</p> <div class="thumb ui-helper-clearfix ui-widget-content"> <a href="img/nnFull.jpg" title="Helianthus annuus"> <img src="img/nnThumb.jpg" alt="Helianthus annuus"> </a> <h3>Helianthus annuus</h3> <p>sfasfsafs</p> </div> <div> <div id="dialog"> </div> <script> $(function(){
var filename,
titleText,
dialogOpts={
modal:true,
width:388,
height:470,
autoOpen:false,
open:function(){
$("#dialog").empty();
$("<img />").attr("src",filename).appendTo("#dialog");
$("#dialog").dialog("option","title",titleText);
}
};
$("#dialog").dialog(dialogOpts);
$("#thumbs").find("a").click(function(e){
console.log("click");
e.preventDefault();
filename=$(this).attr("href");
console.log(filename);
titleText=$(this).attr("title");
$("#dialog").dialog("open");
});
});
</script>

首先,我们定义了三个变量,第一个是用来记录被点击的缩略图的全尺寸图片的路径,第二个是用来存储图片标题,作为空间的标题,第三个是dialog的配置对象。

open 选项的回调函数,会在dialog被打开前触发,所以我们可以把全尺寸图片加到dialog。

从<a>元素里取出其src时,应该用 attr(“href”)。用attr(“src”)的话取不到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐