2013-05-20 110 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