如何在没有Javascript的情况下预加载图像?

Was*_*ikh 27 html javascript image-preloader

在我的一个布局中,有一些大图像(来自XML)显示当我将鼠标悬停在某些链接上时,但是当页面加载时以及何时翻转它需要时间来加载该图像.

注意:有修复5张图片(非动态)

我不想使用JavaScript预加载图像任何解决方案?

我不使用悬停菜单或类似的东西,但这个图像是产品图像,链接是文本链接得到了我的观点?

Lui*_*lin 43

HTML5有一种新方法可以做到这一点link prefetching.

<link rel="prefetch" href="http://davidwalsh.name/wp-content/themes/walshbook3/images/sprite.png" />
Run Code Online (Sandbox Code Playgroud)

只需link在HTML中添加许多标签,就可以了.当然,旧浏览器不会以这种方式加载内容.

UPDATE

如果您的服务器使用HTTP2,您还可以Link在响应中添加标头,并使用HTTP2 Server Push.

Link: <http://davidwalsh.name/wp-content/themes/walshbook3/images/sprite.png>; rel=preload; as=image;
Run Code Online (Sandbox Code Playgroud)

  • img 仍然会在之后(第二次)由 css 重新加载 (4认同)

Thi*_*ker 35

无需预加载图像.我无法理解为什么99%的人认为,悬停效果必须使用2张图像.没有这样的需求,使用2个图像使它看起来很糟糕.我知道唯一的好解决方案是使用CSS作为A元素(或简单的JS用于所有其他按钮).按钮我们徘徊时将背景位置设置为某个偏移量.

a { display:block; width:160px; height:26px; background:url(b_tagsdesc.png); }
a:hover { background-position:0 26px }
Run Code Online (Sandbox Code Playgroud)

这就是全部,您可以在下面看到使用的图像:

alt text http://www.margonem.pl/img/b_tagsdesc.png

编辑:您也可以使用其他方式.您可以隐藏图像,而不是切换图像.因此起点将是"background-position:0 -100px"并且悬停为"0 0".

这种技术称为CSS精灵 - 这里有很好的描述:http://css-tricks.com/css-sprites/

  • 精灵是伟大的,但*有*你需要预加载图像的情况. (35认同)
  • 预加载对于动画也很有用.像ajax加载图像. (4认同)
  • "没有必要预先加载图像." 这只是垃圾.如果您计算用户观看图片的时间长短怎么办?或者您正在玩游戏,并且您希望在渲染场景之前加载所有资源? (4认同)

Khu*_*ziz 32

来自http://snipplr.com/view/2122/css-image-preloader

一种低技术但有用的技术,仅使用CSS.将css放入样式表后,将其插入页面的body标签下方:每当在整个页面中引用图像时,它们现在将从缓存中加载.

#preloadedImages
{
    width: 0px;
    height: 0px;
    display: inline;
    background-image: url(path/to/image1.png);
    background-image: url(path/to/image2.png);
    background-image: url(path/to/image3.png);
    background-image: url(path/to/image4.png);
    background-image: url();

}
Run Code Online (Sandbox Code Playgroud)

  • 这绝对不行.只解析最后一个空的url(). (17认同)

And*_*ges 12

我还没有看到这里提到的一种技术,如果您不需要担心IE6和7,它的工作原理很好,就是使用:after伪选择器将图像添加content到页面上的元素中.以下代码摘自本文:

body:after {
    content: url(img01.jpg) url(img02.jpg) url(img03.jpg);
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

与使用JavaScript预加载图像相比,我可以看到的唯一缺点是没有简单的方法从内存中释放它们.

  • 虽然这_大部分_有效,但某些浏览器(例如 Opera)不会下载用于 display:none 元素的图像。http://www.quirksmode.org/css/displayimg.html (2认同)

Mat*_*yra 10

您可以使用隐藏的div来放入图像.就像这样

<html>
<body>
<div style="width:1px; height:1px; visibility:hidden; overflow:hidden">
    <img src="img1.jpg" /><img src="img2.jpg" />
</div>
<div>Some html</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这仅适用于图像,即.如果你试图对.swf文件做同样的事情会有问题.如果不可见,Firefox不会运行.swf文件.

  • 您是否也不需要显示:无,因为可见性仍会占用空间?但我也相信有些浏览器在显示之前不会加载隐藏的图像. (2认同)

小智 6

<link rel="preload" as="image" href="..." />
Run Code Online (Sandbox Code Playgroud)

当我们想要为 CSS 提前加载图像时,这对我来说效果最好(而 rel="prefetch" 会导致 CSS 重复加载)