animatememanggil callback-nya sekali untuk setiap elemen di set yang Anda panggil animate:
Jika diberikan, start, step, progress, complete, done, fail, dan alwayscallback disebut pada basis per-elemen ...
Karena Anda menganimasikan dua elemen ( htmlelemen, dan bodyelemen), Anda mendapatkan dua callback. (Bagi siapa pun yang bertanya - tanya mengapa OP menganimasikan dua elemen, itu karena animasi berfungsi bodydi beberapa browser tetapi di htmlbrowser lain.)
Untuk mendapatkan satu callback saat animasi selesai, animatedokumen mengarahkan Anda menggunakan promisemetode untuk mendapatkan janji untuk antrean animasi, lalu menggunakan thenuntuk mengantrekan callback:
$("html, body").animate(/*...*/)
.promise().then(function() {
// Animation complete
});
(Catatan: Kevin B menunjukkan hal ini dalam jawabannya ketika pertanyaan pertama kali diajukan. Saya tidak melakukannya sampai empat tahun kemudian ketika saya melihat itu hilang, menambahkannya, dan ... kemudian melihat jawaban Kevin. Tolong berikan jawabannya cinta itu pantas. Saya pikir karena ini adalah jawaban yang diterima, saya harus membiarkannya masuk.)
Berikut adalah contoh yang menampilkan callback elemen individual, dan callback penyelesaian keseluruhan:
jQuery(function($) {
$("#one, #two").animate({
marginLeft: "30em"
}, function() {
// Called per element
display("Done animating " + this.id);
}).promise().then(function() {
// Called when the animation in total is complete
display("Done with animation");
});
function display(msg) {
$("<p>").html(msg).appendTo(document.body);
}
});
<div id="one">I'm one</div>
<div id="two">I'm two</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
html, body. Saatnya menghidupkan kembali otakku. Terima kasih