Firefox umieszcza przepełnienie na html
poziomie, chyba że ma specjalny styl, aby zachowywać się inaczej.
Aby to działało w przeglądarce Firefox, użyj
$('body,html').animate( ... );
Przykład roboczy
Rozwiązaniem CSS byłoby ustawienie następujących stylów:
html { overflow: hidden; height: 100%; }
body { overflow: auto; height: 100%; }
Przypuszczam, że rozwiązanie JS będzie najmniej inwazyjne.
Aktualizacja
Wiele poniższych dyskusji skupia się na fakcie, że animowanie scrollTop
dwóch elementów spowodowałoby dwukrotne wywołanie wywołania zwrotnego. Zaproponowano, a następnie wycofano funkcje wykrywania przeglądarki, a niektóre z nich są prawdopodobnie dość naciągane.
Jeśli wywołanie zwrotne jest idempotentne i nie wymaga dużej mocy obliczeniowej, dwukrotne wystrzelenie go może całkowicie nie stanowić problemu. Jeśli wielokrotne wywołania wywołania zwrotnego są naprawdę problemem i jeśli chcesz uniknąć wykrywania funkcji, prostsze może być wymuszenie, aby wywołanie zwrotne było uruchamiane tylko raz z poziomu wywołania zwrotnego:
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');
}));