如何确定Javascript中意外滚动事件的原因?

如何确定Javascript中意外滚动事件的原因?,javascript,ios,wkwebview,infinite-scroll,Javascript,Ios,Wkwebview,Infinite Scroll,tl;dr:在iOS上的WKWebView中使用Javascript中的滚动逻辑时,我遇到了意外的滚动事件,我想知道是什么导致了这些事件 我正在iOS上实现一个电子书阅读器,使用WKWebView,在垂直滚动和水平(页面)滚动中进行无限滚动。在javascript中,导航到新位置的过程大致如下: 获取目标位置周围的HTML内容并注入DOM 找到目标位置并滚动到视图中 此外,每当发生滚动事件时,我们都会注意到新的最早可见文本,如果我们对加载内容的开头或结尾有一定的容忍度,我们会获取更多内容,并

tl;dr:在iOS上的
WKWebView
中使用Javascript中的滚动逻辑时,我遇到了意外的滚动事件,我想知道是什么导致了这些事件

我正在iOS上实现一个电子书阅读器,使用
WKWebView
,在垂直滚动和水平(页面)滚动中进行无限滚动。在javascript中,导航到新位置的过程大致如下:

  • 获取目标位置周围的HTML内容并注入DOM
  • 找到目标位置并滚动到视图中
此外,每当发生滚动事件时,我们都会注意到新的最早可见文本,如果我们对加载内容的开头或结尾有一定的容忍度,我们会获取更多内容,并在开头或结尾将其注入DOM。在前置的情况下,这意味着测量要注入的内容的大小,然后调整滚动位置以保持相同的内容可见

不过,偶尔我会发现滚动位置意外地下降到0,0。在垂直滚动模式下导航到新位置时,事件顺序如下:

  • 清除页面
  • 在目标位置周围注入HTML内容
  • 计算目标位置的坐标。假设y坐标是3000
  • 滚动至
    03000
    (通过
    窗口。滚动至
  • 在布局传递(
    window.setTimeout
    )之后,检查我们是否接近加载内容的边缘,如果接近,则获取更多内容
  • 一段时间后,我得到了一个DOM scroll事件(通过
    document.addEventListener('scroll',…)
    ),用于滚动到
    0,0
  • 如果在步骤4中设置后立即检查
    window.pageYOffset
    的值,则会得到预期值。但是在步骤5中,我得到的值是
    0,0

    此滚动跳转不是来自对
    窗口的任何调用。滚动
    窗口。滚动到
    。我找不到在第4步和第5步之间发生的任何会导致滚动的事情,比如某种DOM操作

    我的问题是:有没有办法确定是什么导致web视图中的滚动更改