發(fā)現(xiàn)一個代碼問題
第69行直接返回dtd是不對的。必須返回dtd.promise()。原因是jQuery規(guī)定,任意一個deferred對象有三種執(zhí)行狀態(tài)----未完成,已完成和已失敗。如果直接返回dtd,$.when()的默認執(zhí)行狀態(tài)為"已完成",立即觸發(fā)后面的done()方法,這就失去回調函數(shù)的作用了。dtd.promise()的目的,就是保證目前的執(zhí)行狀態(tài)----也就是"未完成"----不變,從而確保只有操作完成后,才會觸發(fā)回調函數(shù)。
2016-01-11
主要是他還要促發(fā)另外一個動畫的事件
2016-10-31
$("#block3").animate({
? ? ? ? ? ? ? ? width: "50%"
? ? ? ? ? ? }, 2000, function() {
? ? ? ? ? ? ? ? dtd.resolve(); // 改變Deferred對象的執(zhí)行狀態(tài)
? ? ? ? ? ? });
這個動畫的回調函數(shù)已經(jīng)改變了Deferred對象的執(zhí)行狀態(tài),所以可以直接返回dtd對象