javascript - 无法从缓存中加载图像

标签 javascript jquery html

尝试用缩略图建立画廊。 您单击缩略图,主图像容器将显示它。

似乎当我更改容器的 URL 时,它总是会从 Internet 重新加载图像而不缓存它。

我尝试了两种方法都有相同的结果。

首先:

    //save to cache right when script is loaded
    var cacheImages =[];
    preloadimgs();
    function preloadimgs(){
        for(var k=0;k<5;k++) {
          var img = new Image();
          img.src = currentStore.product.media.photos[k];
          cacheImages.push(img);
        }
    }

//load
    function thumb(arg){


   var prvimgShow = cacheImages[arg].src;
   var finalurl="url("+prvimgShow+")";

   $("#preview").stop().animate({opacity: 0.7},100,function(){
       $(this).css({'background-image': finalurl})
                  .animate({opacity: 1},{duration:200});
    });

}

每当我点击拇指时,这将导致该照片的重新加载非常缓慢。

第二(我已经在这里问过): 在这里,我从缩略图背景中获取照片作为来源:

//get a thumb's background photo
var prvimgShow = document.getElementById("thumb0").style.backgroundImage;

//show it
$('#thumb0').on('click', () => {
  $("#preview").stop().animate({
    opacity: 0.7
  }, 100, function() {
    $(this).css({
        'background-image': prvimgShow
      })
      .animate({
        opacity: 1
      }, {
        duration: 200
      });
  });
})

两者都会导致重新加载图像,这需要 2 秒。 图片非常小 (300k),对于画廊来说这是一个糟糕的用户体验。

最佳答案

虽然我不知道浏览器的内部结构以及为什么它不缓存,但我能想到的解决方案之一是:

不要使用直接 url,而是下载文件并将其制作成 blob url。将 blob url 的引用保留在 cacheImages 中,就像您正在做的那样。然后在其他地方使用博客网址,资源将不会再次下载。

可以引用How to get a File() or Blob() from an URL in javascript?了解如何获取图像并将其转换为 blob url。

关于javascript - 无法从缓存中加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57473840/

相关文章:

php - 我希望一旦使用 php 和 mysql 提交表单,jquery 弹出窗口就应该出现,输出已经出现在 jquery 弹出窗口中

javascript - 在悬停父元素时使用 (this) 选择类的特定实例

javascript - setInterval不是每秒刷新数据

javascript - 如何将外部 JSON 文件读入我的 html/javascript 测验

javascript - 将 JSON 对象传递给 PHP 脚本

javascript - 如何在Div加载页面初始化DataTable?

javascript - HTML Canvas 单元测试

JavaScript - 仅使用 vanilla js 进行日期屏蔽

javascript - jquery无法将li添加到ul

jquery - 更改悬停时的文本颜色 - Jquery