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

习惯上,我们播放一条简短的信息,或向浏览者询问一个问题,都会用到dialog。

  • 创建一个基本的dialog
  • 使用dialog 选项
  • 形式
  • 启用内置动画
  • 给dialog添加按钮
  • 使用dialog回调函数
  • 编码的形式控制dialog

1 创建一个基本的dialog

$(function(){ $("#myDialog").dialog(); }); </script>

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

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

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

1 dialog的选项

Option Default value Used to…
autoOpen true 当设为true时,dialog()方法一被调用就显示
buttons {} 支持一个包含button的对象。每个key会成为<button>的text,每个value会成为button点击时执行的回调函数
closeOnEscape true 如果设为true,按下ESC键能关闭dialog
closeText close 设置关闭按钮的text
dialogClass “” 出于主题的目的,为dialog设置额外的classnames
disable false 禁用控件
draggable true 在使用 jquery.ui.draggable.js 的情况下,使得dialog可以拖拽
height auto 设置dialog的初始高度
hide null 设置dialog被关闭时的效果
maxHeight false 设置最大高度
maxWidth false 设置最大宽度
minHeight 150 设置最小高度
minwidth 150 设置最小宽度
modal false 当dialog打开期间启用遮罩层
position center 在使用 jquery.ui.position.js 时,设置dialog在 viewport中的起始位置。可以接受一个字符串,一个字符串数组,一个包含相对于viewport的top 和left的精准坐标的数组,
resizable true 在使用 jquery.ui.resizable.js时,可调整大小
show null 设置dialog打开时的效果
stack true 当多个dialog打开时,时focused的dialog处于最前端
title “” 制定一个 title属性,可选地
width 300 设置dialog的其实宽度
zIndex 1000 设置空间起始的CSS z-index。当使用多个dialog,并且 stack选项设为true,每个dialog移动到stack前面时,z-index会改变

1.1 显示dialog

};

当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选项。

};

建议系统会播放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的事件模型

Event Fired when…
beforeclose dialog将要被关闭
close dialog被关闭
create dialog 被初始化
drag dialog被拖拽
dragStart dialog开始被拖拽
dragStop 停止被拖拽
focus 得到焦点
open 被打开
resize  
resizeStart  
resizeStop  
<div id="status" class="ui-widget ui-dialog ui-corner-all
<div class="ui-widget-header ui-dialog-titlebar
ui-corner-all">Dialog Status
$(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

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

3.1 切换dialog的状态

hello
$(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>Is jQuery UI the greatest JavaScript widget library?
<label for="yes">Yes!
<label for="no">No!
$(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

#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;} $(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”)的话取不到。

上一篇:【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.5.Accordion控件


下一篇:【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.9.Progressbar控件