0

我有这个 javascript 代码:http: //jsbin.com/orenim/4/edit

blinkTimes = 0;
function blink () {                           
  $('.a').toggleClass('b');
  blinkTimes --;
  if (blinkTimes > 0) {
    setTimeout(blink, 500);
  }
}

function startBlink() {
  //alert('?');
  blinkTimes = 4;
  blink();
}

$(document).click(function() {
  $('html, body').animate({ scrollTop: top }, '400', 'swing', startBlink);
});

'.b'这应该在动画之后立即切换类。由于某些未知原因,该'.a'元素没有与 class 切换'.b'。如果我取消注释alert('?')代码是工作。
问题是什么?

4

1 回答 1

3

$('html, body')选择两个元素,同时触发两个回调,这会相互抵消,试试看它是$('body').animate({ ....如何工作的。如果您需要同时选择这两个元素,请使用一个标志来确保回调函数只运行一次。

垃圾桶

或按照未定义的建议,使用承诺:

$(document).click(function() {
  $('body, html').animate({ scrollTop: top }, '400', 'swing').promise().done(startBlink)
});
于 2013-05-20T21:46:54.633 回答