需求:小说自动阅读无限滚动,数据需要预加载当前章节预加载下一章数据
实现方案一:requestAnimationFrame + scrollby
代码链接:code.juejin.cn/pen/7447862… 参考链接:developer.mozilla.org/zh-CN/docs/…
requestAnimationFrame 根据屏幕帧率无限执行,scrollby每次执行滚动的px值
问题:
- requestAnimationFrame 帧率不稳定,会根据移动设置实际使用情况,如打开app或玩游戏时会造成屏幕帧率降低。实际在无限滚动时会出现速度不稳定,导致抖动;
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 监听元素进入视窗后来回滑动进入退出视窗,出现监听不生效问题;