我在Cordova应用程序中使用 JS 构建了一个虚拟滚动列表,我想在每次滚动后保存位于视口顶部的确切节点。虚拟滚动的复杂之处在于使用scrollTop
不可靠,因为节点正在从列表的顶部和底部删除,这会改变滚动位置。在 Javascript 中是否有可靠且高效的方法来执行此操作?用例是这样的:当用户关闭并重新打开应用程序时,我想将用户放置在相同的滚动位置,并确保该位置的元素是用户在关闭应用程序之前最后一次看到的元素。我正在考虑这个策略:
- 获取每个滚动列表顶部的元素,如下所示:
scrollableList.addEventListener('scroll', e => {
const topMostElement = document.elementFromPoint(150, 150); // <-- 150px due to some positioning in the app
});
- 保存该元素的标识符,以便我可以在应用程序初始化时预加载列表,以便该元素始终呈现在该位置
我想知道是否有其他策略可以在基于 JS 的虚拟滚动器中处理此问题。我已经看过用 Javascript 构建虚拟滚动条的教程,但还没有看到提供有关如何解决这个问题的实现细节的教程。提前致谢!
更新 1
虚拟滚动列表有很多节点,可以有100多个,每个都有自己的子节点。这会导致其自身的一系列问题,因此重要的是(在可能的情况下)该解决方案不需要遍历节点列表或在每个节点上执行昂贵的操作,以避免阻塞主线程。