2013-05-20 34 views
0

我有这样的javascript代码:http://jsbin.com/orenim/4/editjQuery的切换类不起作用

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'元素不会与类'.b'切换。如果我取消注释该代码是可行的。
问题是什么?

回答

3

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

BIN

或不确定的建议,使用一个承诺:

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

是的,真的,一个选择是使用'promise'和'done'方法。 – undefined

+1

@undefined - 这是真的,做动画时总是忘记承诺,而是花费大量时间来创建标志。 – adeneo