Javascript jQuery动画不触发回调函数

Javascript jQuery动画不触发回调函数,javascript,jquery,jquery-animate,jquery-effects,jquery-easing,Javascript,Jquery,Jquery Animate,Jquery Effects,Jquery Easing,我有以下jQuery动画功能: $myDiv.animate({ "left": "0%" }, { duration: 1000, easing: 'easeInOutExpo' }, function () { alert('hi'); } ); $myDiv.animate({ "left": "0%", }, { duration: 1000, easing: "easeInOutExpo", complete: fun

我有以下jQuery动画功能:

$myDiv.animate({ "left": "0%" }, { duration: 1000, easing: 'easeInOutExpo' }, 
    function () {
        alert('hi');
    }
);
$myDiv.animate({
    "left": "0%",
}, {
    duration: 1000,
    easing: "easeInOutExpo",
    complete: function () {
        alert('hi');
    },
});
动画本身可以工作
$myDiv
幻灯片具有所需的
easeInOutExpo
效果。但是,回调函数永远不会被激发。为了测试它,我将回调改为仅仅
alert(“hi”),如上所示。还是不行

我可能做错了什么?

试试这个

演示:


这里有几个问题需要解决:

  • 确保代码中包含了jQuery UI,因为它不是标准jQuery库的一部分
  • 您的语法错误:您混淆了函数的两个不同选项 要么是

    $(element).animate(properties [,duration] [,easing] [,complete]);
    

    其中,
    options
    是如下格式的对象:

    {
      duration: number,
      easing: string,
      complete: function,
    }
    
    您已经使用了第二个选项,因此您需要正确格式化它,以便为您的函数使用
    options
    对象的
    complete
    属性:

    $myDiv.animate({ "left": "0%" }, { duration: 1000, easing: 'easeInOutExpo' }, 
        function () {
            alert('hi');
        }
    );
    
    $myDiv.animate({
        "left": "0%",
    }, {
        duration: 1000,
        easing: "easeInOutExpo",
        complete: function () {
            alert('hi');
        },
    });
    

    或者,您可以使用第一个格式选项:

    $("#myDiv").animate({
        "left": "0%",
    }, 1000, "easeInOutExpo", function () {
        alert('hi');
    });
    

    一种方法是使用JQuery Promise


    除非您将
    $myDiv
    设置为等于
    $(“#myDiv”)
    ,否则它应该是后者。@AstroCB是的,$myDiv等于该值。它是动态变化的,这就是为什么它是一个变量。它已正确设置,并且动画确实有效。只是没有完整的功能,就是这样!谢谢@Dola知道为什么会这样(为什么必须指定complete:)?再次感谢@Nullqwerty好吧,您可以随时参考jQuery文档以获取使用示例。你可以查一查我去过哪里。但不了解下文所述的@AstroCB混合格式。现在我知道了。ThanksThanks@AstroCB我是JQuery新手,刚刚了解了您描述的格式。谢谢你的提示。我确实有放松图书馆在那里(就像我说的,它的那部分工作得很好)。但其中的格式部分正是回调函数不能像Dola上面指出的那样工作的原因。再次感谢。你的解释使我非常理解。没有意识到存在混合格式的问题。现在我知道了。Thanks@Nullqwerty没问题;我很高兴能帮上忙。我建议您浏览一下,因为它很好地展示了库中每一部分的不同语法和需求。
    $myDiv.animate({ "left": "0%" }, { duration: 1000, easing: 'easeInOutExpo' }).promise().done(function(){
    
         alert('hi done');
    
    });