有没有一种方法(JavaScript或jQuery)顺序加载图像(防止并行下载)

CodeVirtuoso

我的页面包含许多大图像:

<div id="gallery">
  <img src="1.png" alt="" />
  <img src="2.png" alt="" />
  ...
</div>

由于图像的大小,并行下载会导致太长的延迟,然后才显示任何内容。

问题:如何顺序加载图像,以便2.png1.png在完全加载并显示后才开始加载

  • 我不想延迟加载(除非您知道一个插件,无论当前视口如何,该插件始终严格按照相同的顺序加载图像)

  • 解决方案:在我最新的Chrome,Firefox,IE中,依次加载图像对我不起作用。它将立即加载所有图像,然后显示它们

  • 这个答案中建议的插件https://stackoverflow.com/a/25774333/525445可以正常使用,但是它一次发出2个,3个或更多请求,因此不执行应有的功能

  • 然后是这个插件,在某些答案中也提出了该插件:http : //imagesloaded.desandro.com/但这是出于其他目的-让您知道何时加载所有图像,效果很好。所以我试着像这样使用它:

    var $ gallery = $(“#gallery”);
    $ gallery.imagesLoaded(function(){$ gallery.append(''); console.log(“已加载图片”);}); $ gallery.append('');

这里的想法是-在imagesLoaded事件上一个接一个地动态添加图像。但是,它仅针对第一个图像触发(尽管它也是动态添加的),而对于第二个图像则不会触发。因此,上面的代码导致两个图像都显示,但是只有1个console.log()通知

任何建议表示赞赏。

加尔文特

基本上,您想从一个空容器开始。图像的路径将包含在Javascript数组中,然后使用屏幕外的元素加载方法逐一引入。代码:

<div id="gallery"></div>

<script>
var images = [
    { src: '1.png', alt: 'I am the first image' },
    { src: '2.png', alt: 'Second image' }
];

function loadImageSequentially(imagesArray, appendTo, loadImageAtIndex) {
    if (!loadImageAtIndex) loadImageAtIndex = 0; // assume first loading if not provided.
    if (!imagesArray[loadImageAtIndex]) return;

    var img = new Image();

    // attach listeners first
    img.onload = function() {
        appendTo.appendChild(img);
        loadImageSequentially(imagesArray, appendTo, loadImageAtIndex + 1);
    }
    img.onerror = function() {
        // remove the onload listener
        img.onload = null;
        img.src = 'error.png';

        // life goes on...
        appendTo.appendChild(img); 
        loadImageSequentially(imagesArray, appendTo, loadImageAtIndex + 1);     
    }

    // assign attributes, which will start the loading.
    img.src = imagesArray[loadImageAtIndex].src;
    img.alt = imagesArray[loadImageAtIndex].alt;
}

// now run it.
var appendTo = document.getElementById('gallery')
loadImageSequentially(images, appendTo);
</script>

该示例可以模块化,并且可以做得更好。但是出于说明目的而保留在此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以将通过http下载的图像直接加载到内存中?

来自分类Dev

有没有一种方法可以使bash for循环并行化?

来自分类Dev

有没有一种方法可以隐藏已卸载的惰性加载图像的alt标签?

来自分类Dev

有没有一种方法可以强制Glide仅从缓存而不是从网络加载图像?

来自分类Dev

有没有一种方法可以使用惰性加载插件在图像周围添加边框?

来自分类Dev

有没有一种方法可以防止jQuery事件冒泡到特定的div?

来自分类Dev

有没有一种方法可以使用javascript打开文件(vs下载)?

来自分类Dev

有没有一种方法可以使用javascript打开文件(vs下载)?

来自分类Dev

有没有一种方法可以取消从Internet下载的html文档的影响

来自分类Dev

有没有一种方法可以正式下载或验证Windows安装ISO?

来自分类Dev

有没有一种方法可以防止填充类的填充

来自分类Dev

有没有一种方法可以防止光标到达终端的底部?

来自分类Dev

有没有一种方法可以防止Spring Boot覆盖bean?

来自分类Dev

有没有一种方法可以防止Spring Boot覆盖bean?

来自分类Dev

有没有一种方法,以防止ClosedByInterruptException?

来自分类Dev

有没有一种方法可以防止特定代码行合并?

来自分类Dev

有没有一种方法可以防止光标到达终端的底部?

来自分类Dev

有没有一种方法可以从外部防止程序窃取输入反馈?

来自分类Dev

有没有一种方法可以防止意外发送消息?

来自分类Dev

有没有一种方法可以在Julia中反转元组的顺序?

来自分类Dev

有没有一种方法可以控制JPA级联删除顺序?

来自分类Dev

有没有一种方法可以控制JPA级联删除顺序?

来自分类Dev

有没有一种方法可以创建可在加载Google Maps Javascript API时解决的承诺?

来自分类Dev

有没有一种方法可以通过Javascript检测默认图像文件夹?

来自分类Dev

有没有一种方法可以在重新加载时保存画布的状态?

来自分类Dev

有没有一种方法可以减少雪管加载时间?

来自分类Dev

有没有一种方法可以自动在Paraview中加载csv文件?

来自分类Dev

有没有一种方法可以在Swift / iOS中比较按钮图像

来自分类Dev

有没有一种方法可以将图像与imagemagick并排堆叠?

Related 相关文章

  1. 1

    有没有一种方法可以将通过http下载的图像直接加载到内存中?

  2. 2

    有没有一种方法可以使bash for循环并行化?

  3. 3

    有没有一种方法可以隐藏已卸载的惰性加载图像的alt标签?

  4. 4

    有没有一种方法可以强制Glide仅从缓存而不是从网络加载图像?

  5. 5

    有没有一种方法可以使用惰性加载插件在图像周围添加边框?

  6. 6

    有没有一种方法可以防止jQuery事件冒泡到特定的div?

  7. 7

    有没有一种方法可以使用javascript打开文件(vs下载)?

  8. 8

    有没有一种方法可以使用javascript打开文件(vs下载)?

  9. 9

    有没有一种方法可以取消从Internet下载的html文档的影响

  10. 10

    有没有一种方法可以正式下载或验证Windows安装ISO?

  11. 11

    有没有一种方法可以防止填充类的填充

  12. 12

    有没有一种方法可以防止光标到达终端的底部?

  13. 13

    有没有一种方法可以防止Spring Boot覆盖bean?

  14. 14

    有没有一种方法可以防止Spring Boot覆盖bean?

  15. 15

    有没有一种方法,以防止ClosedByInterruptException?

  16. 16

    有没有一种方法可以防止特定代码行合并?

  17. 17

    有没有一种方法可以防止光标到达终端的底部?

  18. 18

    有没有一种方法可以从外部防止程序窃取输入反馈?

  19. 19

    有没有一种方法可以防止意外发送消息?

  20. 20

    有没有一种方法可以在Julia中反转元组的顺序?

  21. 21

    有没有一种方法可以控制JPA级联删除顺序?

  22. 22

    有没有一种方法可以控制JPA级联删除顺序?

  23. 23

    有没有一种方法可以创建可在加载Google Maps Javascript API时解决的承诺?

  24. 24

    有没有一种方法可以通过Javascript检测默认图像文件夹?

  25. 25

    有没有一种方法可以在重新加载时保存画布的状态?

  26. 26

    有没有一种方法可以减少雪管加载时间?

  27. 27

    有没有一种方法可以自动在Paraview中加载csv文件?

  28. 28

    有没有一种方法可以在Swift / iOS中比较按钮图像

  29. 29

    有没有一种方法可以将图像与imagemagick并排堆叠?

热门标签

归档