Firefox วางโอเวอร์โฟลว์ไว้ที่html
ระดับเว้นแต่จะมีสไตล์เฉพาะเพื่อทำงานแตกต่างกัน
หากต้องการให้มันทำงานใน Firefox ให้ใช้
$('body,html').animate( ... );
ตัวอย่างการทำงาน
โซลูชัน CSS จะตั้งค่าลักษณะต่อไปนี้:
html { overflow: hidden; height: 100%; }
body { overflow: auto; height: 100%; }
ฉันจะสมมติว่าโซลูชัน JS จะรุกรานน้อยที่สุด
ปรับปรุง
การสนทนาจำนวนมากด้านล่างมุ่งเน้นไปที่ข้อเท็จจริงที่ว่าการสร้างscrollTop
องค์ประกอบสองอย่างนั้นจะทำให้การเรียกกลับถูกเรียกสองครั้ง แนะนำคุณสมบัติการตรวจจับเบราว์เซอร์และเลิกใช้แล้วในภายหลังและบางคุณสมบัติสามารถดึงข้อมูลได้ไกล
หากการเรียกกลับเป็น idempotent และไม่ต้องการพลังการประมวลผลมากการยิงมันสองครั้งอาจไม่ใช่ปัญหาที่สมบูรณ์ หากการเรียกกลับหลายครั้งของการติดต่อกลับเป็นปัญหาอย่างแท้จริงและหากคุณต้องการหลีกเลี่ยงการตรวจจับคุณสมบัติอาจเป็นเรื่องตรงไปตรงมามากขึ้นในการบังคับให้การโทรกลับทำงานเพียงครั้งเดียวจากภายในการโทรกลับ:
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');
}));