防止图片加载

IT技术 javascript
2021-01-12 15:43:05

有没有办法使用 javascript/jquery 来防止图像加载?我正在从带有图像的 html 列表构建幻灯片。所以我想收集所有的 src 数据,然后阻止图像加载。所以稍后当用户真正需要图像时,我会加载它。

我在谷歌上发现了一些延迟加载脚本,但找不到它们阻止图像加载的方式。

提前致谢。

编辑 1:
从答案看来,不可能使用 javascript 来阻止图像加载。 是一个执行延迟加载的脚本。有人能解释一下它是如何工作的吗?似乎当javascript关闭时它只是正常加载图像,当它打开时它会在你滚动到它们的位置时加载它们。

6个回答

您可以将图像包装在 noscript 标签中:

<noscript>
<img src="foo.jpg"/>
</noscript>

所有启用了 JavaScript 的浏览器都将忽略图像标签,因此图像不会加载。

它确实有效并且不需要更改图像元素本身的 HTML。投票给这个作为最佳答案。一种可能的解决方案是使用<script type="some/thing">,但<noscript>如果您想对 noJS 进行回退,这是更好的选择。
2021-03-26 15:43:05
奇怪的是,$('<noscript>').append('<img>').find('img').attr('src','foo.png')也会导致图像被加载。
2021-03-29 15:43:05
几乎是我需要的。$('<noscript><div><img src="fo2o.png"></div></noscript>').html()工作,但$('<noscript>').append('<div><img src="fo2o.png"></div></noscript>').html()不:-(
2021-03-31 15:43:05
如果这有效,对于渐进增强会很棒
2021-04-07 15:43:05

如果您在页面上呈现 HTML,即使它是隐藏的,它也会加载。如果您希望图像仅在需要时加载,则必须在 javascript 中的图像标签上动态设置源 (src)。

编辑 1:您引用的脚本只是检查您向下滚动页面的距离,然后通过检查它们的顶部来确定哪些图像可见(或几乎可见)——请参阅 $.belowthefold 和 $.rightoffold 扩展名。

当图像大小相同时,该示例效果很好,因为它们的容器也可以具有相同的大小,并且在延迟加载它们时不会出现任何奇怪的页面大小调整行为。如果您的图像的高度和宽度不同,您可能会得到一些奇怪的结果。  

编辑2:

<script type="text/javascript" charset="utf-8">
    $(document).ready( function() { $("img").removeAttr("src"); } );
</script>

<img src="Chrysanthemum.jpg" />
<img src="Desert.jpg" />
<img src="Hydrangeas.jpg" />
<img src="Jellyfish.jpg" />
<img src="Koala.jpg" />
<img src="Lighthouse.jpg" />
<img src="Penguins.jpg" />
<img src="Tulips.jpg" />
$("img").removeAttr("src").css('display':'none'); 可能会更好,因为如果 IMG 元素没有 SRC 属性,某些浏览器 (Firefox) 会显示损坏的小图标。
2021-03-21 15:43:05
这在最新的浏览器中不再起作用。例如。铬 12 :(
2021-03-21 15:43:05
抱歉,我丢失了原始问题的网站。看起来你的答案在这里: $(self).removeAttr("src"); self.loaded = false;
2021-03-30 15:43:05
@Langdon 是的,我知道这种方法。我实际上是在尝试编写一个greasemonkey 脚本来防止为特定站点加载特定图像。因此,Aaron 建议的方法无法满足我的需求,因为生成的 html 不在我的控制之下。编辑:只是为了进一步澄清我不是要实现延迟加载。只是想完全阻止加载图像,我不想在使用油脂猴脚本的 3rd 方网站上看到这种图像:)
2021-04-02 15:43:05
但是他们不需要阻止加载这个脚本的图像有用吗?如果我检查萤火虫,我只会在滚动到它们的位置时看到 GET 图像。那么首先必须有一种机制来阻止它们加载?
2021-04-09 15:43:05

将 URL 存储在其他地方,然后将所有图像 URL 设置为某个虚拟图像(空的、透明的、“正在加载数据...”等等)。当需要显示图像时,使用 JS 设置src属性,浏览器将获取它。

@Eranda 将索引器机器人指向适合机器人的不同页面。
2021-03-24 15:43:05
这是这个问题的一个很好的解决方案。但是当你需要在你的网站上做一些 SEO 时,如果没有正确的图像,它就不会被正确地索引src
2021-03-28 15:43:05

好吧,使用 Prototype,我猜你可以做这样的事情:

var unloaded = [];
$$('img.noload').each(function (image) {
    unloaded.push(image);
    image._src = image.src;
    image.src = '';
});

要加载所有这些:

unloaded.each(function (image) {
    image.src = image._src;
});

加载第一个:

function loadImage (image) {
    image.src = image._src;
}

loadImage(unloaded.shift());

好吧,我希望你有这个想法。

只是不要在原始 HTML 中包含 img 标记,根据需要使用 DHTML 即时生成它。您还可以在 img 标签中放置一个假的 url 图像,并动态替换为真实的。

在旁注 - 有什么意义。您在这里要做的就是在现有缓存​​机制上构建另一种缓存机制。把缓存留给浏览器,他们很擅长这个

我需要这个机制的原因是因为我正在制作幻灯片。因此,如果有 30 张图像,如果用户只想查看几张图像,我不想加载所有 30 张图像。
2021-03-21 15:43:05