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

问题描述:

我有一个水平滚动div部分里面。我正在使用Ariel Flesler's scrollTo插件从一个部分滚动到另一个部分。当溢出被“隐藏”时停止Firefox重置水平滚动位置?

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

小提琴完美的作品在IE 9,Safari浏览器5.1,歌剧11.5和Chrome 14(所有的最新版本)。我可以点击一个链接滚动到相应的部分并滚动或滚动鼠标滚轮。

问题: 在Firefox 7(或更早),当我已经滚动到第2或第3节,然后使用滚动条,我的位置复位到所述第一部分向下滚动。调整浏览器窗口大小时也会发生这种情况。如果我使用鼠标滚轮滚动,Firefox的行为(换句话说,我留在当前部分)。

我的问题是相当多的这个问题的确切重复:Problem mixing overflow-x, FireFox, and Javascript

只,公认的答案(这是允许的水平滚动条是可见的),我的具体情况下不能正常工作。此外,发布该问题的人已经删除了他的例子。我真的需要该滚动条保持隐藏状态,我真的不喜欢将它隐藏在div后面的想法。

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

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

+0

我在Chrome 14中查看了您的示例,并且位置也滚动回顶端(如FF)。 –

+1

我可以看到几个选项。 1.剪下滚动条。采取一些措施,你必须绝对定位。 2.在垂直滚动之外添加第二个div。这违反了目前的代码,但它确实解决了滚动问题。 http://jsfiddle.net/s2YFM/ – Hemlock

+0

@vantrung -cuncon。我不确定你是什么意思。你说:“...在Chrome 14中,位置滚动回顶端......”。你是指垂直滚动吗? Chrome 14何时滚动到“顶部”?我已经在Chrome 14中测试了小提琴,它的行为正确。我的问题是当我处于第2节或第3节时,我的* horizo​​ntal *位置重置为第一部分,然后在FF中使用滚动条。在Chrome 14中,我的水平位置仅在单击部分链接之一时发生变化,这是所需的行为。 – cfouche

我可以看到几个选项。

  1. 剪掉滚动条。采取一些措施,你必须绝对定位。
  2. 在垂直滚动之外添加第二个div。这违反了目前的代码,但它确实解决了滚动问题。 jsfiddle.net/s2YFM

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

这里是唯一的解决办法,我可以做的工作:

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

这是MooTools的代码,但超级简单转换为jQuery的或其他框架。