这是真正的 JQuery UI 天才:我们有一个非常长的表单,其中包含按需加载的部分(例如,当单击索引/导航时,或者当我们滚动到当前部分的边缘附近时)。
当我在当前查看的部分下方加载部分时,这不会影响当前的滚动(即 scrollTop)位置,但是当我在当前查看的部分上方插入新的部分时,它当然会向下推动查看的内容。
我们需要保持 scrollTop 相对于当前部分的位置。在进行调整时,我们还需要避免显示跳动/故障。
我们正在考虑的选项:
- 加载内容并通过加载项的高度调整 scrollTop 位置(这可能会出现严重故障,因为 DOM 更改可能比 scrollTop 调整慢得多)。
- 在屏幕外加载新部分,测量高度。然后插入该部分并按该数量调整滚动顶部(由于 DOM 更新,可能仍然会出现故障)。
- 将要加载的部分设置为较大的固定高度(例如 100/1000 像素)并调整 scrollTop 以匹配当前视图不会移动。将内容加载到该部分,然后测量实际的新内容高度并移除固定高度,同时调整 scrollTop 以匹配实际高度。
- 不要使用传统的滚动,而是编写一个自定义的滚动条,保持它自己的相对偏移量并将现有的部分分开以适应新的部分。然后问题变成了编写自定义滚动条替换(对于我们正在使用的 nicescroll 之类的东西)。
- 暂时将当前查看部分的位置更改为绝对位置(根据屏幕偏移计算的位置)以将其从流中取出。更新其后面的父滚动窗口内容,然后在重新计算新的 scrollTop 后再次使查看的部分相对。
- 还有什么我们没有想到的?
我想从实际上必须解决这个问题的任何人那里得到一些建议。屏幕不出现故障很重要,因此应避免将 scrollTop 同步到缓慢的 DOM 更新。
对提议的解决方案有什么建议或意见?是否已经有滚动替换可以做到这一点?
如果您无法解决它,但认为它值得解决,请考虑投票,以便我可以对其进行大笔赏金!:)