【发布时间】:2010-04-02 19:15:34
【问题描述】:
我整理了一个快速的小型微型网站,您可以在 http://monterraauction.com 看到它。如果您没有超快速连接(并且没有缓存),最后要加载的项目是用于 CSS 图像文本替换的背景图像(主要是顶部的 h1#head,带有7kb 背景图片)。没有什么令人沮丧的,但它看起来有点尴尬。我问这个问题是出于好奇;)另外,请注意这发生在 Firefox 中,而不是 Chrome。
现在,在h1#head 下方,div#photo 中有一个 jquery.cycle.lite 驱动的幻灯片。在 HTML 标记中,每张幻灯片共有 13 个重图像文件。如果我删除除了第一张幻灯片之外的所有内容,那么问题就消失了!所以 CSS 背景图像是在……那些 HTML 图像完成之后加载的?但令人困惑的是:
我在 YSlow 中查看了它……CSS 背景图像的响应时间比 #photo 中的所有幻灯片都要短得多。事实上,在所有 JS 文件完成加载之后。那么他们为什么不先出现呢?
我试过$('#photo img:last-child').load(function() { alert('Locked and Loaded!')});,但背景图像会在警报出现之前弹出一段时间,所以我假设它不会等到最后一张幻灯片加载完毕(诚然,我有点 JS 菜鸟,所以也许我只是做了一个错误的假设)。
我还尝试注释掉所有 jquery.cycle.lite 的东西,这样我就知道我没有任何 JS 操作 #photo 中的 DOM 元素,但这不是问题。我尝试将所有 JS 放在文档底部,就在 </body> 之前,但这不起作用。最后,我尝试关闭 javascript,当然 css 背景图像在 #photo 中的图像之前加载,所以它绝对是 JS 的东西(amirite?)
我想这里明显的解决方案是将幻灯片标记为 LINKS 而不是 IMG,并在 DOM 准备好后让 Javascript 插入这 12 个额外的幻灯片图像——没有 javascript 的用户无论如何都不需要下载额外的图像.但是,我又很好奇:
为什么从#photo 中删除多余的 HTML 图像可以解决问题?为什么在加载 HTML 图像之后显示 CSS 背景图像,即使 YSlow 说首先加载 css 背景图像?看看它是如何在 FF 而不是 Chrome 中发生的,这仅仅是浏览器的问题吗?
感谢你们能给我的任何见解!
【问题讨论】:
标签: javascript html css