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