猿问

同步(非被动)滚动事件

浏览器使scroll事件异步(即{passive: true})一段时间了。对于我的用例,同步提供了更好的用户体验。

有什么方法可以重新获得同步滚动事件,这样我就可以在(scrollLeft, scrollTop, clientWidth, clientHeight)矩形发生变化但在滚动呈现之前进行 DOM 操作?

作为一种奇怪的解决方法,在 Firefox 中打开和关闭 Dev Tools 会使事件同步,这就是我注意到同步提供了更好的用户体验的方式。同时设置apz.disable_for_scroll_linked_effects为 true 使事件同步。同样在 Safari(桌面)中,它们似乎总是同步的。

我尝试过的事情:

  • div.addEventListener('scroll', update, {passive: false})passive: false被忽略了。

  • Object.defineProperty(Object.getPrototypeOf(div), 'scrollTop', {get: ..., set: ...})但是没有调用二传手。

  • div.addEventListener('wheel', update, {passive: false})但我不确定是否可以映射 from deltaY-> updated scrollTop,而且它不解决通过滚动条滚动的问题。


宝慕林4294392
浏览 85回答 1
1回答

茅侃侃

我不相信这是可能的,你将不得不进入造假的境界。这里有一篇有趣的文章,讲述了它是如何(或曾经是?)在代码镜像中完成的基本思想是使滚动条在正确高度的某些元素上呈现,并响应滚动条上的事件以更新用户实际看到的内容。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答