Firefox menempatkan overflow di html
level, kecuali jika secara khusus ditata untuk berperilaku berbeda.
Untuk membuatnya berfungsi di Firefox, gunakan
$('body,html').animate( ... );
Contoh kerja
Solusi CSS adalah mengatur gaya berikut:
html { overflow: hidden; height: 100%; }
body { overflow: auto; height: 100%; }
Saya akan berasumsi bahwa solusi JS akan paling tidak invasif.
Memperbarui
Banyak diskusi di bawah ini berfokus pada fakta bahwa menjiwai scrollTop
dua elemen akan menyebabkan panggilan balik dipanggil dua kali. Fitur pendeteksi browser telah disarankan dan kemudian tidak digunakan lagi, dan beberapa bisa dibilang agak dibuat-buat.
Jika panggilan balik idempoten dan tidak memerlukan banyak daya komputasi, memecatnya dua kali mungkin bukan masalah total. Jika beberapa pemanggilan dari callback benar-benar merupakan masalah, dan jika Anda ingin menghindari deteksi fitur, mungkin lebih mudah untuk memastikan bahwa callback hanya dijalankan sekali dari dalam callback:
function runOnce(fn) {
var count = 0;
return function() {
if(++count == 1)
fn.apply(this, arguments);
};
};
$('body, html').animate({ scrollTop: stop }, delay, runOnce(function() {
console.log('scroll complete');
}));