习惯上,我们播放一条简短的信息,或向浏览者询问一个问题,都会用到dialog。
- 创建一个基本的dialog
- 使用dialog 选项
- 形式
- 启用内置动画
- 给dialog添加按钮
- 使用dialog回调函数
- 编码的形式控制dialog
1 创建一个基本的dialog
使用 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必须被交互。
modal:true
};
完全由CSS framework创建的覆盖层,所以可以通过 ThemmeRoller 进行配置主题。我们也能使用自己的图片。ui-widget-overlay被加载覆盖层上,这个选择器是自定义时必须的。
1.4 添加按钮组
button 选项接受一个对象,用来指定不同的 button 元素如何呈现。每个 property:value pair代表一个单独的按钮。
modal:true,
buttons:{
"OK":function(){},
"Cancel":function(){}
}
};
buttons对象中的 key 是 button的文本, value是按钮点击后,所执行的回调函数的名字。
1.5 启用dialog动画
show: true,
hide: true
};
启用内置的效果,会优雅地减小dialog的尺寸,并 透明知道它优雅地小时。
1.6 配置dialog的规模大小
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 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的状态
$(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>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
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”)的话取不到。