Javascript 同步(非被动)滚动事件

Javascript 同步(非被动)滚动事件,javascript,html,dom,dom-events,Javascript,Html,Dom,Dom Events,不久前,浏览器使滚动事件异步(即{passive:true})。对于我的用例,synchronous提供了更好的用户体验 恢复同步滚动事件的方法有哪些,以便我可以在(scrollLeft、scrollTop、clientWidth、clientHeight)矩形更改但在滚动渲染之前进行DOM操作 作为一种奇怪的解决方法,在Firefox中打开和关闭开发工具可以使事件同步,这就是我注意到同步提供了更好的用户体验的原因。另外,将apz.disable_for_scroll_linked_effect

不久前,浏览器使
滚动
事件异步(即
{passive:true}
)。对于我的用例,synchronous提供了更好的用户体验

恢复同步滚动事件的方法有哪些,以便我可以在
(scrollLeft、scrollTop、clientWidth、clientHeight)
矩形更改但在滚动渲染之前进行DOM操作

作为一种奇怪的解决方法,在Firefox中打开和关闭开发工具可以使事件同步,这就是我注意到同步提供了更好的用户体验的原因。另外,将
apz.disable_for_scroll_linked_effects
设置为true会使事件同步。在Safari(桌面)中,它们似乎总是同步的

我尝试过的事情:

  • div.addEventListener('scroll',update,{passive:false})
    但是
    passive:false
    被忽略
  • Object.defineProperty(Object.getPrototypeOf(div),'scrollTop',{get:…,set:…})
    但未调用setter
  • div.addEventListener('wheel',update,{passive:false})
    但我不确定是否可以从
    deltaY
    ->updated
    scrollTop
    映射,而且它不解决通过滚动条进行滚动的问题

    • 我认为这是不可能的,你必须进入造假的领域。有一篇有趣的文章讲述了它是如何(或曾经是如何?)在代码镜像中完成的


      其基本思想是使滚动条呈现在某个具有正确高度的元素上,并对该元素上的滚动事件作出响应,以更新用户实际看到的内容。

      感谢有趣的链接!我想你是对的。有趣的是,我偶然发现了一个黑客程序,它可以通过同步滚动事件来修复Firefox开发工具中codemirror的行为: