Firefox platziert den Überlauf auf der html
Ebene, sofern er nicht speziell für ein anderes Verhalten ausgelegt ist.
Verwenden Sie, um es in Firefox zum Laufen zu bringen
$('body,html').animate( ... );
Arbeitsbeispiel
Die CSS-Lösung besteht darin, die folgenden Stile festzulegen:
html { overflow: hidden; height: 100%; }
body { overflow: auto; height: 100%; }
Ich würde annehmen, dass die JS-Lösung am wenigsten invasiv wäre.
Aktualisieren
Ein Großteil der folgenden Diskussion konzentriert sich auf die Tatsache, dass das Animieren scrollTop
von zwei Elementen dazu führen würde, dass der Rückruf zweimal aufgerufen wird. Browser-Erkennungsfunktionen wurden vorgeschlagen und anschließend veraltet, und einige sind wohl ziemlich weit hergeholt.
Wenn der Rückruf idempotent ist und nicht viel Rechenleistung erfordert, ist das zweimalige Auslösen möglicherweise kein Problem. Wenn mehrere Aufrufe des Rückrufs wirklich ein Problem darstellen und Sie die Funktionserkennung vermeiden möchten, ist es möglicherweise einfacher zu erzwingen, dass der Rückruf nur einmal innerhalb des Rückrufs ausgeführt wird:
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');
}));