【发布时间】:2014-09-04 05:14:15
【问题描述】:
我正在尝试同步两个可滚动的 DIVS 滚动位置。
遵循的方法:
Method - 1 : on-scroll 事件设置其他 DIV 的 scrollTop。 问题:滚动事件在最后执行,UI 在 iOS safari 中反应迟缓。
Method - 2 :使用 setInterval 同步两个滚动位置。 问题:iOS 在滚动期间不执行计时器功能, 所以滚动位置在最后同步。同样,这更加缓慢。 尝试过,许多博客中提到的计时器修复,但仍然没有恩典。
Method -3 :尝试自定义滚动条,因此 iScroll 并尝试在 scroll 事件上同步两者,
问题:这似乎更好,但在 iOS 中仍然很慢!!!
Method -4 :尝试自定义滚动条,因此 iScroll 并尝试在 scroll 事件上同步两者,
问题:使用 iScroll 但使用计时器而不是取决于 onScroll 事件,
但是在touchmove期间,iOS忙于提供动画
而是执行所需的计时器直到 touchend。
下面的代码引用了这个方法。它也很迟钝。
var active = .., other = ...
// active : active Scrolling element
// other : Element to be in sync with active
window.setInterval(function () {
var y;
if (active) {
y = active.y;
} else {
return;
}
var percentage = -y / (active.scrollerHeight - active.wrapperHeight);
var oscrollTop = percentage * (other.scrollerHeight - other.wrapperHeight);
if (-other.maxScrollY >= toInt(oscrollTop)) {
other.scrollTo(0, -toInt(oscrollTop));
}
}, 20);
如何使两个可滚动 DIVS 的滚动位置同步更顺畅。请给我一些建议,这让我很恼火。
【问题讨论】:
-
它们必须是 2 个 DIV 吗?可以分享一点 HTML 吗?
-
@JNF 它们不共享相同的 HTMl,因此可能有 0-100px 的高度差异。这就是我计算滚动百分比和相应滚动的原因。
-
你能做一个简单的演示给我们编辑吗?
-
@ZachSaucier 更新了最后两种方法的小提琴,也将发布给其他人。
-
所以方法 3 只是 iOS 问题?你需要香草还是 jQuery?
标签: javascript iscroll