【问题标题】:random background-image not refreshing correctly in Firefox随机背景图像在 Firefox 中无法正确刷新
【发布时间】:2011-05-24 02:42:31
【问题描述】:

据我所知,这个问题是 Firefox 特有的。 (我在 Win7 Ultimate 上使用 FF 4.0.1。)

我有一个页面需要显示随机背景图像。我使用一个小的 php 脚本 (rotate.php) 来解决这个问题。所以我的 css 基本上是这样写的:

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

(我之所以提到这一点,是因为我的猜测是 Firefox 对图像 name 不会改变这一事实感到有些困惑,尽管图像的 content 会改变。 )

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

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

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

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

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

你有什么办法可以避免这种丑陋的影响吗?有什么技巧可以强制 Firefox 重绘图像吗?

提前致谢。


编辑:

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

  • 更改元素 (#main) 的不透明度(即使是轻微的)或给它一个透明的轮廓确实会强制重绘(因此新图像会完全显示);
  • 更改元素的类也可以,如果应用的类存在并影响元素的某些属性(例如轮廓);
  • 但是,如果在页面加载时立即设置,这些都不起作用:我必须等待大约 100 毫秒才能触发此事件才能使重绘生效。

所以在更新之前的一小段时间里,我仍然可以看到之前的图像。如果有人对如何改进这一点有任何建议,我会很高兴听到它。

【问题讨论】:

  • 摆脱它的最快的非特定方法可能是在 URL 中添加一个随机 GET 参数:url(bg/rotate.php?12493402392049430),但知道为什么会发生这种情况仍然很有趣
  • @Pekka:这是一个很好的观点,但在这种情况下,url 位于 CSS 文件中,因此在其中添加任何动态内容有点棘手。这意味着阻止浏览器缓存样式表。

标签: css firefox background-image redraw


【解决方案1】:

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

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

【讨论】:

  • 是的,好像是这样,谢谢你的链接!给出的代码是针对原型的(我使用的是 jQuery),但我尝试了在 cmets 中找到的各种建议。结果仍然不完美,但比以前更好。我正在用更多信息更新我的问题。
猜你喜欢
  • 2023-04-02
  • 2013-08-19
  • 1970-01-01
  • 2021-01-05
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
相关资源
最近更新 更多