我正在編寫一些簡單的UI代碼,以便在按下按鈕時重新排列布局。如何使用when()與多個延遲以使效果非同時運行?
我有一個搜索欄有三個表單域,一個「搜索」按鈕,一些文本和一個標誌。在按下「搜索」時,按鈕,徽標和文本淡出,帶有文本字段的欄位使用jquery.animate()
滑動到頁面頂部,徽標和搜索按鈕被賦予不同的CSS以重新定位它們,然後淡入在新的地點。使用
我想使用deferred.done()這個JQuery documentation
我開始用下面的:
var fades = function() {
$("#centerSearchText").fadeOut();
$("#headerImage").fadeOut();
$("#searchButton").fadeOut();
}
$.when(fades()).done(function() {
var positionUpdate = function() {
$("#headerImage").css({ "left": "12px", "margin-left": "12px", "margin-top": "12px", "float": "left" });
$("#searchButton").appendTo("#search_input_table tr:first")
$("#header").animate({
top: "0px",
marginTop: "0px",
}, 500);
}
$.when(cssUpdate()).done(function() {
$("#headerImage").fadeIn();
$("#searchButton").fadeIn();
});
});
...因爲每一個功能是同時運行,沒有工作。我意識到我沒有正確遵循的例子在下面鏈接的例子返回延期對象,如:
var effect = function() {
return $("div").fadeIn(800).delay(1200).fadeOut();
};
不過,我需要當三個fadeOuts()
完成後返回,而不是隻有一個。所以,我在我的代碼更新到下面:
var fades = function() {
return $.when($("#centerSearchText").fadeOut(), $("#headerImage").fadeOut(), $("#searchbtn").fadeOut()).done()
}
$.when(fades()).done(function() {
var cssUpdate = function() {
return $.when($("#headerImage").css({ "left": "12px", "margin-left": "12px", "margin-top": "12px", "float": "left" }),
$("#searchbtn").appendTo("#search_input_table tr:first"),
$("#header").animate({
top: "0px",
marginTop: "0px",
}, 500)).done();
}
$.when(cssUpdate()).done(function() {
$("#headerImage").fadeIn();
$("#searchbtn").fadeIn();
});
});
...其中UI元素不再是同時運行的影響,因爲初始fadeOuts後達到無碼。
任何人都可以啓發我,我在做什麼錯在這裏?我確信我誤解了when()
和done()
的使用,但是我一直沒能找到使用多個延遲對象與我的代碼進行比較的優秀文檔。
你是什麼意思的「*,因爲在初始fadeOuts後沒有達到代碼*」?您的更新代碼現在是否按預期工作? – Bergi
你可以忽略所有那些空的'.done()'調用 - 它們什麼都不做。另外,'$ .when(...)'帶有一個參數(這已經是一個承諾)可以省略,例如'fades()。done(...)'。 – Bergi
您最後一次嘗試......您在$('(#headerImage))之前缺少'$'...否則我希望您的代碼能夠正常工作,注意您不需要調用'。 done()',除非你準備好給它回撥 –