На данный момент я кодирую jQuery и jQueryUI. Я использую виджет диалогового окна jQuery. (jQuery API - Dialog Widget)
Я открываю диалог и использую для этого метод show, код выглядит примерно так:
$("#dialog").dialog({
dialogClass: 'myclass',
height: 'auto',
width: 'auto',
modal: true,
resizable: false,
draggable: false,
buttons: [{ text: "Ok", click: function () { $(this).dialog("close"); } }],
show: { effect: "slide", duration: 1000, direction: "right", finish: function () { $(".myclass.ui-dialog").css("position", "fixed"); console.log("done after effect"); } },
position: { my: "right top", at: "right top", of: window },
});
Важная часть - это show:
там. Все это работает, кроме параметра "finish". Есть ли способ добавить функцию после завершения этого эффекта?
Я просто хочу, чтобы мой диалог был исправлен, чтобы он оставался на своем месте, если вы прокручиваете. Я попытался перезаписать класс css, и он работает, но пока эффект запущен, дисплей сломан (отображается слева, а не справа), и сразу после него это правильно, поэтому я хотел попытаться добавить его после эффекта,
Итак, есть ли хороший способ?
посмотрите здесь второй ответ, так как первый не работает больше
open: function () {
$(this).parent().promise().done(function () {
console.log("[#Dialog] Opened");
});
}
Ах, я нашел решение сам. Возможно, это всего лишь обходной путь, но он работает.
Я добавил параметр autoOpen: false,
в диалог и добавил следующие строки при создании диалога:
$("#dialog").dialog('open');
$(".achievement_dialog.ui-dialog").wait(1000, function () { $(this).css("position", "fixed"); console.log("done after effect"); });
Метод wait() - это самокодированная функция jQuery i, созданная один раз для случаев ожидания функций:
$.fn.wait = function (timeout, callback) {
/// <summary>
/// Timeout for animations or show/hide-effects. Put the functions that should be executed after it in the callback function,
/// if they are no animations (or the won't wait).
/// </summary>
/// <param name="timeout" type="int">Time in miliseconds to wait</param>
/// <param name="callback" type="Function">A function to execute after the time</param>
/// <returns type="jQuery" />
if (typeof timeout == 'undefined')
timeout = 1000;
$(this).animate({ opacity: 1.0 }, timeout, callback);
return this;
};
Это работает для меня, если я использую то же время ожидания, что и время анимации шоу. Но я посмотрю на ответ Джонни. это звучит еще лучше.