Javascript 动画回调不运行

Javascript 动画回调不运行,javascript,jquery,callback,jquery-animate,Javascript,Jquery,Callback,Jquery Animate,在过去的几个小时里,我一直在研究这个问题,这让我小小的大脑感到困惑 发生的情况是,jqueryanimate动画似乎在动画期间停止,从而停止回调的发生 问题在于,这种情况是断断续续、随机发生的,我无法在代码中找到问题所在。这种情况大约7次发生1次。然而,这种情况可能会在第一次或10次之后发生。 在这种情况下,我真的无法组合一个JSFIDLE,因为它与站点的其他部分链接得如此紧密。相反,我想在这里留下一个链接,指向相关部分。这是一本书。下面显示的代码从第219行开始。如果您查看firebug控制台

在过去的几个小时里,我一直在研究这个问题,这让我小小的大脑感到困惑

发生的情况是,jqueryanimate动画似乎在动画期间停止,从而停止回调的发生

问题在于,这种情况是断断续续、随机发生的,我无法在代码中找到问题所在。这种情况大约7次发生1次。然而,这种情况可能会在第一次或10次之后发生。

在这种情况下,我真的无法组合一个JSFIDLE,因为它与站点的其他部分链接得如此紧密。相反,我想在这里留下一个链接,指向相关部分。这是一本书。下面显示的代码从第219行开始。如果您查看firebug控制台,您可以看到我在代码运行时所做的日志。您还可以看到,当问题发生时,css属性
left
尚未设置动画直到完成

下图显示了该问题。请注意,css
left
属性的值不是664px(如果问题没有发生的话)

以下是相关代码

    $(".close").live("click", function() {

        console.log("--------------------");
        console.log("Close button has been clicked");

        var toMove = $(this).parent().attr("class").replace("infoBox ", "");

        $(this)
            .parent()
            .fadeOut("fast");

        console.log("Setting #" + toMove + " back to default position");

        $("#" + toMove)
            .removeClass("active")
            .addClass("ready")
            .delay(100)
            .animate({
                left: $("#" + toMove).attr("data-left").replace("px", "")
            }, 200, function() {
                console.log("Animate has finished. Now checking all images are in the right place");
                resetAll();
                $(".close").remove();
        });
    });
我的问题有什么问题吗?让我知道,我非常乐意修改和编辑它,使它符合stackoverflow的严格标准

相关的


尝试向图标添加中间状态。只要你点击关闭按钮,类就会从“活动”变为“准备就绪”。例如,添加“moving”,不要让任何其他函数在其状态为“moving”时被调用。当它返回到初始位置时,可以再次将类设置为“就绪”


这对我来说是可行的:“--------------关闭按钮已被点击设置#改进回到默认位置动画已完成。现在检查所有图像是否在正确的位置resetAll功能已完成运行”这似乎大约发生了7次中的1次,但可能或多或少。只需划掉一些明显的事情;当出现问题时,您是否正在交换选项卡或以其他方式进行窗口管理?是否有其他脚本(包括浏览器扩展)正在运行?图标一越过鼠标光标就停止动画。单击闭合十字后,在它返回初始位置时尝试拦截它。“mouseover”处理程序调用
$(this).stop()
$("#" + toMove)
        .removeClass("active")
        .addClass("moving")
        .delay(100)
        .animate({
            left: $("#" + toMove).attr("data-left").replace("px", "")
        }, 200, function() {
            console.log("Animate has finished. Now checking all images are in the right place");
            resetAll();
            $(".close").remove();
    })
        .removeClass("moving")
        .addClass("ready");