編輯: 這裏接受的答案:How to get jQuery to wait until an effect is finished?不能解決我的問題,因爲回調函數是在jQuery UI效果完成之前執行的。在這個線程上還有另一個答案,它指向promise(),但這只是答案的一部分,並且缺少許多信息。如何等待,直到一個循環的jQuery效果完成之前執行功能
我想等到一個jQuery效果循環完全完成動畫,直到執行回調函數。
但是,似乎回調函數在最後一個jquery效果開始後立即執行,但不會等待動畫結束。
我想知道如何等待元素被隱藏使用jquery拖放效果爲循環中的所有元素,並且只有在元素已完全隱藏回調函數運行後。
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
</head>
<body>
<button id="execute-button">Execute</button>
<div id="messagebox"></div>
<div id="1" style="background-color:blue;display:none;height:33%;width:100%;"></div>
<div id="2" style="background-color:green;display:none;height:33%;width:100%;"></div>
<div id="3" style="background-color:red;display:none;height:34%;width:100%;"></div>
<div id="4" style="background-color:brown;height:33%;width:100%;"></div>
<div id="5" style="background-color:black;height:33%;width:100%;"></div>
<div id="6" style="background-color:gray;height:34%;width:100%;"></div>
<script>
$(document).ready(function(){
function hideElements(callback){
//hide elements
var hideDivs = ["#4","#5","#6"];
for(i = 0; i < hideDivs.length; i++){
//alert("hiding...");
$(""+hideDivs[i]).hide("drop",{direction:"left"},5000);
//alert(divs[i]);
}
callback();
};
function showElements(){
//show elements
var showDivs = ["#1","#2","#3"];
//alert(JSON.stringify(divs));
for(i = 0; i < showDivs.length; i++){
//alert("showing...");
$(""+showDivs[i]).show("drop",{direction:"right"},1000);
//alert(divs[i]);
}
}
hideElements(showElements());
});
$(document).on("click","#execute-button", function(){
//$("#messagebox").html("test");
$("#1").show("#1");
});
</script>
</body>
</html>
需要使用回調,當隱藏事件結束時迴應http://api.jquery.com/hide/ – garryp
@ jfriend00提供的副本顯示瞭如何等待一個效果完成,而不是多個,這是什麼問題是問,如果我沒有弄錯。 –
@MikeMcCaughan - 對143個upvotes的答案在多個對象中工作得很好。 '$(selector).promise()。done()'捕獲在該選擇器匹配的所有對象中運行的所有動畫。 – jfriend00