不要在隐藏元素中加载图像

Posted

技术标签:

【中文标题】不要在隐藏元素中加载图像【英文标题】:Don't load images within hidden elements 【发布时间】:2015-10-13 23:58:00 【问题描述】:

不是 this 的重复,因为它还使用了 document.ready 方法,这显然是行不通的。

我想避免浏览器加载嵌套在隐藏的<div> 元素中的图像 (<img>)。

所以我尝试了这个,但是 javascript 执行得太晚了,浏览器已经开始下载它不应该下载的图像。

  $(document).ready(function() 
    $('div').not(":visible").each(function () 
       $(this).find('img').each(function() 
         $(this).attr("src","");
       );
    );
  );

有没有一个好的javascript解决方案? 还是我必须使用<img srctmp="...."/>,然后通过javascript将srctmp替换为src,用于那些未嵌套在隐藏<div>中的图像?

【问题讨论】:

我相信将src 属性设置为"" 不会影响这一点。将属性保存到data-src 或其他内容后尝试删除整个属性? 无法阻止通过 JavaScript 下载图像源。您必须将src 属性留空,然后将其与另一个属性一起插入,但请改用data-srctmp $(document).ready(function() ...); 中的代码总是会在 DOM 准备好之后执行(意味着在所有图像和内容都已加载之后)。所以不要使用ready Prevent images from loading的可能重复 @AbraarArique 但没有ready,您将无法访问任何元素。当图像完成加载时,将调度 load 事件,而不是 DOMContentLoaded (ready)。 【参考方案1】:

您可以使用data 属性代替src,浏览器仅从src 加载图像,因此您可以从data-src 开始为每个图像添加src,仅添加到可见图像。

html

  <img data-src="path/to/image.jpg" />

JS:

  $(document).ready(function() 
    $('div').is(":visible").each(function () 
       $(this).find('img').each(function() 
         $(this).attr("src", $(this).data("src"));
       );
    );
  );

【讨论】:

这看起来很有希望。如果可行,我将尝试并选择它作为解决方案。感谢您的宝贵时间。

以上是关于不要在隐藏元素中加载图像的主要内容,如果未能解决你的问题,请参考以下文章

等待图像在 JavaScript 中加载

无法隐藏 UINavigationBar 或在 TabBarController 中加载内部 HTML

如何在 WKWebView 中加载的页面中的隐藏字段中获取值绑定

进度条不隐藏是当数据在片段中的recyclerview中加载时

JavaScript:单击按钮后在 div 中加载图像

如何在 DNN 代码隐藏中加载 Facebook Pixel NoScript 代码?