show-effect完成后,jQuery UI Diolog执行功能

时间:2014-03-08 22:40:02

标签: jquery jquery-ui jquery-ui-dialog effect

我目前正在使用jQuery和jQueryUI进行编码。我正在使用jQuery Dialog Widget。 (jQuery API - Dialog Widget

我打开一个对话框并使用show-method,代码是这样的:

$("#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类并且它可以工作,但是当效果运行时,显示被破坏(显示在左边而不是右边),就在它之后它是正确的,所以我想尝试在效果之后添加它

那么,有一个好方法吗?

2 个答案:

答案 0 :(得分:2)

look here第二个答案,因为第一个人不再工作了

open: function () {
    $(this).parent().promise().done(function () {
        console.log("[#Dialog] Opened");
    });
}

答案 1 :(得分:0)

啊,我自己找到了一个解决方案。也许这只是一种解决方法,但它正在发挥作用。

我在对话框中添加了autoOpen: false,选项,并在创建对话框时添加了以下几行:

$("#dialog").dialog('open');
$(".achievement_dialog.ui-dialog").wait(1000, function () { $(this).css("position", "fixed"); console.log("done after effect"); });

方法wait()是一个自编码的jQuery函数,我为等待函数的情况创建了一次:

$.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;
};

如果我使用与节目动画时间相同的等待时间,这对我有用。但我会看看JohnnyAWs的回答。听起来更好。