Meja kerja dengan laptop berisi kode animasi dan sketsa panel antarmuka di atas kertas

Kamu punya panel notifikasi yang muncul tiba-tiba, dan rasanya kasar. Animasi jQuery bisa memperhalus kemunculannya lewat tiga cara: animate(), fadeIn()/fadeOut(), dan slideDown()/slideUp(). Memilih metode animasi jQuery yang tepat bergantung pada seberapa banyak kontrol yang kamu butuhkan dan seberapa sederhana antarmukanya.

Kapan cukup memakai fade

Efek fade mengubah nilai opacity dari 0 ke 1 atau sebaliknya. Karena hanya satu properti yang bergerak, hasilnya halus dan tidak menggeser tata letak elemen lain di sekitarnya. Ini pilihan paling aman untuk elemen yang sudah punya ruang sendiri, seperti tooltip, overlay, atau pesan singkat.

$('#notifikasi').fadeIn(300);
$('#notifikasi').fadeOut(300);

Kekurangannya, elemen yang sedang transparan masih menempati ruang di halaman sampai animasi selesai. Kalau kamu butuh elemen benar-benar hilang dari alur dokumen, gunakan varian fadeToggle() yang tetap memakai display: none di akhir animasi.

Slide untuk elemen yang mengubah tinggi halaman

Slide mengubah tinggi elemen dari nol ke tinggi aslinya. Cocok untuk menu akordeon, daftar komentar yang bisa dibuka-tutup, atau panel filter yang menempel di bawah header. Pengguna melihat elemen terbuka, bukan muncul begitu saja.

$('.panel-filter').slideDown('fast');
$('.panel-filter').slideUp('fast');

Masalah muncul kalau elemen punya padding atau border. Slide jQuery juga menganimasikan properti tersebut, sehingga isi elemen bisa terlihat melompat di awal animasi. Solusinya, bungkus konten dengan elemen dalam yang tanpa padding, lalu animasikan elemen luarnya.

animate() saat butuh lebih dari satu properti

animate() menerima objek berisi properti CSS dan nilainya. Di sinilah kontrol penuh berada: kamu bisa menggeser posisi, mengubah lebar, memutar rotasi (dengan plugin tambahan), atau menggabungkan beberapa properti sekaligus.

$('#kotak').animate({
  left: '200px',
  opacity: 0.5,
  width: '320px'
}, 600, 'swing', function () {
  // dijalankan setelah animasi selesai
});

Parameter keempat adalah callback yang berguna untuk merangkai animasi berurutan. Tanpa callback, animasi berikutnya bisa berjalan bersamaan dan hasilnya tidak sesuai harapan.

Keterbatasan animate()

animate() tidak bisa menganimasikan properti warna secara langsung. Untuk itu kamu butuh plugin seperti jQuery Color, atau pindah ke CSS transition. Animasi berbasis JavaScript juga tidak berjalan di thread komposit browser, jadi pada elemen besar atau banyak sekaligus, gerakannya bisa terasa lebih berat dibanding animasi CSS.

Perbandingan singkat ketiga metode

Metode Properti yang dianimasikan Cocok untuk Perlu callback?
fadeIn/fadeOut opacity, display Tooltip, overlay, pesan Jarang
slideDown/slideUp height, padding, margin Akordeon, panel, menu Kadang
animate() Properti apa pun yang bernilai angka Gerakan kustom, kombinasi Sering

Menghentikan animasi yang bertabrakan

Kalau pengguna mengklik tombol buka-tutup dengan cepat, antrean animasi bisa menumpuk dan elemen bergerak aneh. jQuery menyimpan animasi dalam antrean per elemen. Panggil .stop() sebelum memulai animasi baru untuk mengosongkannya.

$('#tombol').on('click', function () {
  $('#panel').stop(true, true).slideToggle(250);
});

Argumen pertama membersihkan antrean, argumen kedua melompatkan animasi yang sedang berjalan ke nilai akhirnya. Tanpa argumen kedua, panel bisa berhenti di tengah tinggi dan terlihat terpotong.

Kapan sebaiknya tidak memakai animasi jQuery

Untuk transisi hover sederhana, perubahan warna tombol, atau efek yang hanya mengandalkan opacity dan transform, CSS transition lebih ringan dan tidak butuh JavaScript sama sekali. Browser menanganinya di thread terpisah, sehingga halaman tetap responsif saat animasi berjalan.

Animasi jQuery tetap berguna ketika kamu perlu memicu efek dari perhitungan JavaScript, misalnya menggeser elemen berdasarkan posisi scroll, atau ketika kode yang ada sudah sepenuhnya memakai jQuery dan menambah CSS transition justru membuat dua sistem animasi bertabrakan. Untuk keperluan memilih elemen yang akan dianimasikan, lihat panduan cara memilih elemen dengan selector jQuery agar target animasi tepat.

Ringkasan

Fade untuk elemen yang muncul di tempat, slide untuk elemen yang mengubah tinggi, dan animate() ketika kamu butuh menggerakkan lebih dari satu properti sekaligus. Selalu panggil .stop() pada elemen yang dipicu klik berulang, dan pertimbangkan CSS transition bila animasinya cukup sederhana.

Pertanyaan yang Sering Diajukan

Apakah animate() bisa menganimasikan warna latar?

Tidak secara langsung. animate() hanya menangani properti bernilai angka. Untuk warna, kamu perlu plugin tambahan atau memindahkan animasi ke CSS transition.

Kenapa animasi slide saya terlihat melompat?

Biasanya karena elemen yang dianimasikan punya padding atau border yang ikut berubah. Bungkus isi elemen dengan elemen dalam tanpa padding, lalu animasikan elemen luarnya saja.

Apa beda stop(true) dan stop(true, true)?

Argumen pertama mengosongkan antrean animasi. Argumen kedua membuat animasi yang sedang berjalan langsung melompat ke nilai akhirnya, bukan berhenti di tengah jalan.