这是一个基本的对话框插件:
http://jsfiddle.net/pjUUQ/
(function($) {
var dialogHTML = '<div class="dialog"></div>';
$.openDialog = function(opts) {
// Create the DIV for dialog without inserting into DO
var dialog = $(dialogHTML);
dialog.appendTo('body');
// Give dialog some basic CSS
dialog.css({
position: 'absolute', // positioned
'z-index': Math.pow(2,32) // make it sit on top
});
// Position the dialog on the screen
var horizOffset = ($(window).width() - opts.width || dialog.outerWidht()) / 2;
var vertOffset = ($(window).height() - opts.height || dialog.outerHeight()) / 2;
dialog.css({
left: horizOffset,
right: horizOffset,
top: vertOffset,
bottom: vertOffset
});
// Return dialog object to make it chainable
return dialog;
};
}(jQuery));
$.openDialog({width: 200, height: 100}).append('hello world');
您当然可以添加很多内容,例如处理要在 Esc 上关闭的关键事件,添加带有按钮的标题栏。但是你可能已经知道如何做这些事情了。
创建对话框时需要注意的几点:
- 设置足够高的 z-index 以使对话框始终位于顶部
- 将对话框元素附加到
BODY
根据我的经验,如果对话框 HTML 并不总是出现在页面上,性能会更好一些。这与优雅降级背道而驰,但 DOM 树越轻,应用程序似乎运行得越快。所以最好根据需要将对话框元素添加到树中。
编辑:请注意,我的对话框插件不希望您在页面上有预定义的 HTML。它只是让人联想到一个div。因此,您无需选择元素并将其转换为对话框。相反,您重新创建一个。