2010-06-22 4 views
2

В принципе, я бы хотел, чтобы диалог оставался центрированным при изменении размера окна (или переключении на полноэкранное окно).jQuery UI Диалоговое позиционирование - Как сделать его по-прежнему центрированным

Также диалоговое окно перетаскивается, и в идеале я бы предпочел, чтобы он остался в перетаскиваемом положении на странице при изменении размера окна. Но если он сместится обратно к центру, я тоже согласился бы на это.

Я попытался установить «position: relative» в классе «.ui-dialog», однако это создает большой пустой пробел внизу страницы; Я не смог понять, что вызывает это, используя инструменты инспектора DOM.

ответ

3

Вы можете сделать это следующим образом:

$("#dialog").dialog({ 
    drag: function() { 
     $.data(this, 'dragged', true); 
    }, 
    open: function() { 
     $.data(this, 'dragged', false);   
    } 
}); 
$(window).resize(function() { 
    $(".ui-dialog-content").each(function() { 
     if(!$.data(this, 'dragged')) 
      $(this).dialog('option', 'position', 'center'); 
    }); 
}); 

You can try out a demo here, это повторно центрирует диалоговые на window.resize только если вы не тащили его, так как он был открыт. Когда мы открываем, мы устанавливаем данные для dragged в false, если мы перетащим его, установите его на true ... и если он еще false (еще не перетаскивается), произойдет повторный центр, иначе мы его оставим в его нынешнем положении.

Хороший вопрос/идеи о перетягивании обнаружения, кстати, это улучшило бы приложение я в настоящее время работаю над, собирается использовать это сам :)

+0

Спасибо - что, кажется, работает хорошо, но еще не совсем там. Я забыл упомянуть, что мой контейнер div сосредоточен на странице (margin: 0 auto). Вот почему возникает проблема. Пока контейнер div всегда находится по центру страницы, диалог не остается относительно контейнера. – GSTAR

+1

@GSTAR - Если это так, вам нужно изменить '$ (this) .dialog ('option', 'position', 'center');' с кодом, который позиционирует диалог так, как вы хотите ... это только имеет так много встроенных позиций, вне этого вам нужно будет отрегулировать его вручную. Вы можете увидеть действительные параметры позиции здесь: http://jqueryui.com/demos/dialog/#option-position –

+0

Да, я пробовал варианты позиции, однако проблема в том, что он позиционирует диалог относительно окна, а не контейнер div. И.Е. если я укажу «position: [350, 150]», эти значения относятся к окну, а не к контейнеру. – GSTAR