2011-05-22 119 views
1

根据我的情况,此问题特定于Firefox。 (我在Win7旗舰版上使用FF 4.0.1。)在Firefox中无法正确刷新的随机背景图片

我有一个页面,我需要显示一个随机背景图像。我使用一个小型的PHP脚本(rotate.php)来完成这个任务。所以,我的CSS基本上是全文:

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

(我提到这一点,因为我的猜测是,火狐的事实,图像不确实的变化变得有些困惑,虽然图像的内容做)

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

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

看来火狐实际上首先显示来自以前页面加载背景图像,只有当动画运行在该图片火狐实际更新图像,但只更新由动画元素覆盖的部分。所以结果是两个图像的组合(上一页加载,当前页面加载)。

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

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

你有什么想法来避免这种丑陋的影响?有什么窍门强迫Firefox重绘图像?

在此先感谢。


编辑:

多亏了DavidJCobb提供的链接,我尝试了各种花样的javascript迫使火狐重新绘制背景图片。结果仍然不尽如人意,但总比以前好。这是我发现我的测试过程中(希望这可以帮助别人):

  • 改变元素(#main)不透明度(甚至略)或给它一个透明的轮廓并强制重绘(等新形象完全显示);
  • 更改元素的类别也可以,if应用的类别存在并影响元素的某些属性(例如outline);
  • 但是,如果在页面加载时立即设置,这项工作都不会发生:为了使重新绘制有效,我必须等待大约100毫秒才能开始此事件。

因此,我仍然可以在更新之前的短暂时间内看到上一张图像。如果有人对如何改善这一点有所建议,我很乐意听到它。

+1

摆脱它最快的非特定方式可能是在URL中添加一个随机的GET参数:'url(bg/rotate.php?12493402392049430)'但它仍然会很有趣,知道为什么会发生这种情况 – 2011-05-22 21:35:13

+0

@Pekka:这是一个很好的观点,但在这种情况下,url是在一个CSS文件中,所以在这里有动态的内容有点棘手。这意味着阻止浏览器缓存样式表。 – s427 2011-05-23 17:59:03

回答

2

但只更新由动画元素

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

+1

是的,这似乎是,感谢您的链接!给出的代码是Prototype(我使用jQuery),但我尝试了在评论中找到的各种建议。结果仍然不完美,但比以前更好。我用更多信息更新我的问题。 – s427 2011-05-23 18:28:39