我有一个无限长的网页(当页面与底部相距x时,它会加载新的块)。我想通过javascript实现这个网页的平滑自动滚动,以最小化抖动/跳跃。
我尝试了两种主要方法: setInterval()
及 requestAnimationFrame()
. 目前为止 setInterval()
虽然我的速度有限(至少在chrome上是这样),但似乎能提供最好的视觉性能,因为低于50毫秒的间隔看起来是50秒左右(并且每一帧跳跃超过几个像素会产生视觉伪影)。 requestAnimationFrame()
大多数情况下工作正常,但偶尔会有跳跃和抖动。
下面是我尝试过的两种方法的代码。还有其他方法(或调整)我应该尝试吗?实现这一目标的最佳方式是什么? setInterval() method
:
let html;
window.onload = function() {
html = document.documentElement;
setInterval(function() {
let scrollTop = Math.round(html.scrollTop);
let increment = 2;
html.scrollTop += increment;
}, 16);
};
``` `requestAnimationFrame()` 方法(基于chrome开发者的这篇文章):
function animationInterval(ms, signal, callback) {
const start = document.timeline.currentTime;
function frame(time) {
if (signal.aborted) return;
callback(time);
scheduleFrame(time);
}
function scheduleFrame(time) {
const elapsed = time - start;
const roundedElapsed = Math.round(elapsed / ms) * ms;
const targetNext = start + roundedElapsed + ms;
const delay = targetNext - performance.now();
setTimeout(() => requestAnimationFrame(frame), delay);
}
scheduleFrame(start);
}
const controller = new AbortController();
animationInterval(20, controller.signal, time => {
let scrollTop = html.scrollTop;
let increment = 2;
html.scrollTop += increment;
});
暂无答案!
目前还没有任何答案,快来回答吧!