animate
memanggil callback-nya sekali untuk setiap elemen di set yang Anda panggil animate
:
Jika diberikan, start
, step
, progress
, complete
, done
, fail
, dan always
callback disebut pada basis per-elemen ...
Karena Anda menganimasikan dua elemen ( html
elemen, dan body
elemen), Anda mendapatkan dua callback. (Bagi siapa pun yang bertanya - tanya mengapa OP menganimasikan dua elemen, itu karena animasi berfungsi body
di beberapa browser tetapi di html
browser lain.)
Untuk mendapatkan satu callback saat animasi selesai, animate
dokumen mengarahkan Anda menggunakan promise
metode untuk mendapatkan janji untuk antrean animasi, lalu menggunakan then
untuk 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