动态加载数据无限滚动采坑

84 阅读1分钟

需求:小说自动阅读无限滚动,数据需要预加载当前章节预加载下一章数据

实现方案一:requestAnimationFrame + scrollby

代码链接:code.juejin.cn/pen/7447862… 参考链接:developer.mozilla.org/zh-CN/docs/…

requestAnimationFrame 根据屏幕帧率无限执行,scrollby每次执行滚动的px值

问题:

  1. requestAnimationFrame 帧率不稳定,会根据移动设置实际使用情况,如打开app或玩游戏时会造成屏幕帧率降低。实际在无限滚动时会出现速度不稳定,导致抖动;

image.png 2. 丢帧问题:实际项目中出现,高刷屏,每帧时间较短,导致有些执行task任务没有执行完。并且一直调用requestAnimationFrame,高刷屏出现频繁丢帧问题。出现屏幕帧率越高,无限滚动抖动越严重;

注意: requestAnimationFrame回调的执行与task和microtask无关,而是与浏览器是否渲染相关联的。它是在浏览器渲染前,在微任务执行后执行。 参考链接:fe.ecool.fun/articles/te… juejin.cn/post/708498…

实现方案二:css animatoion + IntersectionObserver

animatoion控制连续滚动,IntersectionObserver触发监听元素加载下一章

代码链接:code.juejin.cn/pen/7447864…

参考链接: developer.mozilla.org/en-US/docs/… developer.mozilla.org/en-US/docs/…

问题: 1、IntersectionObserver 会偶现非常快速滑动时,监听的元素进入视窗不生效问题; 2、IntersectionObserver 监听元素进入视窗后来回滑动进入退出视窗,出现监听不生效问题;