javascript - 如何使用 javascript 或 jQuery 预加载具有多个 srcset 的图像?

标签 javascript image caching preload

我正在尝试构建一个脚本,以使用 jQuery 为我正在处理的小型应用程序预加载图像。

我已经阅读了不同的教程,现在我设法让它像这样工作:

var imageList = ['img1.png', 'img2.png', 'img3.png'];
$.each(imageList, function (index, imageName) {
    var $img = $('<img>')[0];
    $img.onload = function () {
        console.log('loaded');
    };
    $img.src = imgPath + imageName;
}

这很好用。我从我准备的数组中加载图像,然后创建所有 img 标签,然后将它们附加到 DOM 中需要的地方。

不过,我现在想知道,如果我有多个 srcset 的图像,我该如何做类似的事情。

假设我为每张图片设置了 3 个尺寸,但它们可能更多,通常我会在 html 中放置类似这样的内容:

<img srcset="large.jpg 1024w,
      medium.jpg 640w,
      small.jpg 320w"
   sizes="(min-width: 36em) 33.3vw, 100vw"
   src="small.jpg">

现在,我该如何应用预加载呢?

1) 我可以在 Javascript 中为每个图像预加载所有尺寸,但这毫无意义,因为拥有多个 srcset 的全部目的是只加载一个 2) 我可以将 img 标签放在 DOM 中,让浏览器选择所需的唯一大小并从 Javascript 加载。

第二个选项的问题是浏览器正在从 DOM 加载图像,那么为什么要用 Javascript 再次加载它们呢?有可能我完全错了,也许我遗漏了什么。正确的做法是什么?

最佳答案

您可以使用与脚本中相同的想法,但要设置 sizessrcset 属性。

const image = new Image()
image.onload = () => console.log('loaded')
image.sizes = '(min-width: 36em) 33.3vw, 100vw' 

// This will trigger the browser to start loading the appropriate picture
image.srcset = `
  large.jpg 1024w,
  medium.jpg 640w,
  small.jpg 320w
`

关于javascript - 如何使用 javascript 或 jQuery 预加载具有多个 srcset 的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35539671/

相关文章:

javascript - 在页面加载时调用函数 angularjs

python - 在 python 中有什么方法可以在 html 中找到图像的大小?

WPF:如何以原始尺寸显示图像?

PHP URL 字符串以避免浏览器缓存

caching - Swift getter 代码重复

javascript - dojo AMD 加载顺序是什么?

javascript - document.activeElement.href 在 chrome 中不起作用

javascript - 使用 JQuery 导航到带有下拉菜单选择的页面

javascript - 为页面上的每个 div 单独运行 javascript 代码

ios - NSUserDefaults 或 NSCache - 存储数据的最佳方式