有没有办法将图像异步加载到用户的缓存中?

DrX*_*eng 4 html javascript image

我有一个物品清单。它们中的每一个都是一个带有名称的方块,当用户将鼠标悬停在方块上时,会显示一个图像,这是由 jQuery 完成的。代码是这样的:

$('.square').hover(function() {
  var link = $(this).attr('title');
  $(this).addClass('squarehover')
         .css({backgroundImage: 'url(images/' + escape(link) + '.jpg)'}); 
}, function() {
  $(this).removeClass('squarehover')
         .attr('style', '');   
});

.squarehover {
  font-size: 0px;
  background-repeat: no-repeat;
  background-size: 100%;
  -moz-background-size: 100%;
  background-position: center center;
  position: absolute;
  z-index: 10;
  cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)

如果没有事先加载图片,悬停时会有一点延迟。另外,我不想在加载完所有图像后显示页面。

由于图像未明确显示在页面中,是否可以先加载页面然后开始将图像加载到用户的缓存中(我的想法是用户不会立即将鼠标移动到这些方块上)?如果<img>HTML 中没有标签怎么办?

BTW,既然background-sizeIE8不支持,那怎么处理呢?

jfr*_*d00 5

您可以像这样预加载图像:

function preloadImages(srcs) {
    if (!preloadImages.cache) {
        preloadImages.cache = [];
    }
    var img;
    for (var i = 0; i < srcs.length; i++) {
        img = new Image();
        img.src = srcs[i];
        preloadImages.cache.push(img);
    }
}

// then to call it, you would use this
var imageSrcs = ["src1", "src2", "src3", "src4"];

preloadImages(imageSrcs);
Run Code Online (Sandbox Code Playgroud)

只需填写imageSrcs数组中的 URL并在您的页面首次运行时运行它。您越早运行它,您的图像就越早可用。

仅供参考,这里有一个相关的答案:支持事件的图像预加载器 javascript