我的网站有一个弹出窗口,显示有关在主屏幕中显示的元素的附加信息。我需要同步两个窗口之间的滚动,当用户滚动其中一个窗口时,另一个窗口会自动滚动到同一个ammount中。如何在两个窗口之间同步滚动
我能够做到这一点使用jQuery的滚动事件,并使用scrollTop函数来设置滚动位置。是这样的:
$("#localDiv").scroll(function() {
var scrollPos = $("#localDiv").scrollTop();
$("targetElement").scrollTop(scrollPos);
});
我已经简化了实际的代码,因为我已经做了一些工作,以达到在另一个窗口中的元素,但这不是问题。
问题是,此代码在Chrome和IE中正常工作,但在FireFox中滚动变得非常慢。
我在这里创建了一个示例:http://jsfiddle.net/Lv2dw787/4/。这个问题似乎也与DIV在同一页面中出现。您可以注意到,当滚动同步被禁用时,速度将恢复正常。
有没有人有关于如何解决这个问题的线索在FireFox?戴夫·陈回答后
编辑:
接受的答案解决我的问题,但它有一个陷阱。我第一次尝试这样做:
lock = true;
try {
var scrollPos = $("#contentDivA").scrollTop();
$("#contentDivB").scrollTop(scrollPos);
}
finally
{
lock = false;
}
但$("#contentDivB").scrollTop(scrollPos);
线似乎只有当前函数执行完毕后产生的DIVB滚动事件,所以try..finally的最后部分是之前执行。因此,我不得不这样:
lock = true;
var scrollPos = $("#contentDivA").scrollTop();
$("#contentDivB").scrollTop(scrollPos);
和DIVB滚动事件:
if (lock)
lock = false;
else {
(Do the scroll on DivA)
}
工作正常。你有没有试过第二台电脑,并确认它不是本地安装?你的Firefox只是很慢吗? – Jan
我可以确认它在Mac上的FireFox上运行得更慢 –