【问题标题】:Controlling image load order in HTML控制 HTML 中的图像加载顺序
【发布时间】:2011-05-11 19:45:55
【问题描述】:

有没有办法控制网页上图像的加载顺序?我正在考虑尝试通过首先加载轻量级“加载”图形来模拟预加载器。有什么想法吗?

谢谢

【问题讨论】:

    标签: html image assets


    【解决方案1】:

    使用 Javascript,稍后填充图像 src 属性。 # 告诉浏览器链接到页面上的 URL,因此不会向服务器发送请求。 (如果 src 属性为空,仍会向服务器发出请求 - 不太好。)

    组装一个图像地址数组,并通过它进行递归,加载图像并在每个图像的onloadonerror 方法返回一个值时调用递归函数。

    HTML:

    <img src='#' id='img0' alt='[]' />
    <img src='#' id='img1' alt='[]' />
    <img src='#' id='img2' alt='[]' />
    

    JS:

    var imgAddresses = ['img1.png','img2.jpg','img3.gif'];
    
    function loadImage(counter) {
      // Break out if no more images
      if (counter==imgAddresses.length) { return; }
    
      // Grab an image obj
      var I = document.getElementById("img"+counter);
    
      // Monitor load or error events, moving on to next image in either case
      I.onload = I.onerror = function() { loadImage(counter+1); }
    
      //Change source (then wait for event)
      I.src = imgAddresses[counter];
    }
    
    loadImage(0);
    

    您甚至可以使用document.getElementsByTagName("IMG")

    顺便说一下,如果你需要加载图片,this is a good place to start

    编辑

    为避免对服务器的多个请求,您可以使用几乎相同的方法,只是在您准备好加载它们之前不要插入图像元素。有一个 &lt;span&gt; 容器等待每个图像。然后,循环遍历,获取span对象,动态插入图片标签:

    var img = document.createElement("IMG");
    document.getElementById('mySpan').appendChild(img);
    img.src = ...
    

    然后在创建元素时只进行一次图像请求。

    【讨论】:

    • 有趣的想法,但根据这个设置,空的 img 来源是不好的做法:developer.yahoo.com/performance/rules.html#emptysrc -thoughts?
    • @Yarin @Steve 完全省略 src 属性。这不应该对服务器产生任何请求。最坏的情况,如果您仍然可以检测到对 404 页面的请求,请放置空
      并在运行时填充图像。
    • @Yarin - 编辑了您的评论
    • 这是一个糟糕的答案,因为它破坏了搜索引擎索引
    【解决方案2】:

    这里有一个小型的 jQuery 插件可以为你做这件事:https://github.com/AlexandreKilian/imageorder

    【讨论】:

    • Id 对我不起作用,这可能是一个简单的解决方案
    【解决方案3】:

    我认为这篇文章https://varvy.com/pagespeed/defer-images.html 给出了一个非常好的和简单的解决方案。请注意解释如何创建“空” 标签的部分:

    data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" data-src="your-image-here">

    避免

    要显示加载图像,只需将其放入 HTML 中并稍后在适当的时刻/事件进行更改。

    【讨论】:

      【解决方案4】:

      只需在任何其他图片之前添加“正在加载”图片即可。通常它们包含在页面的最顶部,然后当页面加载完成时,它们会被 JS 隐藏。

      【讨论】:

      • 就这么简单吗?...去试试
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签