イベントごとにフラグを設定します。最初はfalseです。問題の2つのイベントをフックしてください(transitionEnd
とajax success
のように聞こえます)。各イベントはフラグを設定し、関数を呼び出します。その関数はフラグをチェックします:もし両方がセットされていれば、何かします。
ここでは、CSSを移行するのではなく、animate
を使用して、単純なものにする例を示します。Live example | source
jQuery(function($) {
$("#theButton").click(function() {
this.style.display = "none";
$("#box, #content").show();
doTheStuff();
});
function doTheStuff() {
var ajaxDone = false,
ajaxFailed = false,
animationDone = false;
display("Triggering ajax and animation");
$.ajax({
url: "http://jsbin.com/ibebiv",
method: "GET",
success: function(data) {
$("#content").append(data);
display("ajax done");
ajaxDone = true;
checkDone();
},
error: function() {
ajaxFailed = true;
checkDone();
}
});
$("#box").animate({
left: "+200px"
}, function() {
display("animation done");
animationDone = true;
checkDone();
});
function checkDone() {
if ((ajaxDone || ajaxFailed) && animationFlag) {
display("<strong>All done</strong>");
}
}
}
function display(msg) {
$("<p>").html(msg).appendTo("#content");
}
});
ajax呼び出しが失敗した場合のエラー処理に注意してください。
*(私は間違った質問を選んだのですが、以前はこの質問に少なくとも2つのバリエーションがありました。)* –
いいえ、私にはtransitionEndイベントが関係するため、もう少し複雑です。 – alt
@Jackson:はい、間違った質問を選んでコメントを編集しました。しかし、一日の終わりには、これは次のようになります。二つのことが起こるまでどのように待つのですか?私は間違いなく前にその質問を見てきました。答えは簡単です。 –