此时,我找到了两个解决此问题的方法:将所有图像的初始src设为数据库64空白图像
此选项不仅需要现代的浏览器,而且在客户端可能会比较慢,因为浏览器必须对图像数据进行base-64解码才能生成图像。
所有图像的初始src为空白1x1图像的url
如果所有图像插槽的空白图像URL都完全相同,并且具有在HTTP标头“ cache-control”中定义的较长的缓存生存期,则可以这样做。这样做的问题是,随着新图像文件的加载,图像方块将跳到新的大小,这可能会使用户体验变得不那么美妙。
几乎完美的主意是...
页面启动时,显示一个网格,其中包含可容纳每个图像的固定尺寸的框。如果整个网格不适合屏幕,也可以。然后创建在HTML加载后执行的javascript,并在该javascript中创建一个新的图像元素并将其附加到网格的每个单元格,然后将图像源设置为正确的图像文件。这样做直到第一个屏幕填满。然后在javascript中检测滚动,然后在发生滚动时,对新单元格重复上述过程。
现在,如果您想要最好的,而质量不是一个大问题,那么我建议(我也在我的网站上实现)是构造一个网格并将其设置为使得该网格的背景图像是格式化为图像正方形的所有图像的Sprite工作表。由于所有图像都需要一个请求,因此该方法灵活且加载速度快。
如果您想走快速路线,请使用以下HTML模板。仅提出两个请求。HTML代码和一张图片。在此代码中,我假设工作表中的每个图像的宽度均为100像素,高度为200像素,并且每个图像彼此之间完美对齐且没有间隙。
<html>
<head>
<style type="text/css">
#imagegrid {background-color: black; background-image:url('http://example.com/url/to/imagesheet.jpg');}
A {display:block;width:100px;height:200px;margin:10px;float:left;}
#image1{background-position: 0px 0px}
#image2{background-position: 100px 0px}
#image3{background-position: 200px 0px}
...
#imageN{background-position: XXXpx 0px}
</style>
</head>
<body>
<div id="imagegrid">
<a href="image_one.htm" id="image1"></a>
<a href="image_two.htm" id="image2"></a>
<a href="image_three.htm" id="image3"></a>
...
<a href="image_N.htm" id="imageN"></a>
</div>
</body>
</html>
在我的代码中,我添加了3个点。这意味着,只要Sprite工作表仅包含一行图像,就可以通过增加数字并每次将位置增加100来继续添加图像。另外,对于某些浏览器(例如Opera),您可能需要在背景位置值前面添加一个负号,以使其正常工作。