这可能是我多年来网站编码中遇到的最奇怪的事情,所以我想我会由一些比我聪明的人来运行它,试图解释为什么会发生这种情况。如果没有解释,我可能会将其作为错误报告提交。我花了很长时间才真正找出问题的原因。
以下行为我只能在 Firefox(当前版本 15,可能还有其他版本)中产生。Internet Explorer、Chrome 或 Safari 中不存在问题。很难解释,我只是在这里创建了一个演示:http: //sandbox.uatu.net/dom-changes.php
一般的想法是,在一组非常特定的条件下,当滚动可滚动框时,Firefox 会阻止 DOM 更改,无论滚动是由用户完成还是由脚本自动完成。这是设置:
<div id="superContainer">
<div id="subContainer">
<div id="mainPage">
scrollable box in here
</div>
</div>
</div>
重要属性:
superContainer 具有高度和宽度尺寸
subContainer 有一个高度维度
subContainer 的不透明度设置小于 1
subContainer 有背景颜色
mainPage 的 position 属性为 absolute
无论如何,如果您访问该演示页面,您会看到尝试滚动框会冻结所有页面动画。实际上,您可以在 Firebug 中观察其中一些元素,并看到属性正在实时更改,但 Firefox 只是拒绝重新绘制页面上的任何内容。
如果您将这些属性中的任何一个切换到关闭位置,一切都很好。正是这种特殊的设置组合似乎产生了问题。
有人对为什么有任何想法吗?我无法告诉你这让我有多疯狂——我整个周末基本上都在排除故障,在我发现它的网站上完全重构了我的代码。