jQuery对话框始终居中

时间:2011-09-26 14:58:12

标签: jquery jquery-ui modal-dialog

我如何实现一个带有自动宽度和放大器的jQuery模式对话框高度总是在浏览器中居中。此外,在调整浏览器窗口的大小后。

以下代码不起作用。我认为问题在于自动宽度和宽度。高度。

jQuery - 代码

$("<div class='popupDialog'>Loading...</div>").dialog({
  autoOpen: true,
  closeOnEscape: true,
  height: 'auto',
  modal: true,
  title: 'About Ricky',
  width: 'auto'
}).bind('dialogclose', function() {
  jdialog.dialog('destroy');
}).load(url, function() {
  $(this).dialog("option", "position", ['center', 'center'] );
});

$(window).resize(function() {
  $(".ui-dialog-content").dialog("option", "position", ['center', 'center']);
});

谢谢!

5 个答案:

答案 0 :(得分:7)

实际上,我认为position: ["center", "center"]不是最佳解决方案,因为它会根据创建时视口的大小为对话框指定显式top:left: css属性。

我试图在屏幕上垂直放置一个对话框中心时遇到了同样的问题。这是我的解决方案:

options函数的.dialog()部分,我传递了position:[null, 32]nullleft:值设置为元素的样式,32仅用于将对话框固定在窗口顶部。另外一定要设置明确的宽度。

我还使用dialogClass选项来分配一个自定义类,它只是一个margin:0 auto; css属性:

.myClass{
    margin:0 auto;
}

我的对话框如下:

  $('div#popup').dialog({
    autoOpen: false,
    height: 710,
    modal: true,
    position: [null, 32],
    dialogClass: "myClass",
    resizable: false,
    show: 'fade',
    width: 1080
  });

希望这有助于某人。

答案 1 :(得分:4)

$(window).resize(function() {
    $("#dialog").dialog("option", "position", "center");
});

工作jsFiddle:http://jsfiddle.net/vNB8M/

对话框以自动宽度和宽度为中心。高度并在窗口调整大小后继续居中。

答案 2 :(得分:1)

没有一个答案完全符合我的要求。对于那些仍然存在问题的人来说,这对我有用。这将强制对话框始终显示在屏幕的中央,并且在浏览器调整大小时它将使对话框居中。

$( "#ShowDialogButton" ).click(function(){
    $( "#MyDialog" ).dialog({
       show: 'fade'
     }).dialog( "option", "position", { my: "center", at: "center", of: window } );

    $(window).resize(function() {
        $( "#MyDialog" ).dialog( "option", "position", { my: "center", at: "center", of: window } );
    });

});

答案 3 :(得分:0)

对话框周围的模态窗口应允许您将对话框放置在以下css的中心位置:

margin-left:auto;margin-right:auto;

这不起作用吗?你有一个我们可以查看的“样本”页面吗?

答案 4 :(得分:0)

此解决方案正在运行:

$(window).resize(function () 
{
    $("#myDialog").dialog("close");
    $("#myDialog").dialog("open");
});

性能非常差,但您可以等待调整大小结束:jQuery - how to wait for the 'end' of 'resize' event and only then perform an action?

我也试过这个,但是我不能滚动低于或高于打开对话框的元素的位置:

$(window).scroll(function () 
{
    $("#myDialog").dialog("close");
    $("#myDialog").dialog("open");
});