随机背景图像在Firefox中无法正确刷新

时间:2011-05-22 21:15:40

标签: css firefox background-image redraw

据我所知,此问题仅适用于Firefox。 (我在Win7 Ultimate上使用FF 4.0.1。)

我有一个页面,我需要显示一个随机的背景图像。我用一个小的PHP脚本(rotate.php)来做这个伎俩。所以我的css基本上是:

#main {background-image: url(bg/rotate.php);}

(我之所以提到这是因为我的猜测是因为图像 name 不会改变,但是图像的内容确实会让Firefox感到有些困惑。 )

最重要的是,我有一个小动画(用javascript制作),其中一个小点从页面顶部落下。动画元素(包含此点)通过#main元素(及其随机背景图像)。

问题是Firefox在刷新页面时没有正确更新背景图像。

似乎Firefox实际上首先显示来自上一页页面加载的背景图像,并且只有当动画在此图像上运行时,Firefox才真正更新图像,但它只会更新部分由动画元素覆盖。因此结果是两个图像的混合(上一页加载,当前页面加载)。

只有在调整窗口大小时(例如通过打开/关闭Firebug),Firefox才会完全重绘图像(最后全部显示新图像)。

您可以在此处看到问题:http://www.terpsycordes.com/en/home(您可能需要多次重新加载以连续获取两个不同的图像并查看问题,并且您必须等待几秒钟才能将动画设置为开始。)(再一次,这似乎只是Firefox。)

你有没有想过要避免这种难看的效果?是否有任何技巧迫使Firefox重绘图像?

提前致谢。


修改:

感谢DavidJCobb提供的链接,我尝试了各种javascript技巧来强制Firefox重新绘制背景图像。结果仍然不完全令人满意,但它比以前更好。这是我在测试期间发现的(希望这可以帮助某人):

  • 更改元素(#main)不透明度(甚至略微)或赋予其透明轮廓会强制重绘(因此新图像完全显示);
  • 更改元素的类也有效,如果应用的类存在并影响元素的某些属性(例如大纲);
  • 然而,如果在页面加载时立即设置,则无法进行此操作:我必须等待大约100毫秒才能触发此事件以使重绘有效。

所以我在更新之前的短暂时间内仍然会看到上一张图片。如果有人提示如何改进这一点,我很高兴听到它。

1 个答案:

答案 0 :(得分:2)

  

但它只更新动画元素所涵盖的部分

我猜你在Firefox中遇到过某种奇怪的重绘错误。强制Firefox重新绘制布局可能会有所帮助。通过改变DOM来Here's a method for forcing a redraw