如何在无限长的网页上实现平滑的无限自动滚动?

gxwragnw  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(310)

我有一个无限长的网页(当页面与底部相距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;
});

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题