【问题标题】:jQuery is animated still after callback回调后jQuery仍然动画
【发布时间】:2012-01-18 13:14:22
【问题描述】:

我在http://jsfiddle.net/v53Fm/ 有一个基本的轮播

当您单击开始按钮时,它会滚动到下一个项目,但我希望它继续滚动。

如您所见,我在动画finish() 中有一个回调函数,然后再次调用scrollNext() 来实现此目的。

但是carousel.is(':animated') 行阻止它重复。

这不应该是真的,因为它从动画回调函数的末尾调用scrollNext(),所以有什么想法为什么要这样做?

【问题讨论】:

标签: jquery animation callback


【解决方案1】:

看起来 :animated 选择器直到 'end' 函数完成后才被删除。

但是,这确实有效:

function scrollNext() {
    var carousel = $('ul');
    if (carousel.is(':animated')) return false;
    carousel.animate({ left: '-=180px' }, 400, finish);
}

function finish() {
   setTimeout(scrollNext,1); //runs the function one millisecond after the finish() method is called
}

【讨论】:

  • 如果在完成函数中我们可以以某种方式删除 :animated 属性,那将是一个更清晰/更好的答案。但我似乎无法在发布之前所做的研究中找到这一点。 点头
【解决方案2】:

似乎是时间问题。试试:

function finish() {
    setTimeout(scrollNext, 100);  // adds a 100ms delay
}

【讨论】:

    【解决方案3】:

    只需删除 return 语句并增加动画持续时间。 见here

    【讨论】:

    • 这样看起来更流畅(我认为这是用户想要实现的),但你是对的。
    • 哦,抱歉,我没听懂……无论如何,你不应该为这么小的事情投反对票。否则人们会失去对答案的兴趣。而是做更好的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多