当溢出被“隐藏”时,停止Firefox重置水平滚动位置?

时间:2011-08-30 10:43:41

标签: javascript jquery firefox overflow scrollto

我有一个水平滚动的div,里面有部分。我正在使用Ariel Flesler's scrollTo插件从一个部分滚动到另一个部分。

请参阅:http://jsfiddle.net/carienf/qZeEe/

小提琴在IE 9,Safari 5.1,Opera 11.5和Chrome 14(所有最新版本)中运行良好。我可以点击一个链接滚动到相应的部分,然后在其中滚动或鼠标滚动。

问题: 在Firefox 7(及更早版本)中,当我滚动到第2部分或第3部分然后使用滚动条向下滚动时,我的位置将重置为第一部分。当我调整浏览器窗口大小时也会发生这种情况。如果我使用鼠标滚轮滚动,Firefox表现出来(换句话说,我留在当前部分)。

我的问题几乎完全重复了这个问题:Problem mixing overflow-x, FireFox, and Javascript

只有,接受的答案(允许水平滚动条可见)对我的具体情况不起作用。此外,发布问题的人已经删除了他的例子。我真的需要滚动条保持隐藏状态,我真的不喜欢隐藏在div后面的想法。

有没有办法(除了设置溢出到“自动”)阻止Firefox重置我的滚动位置?或者其他一些隐藏滚动条的方法?

更新:将Firefox更新为8.0(仍为测试版),然后行为与其他浏览器保持一致。

2 个答案:

答案 0 :(得分:0)

我可以看到几个选项。

  1. 剪掉滚动条。进行一些测量,你必须绝对定位。
  2. 在外面添加第二个div进行垂直滚动。这会破坏您目前的代码,但它确实解决了滚动问题。 jsfiddle.net/s2YFM

答案 1 :(得分:0)

我刚遇到了同样的问题。当我的“模态窗口”弹出时,我设置html.noscroll { overflow: hidden },不幸的是导致窗口滚动到顶部。

这是我能做的唯一解决方案:

function RemoveScrollbar(html) {
    var scrollTop = html.scrollTop;
    html.addClass('noscroll');
    html.scrollTop = scrollTop;
}

这是MooTools代码,但转换为jQuery或其他框架非常简单。