如何在 jQuery 中自动修复损坏的图片?

jqueryweb developmentfront end technology

在本教程中,我们将学习如何使用 jQuery 自动修复损坏的图片。您是否曾在浏览网站时,看到过损坏的图片,而这些网站只显示带有损坏图片默认图标的替代文本?您不觉得这种用户体验很差吗?显然,确实如此。

因此,在开发应用程序或网站时,您应该编写一些 JavaScript 或 jQuery 代码,使其能够自动替换损坏的图片。

在这里,我们将学习 2 到 3 种使用 jQuery 自动修复损坏图片的不同方法。

在 HTML 的 <img> 标签中使用 onerror 事件

我们可以将这些事件与 HTML 标签一起使用。当 HTML 元素发生任何错误时,都会触发 onerror 事件。在我们的例子中,如果图片 URL 损坏,就会触发 onerror 事件,我们可以为损坏的图片设置新的 URL。

用户应遵循以下语法,使用 jQuery 中的 onerror 事件自动修复损坏的图片。

语法

// 带有源 URL 的图片
<imgsrc = "<Image URL>"onerror = "solveError(this);"/>
<script>
   function solveError(currentImage) {
      currentImage.src = "<New Image URL>";
   }
</script>

在上述语法中,当图片 URL 出现错误时,我们会调用"solveError()"函数。该函数将修复图片损坏的 URL。

示例

在下面的示例中,我们使用 HTML"<img>"标签创建了两个图片元素。这两个图片元素都包含源 URL,但第二个图片的源 URL 已损坏。此外,我们还为这两个图片元素添加了 onerror 事件。

当<img> 标签内出现错误时,它将调用"solveError()"函数,并且我们已将当前元素的引用作为函数的参数传递。在 solveError() 函数内部,我们正在更改参数中接收的参考图片的"src"属性的值。

<html> <head> <style> img { width: 100px; height: 100px; } </style> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"> </script> </head> <body> <h2> Fixing the Broken image automatically using <i> jQuery each() method. </i> </h2> <img src = "https://www.tutorialspoint.com/static/images/logo-footer-b.png" /> <img src = "https://wwwS/images/logo-footer-b.png" /> <script> $("img").each(function () { if ( (typeof this.naturalWidth != "undefined" && this.naturalWidth == 0) || this.readyState == "uninitialized" ) { $(this).attr( "src", "https://yt3.ggpht.com/ytc/AMLnZu8XtlipNIpeKZgTSg1z64NO-mF7FEmlC2qML8WvwA=s900-c-k-c0x00ffffff-no-rj" ); } }); </script> </body> </html>

在上面的输出中,用户可以看到第一张图片是原始图片,而第二张图片损坏,因此显示的是替换图片。

使用 jQuery 的 .on() 方法自动修复损坏的图片

我们可以在 jQuery 中对任何 HTML 元素调用".on()"方法。基本上,on() 方法用于检测引用元素上的单个或多个事件。

用户可以按照以下语法使用 on() 方法检测图像元素的错误。

语法

$("img").on("error", function () {
    // 更改损坏图像 URL 的代码
    $(this).attr("src","https://yt3.ggpht.com/ytc/AMLnZu8XtlipNIpeKZgTSg1z64NO-mF7FEmlC2qML8WvwA=s900-c-k-c0x00ffffff-no-rj"
    );
});

在上述语法中,我们在每个' <img> '元素上调用了 on() 方法。此外,当图片出现错误时,我们调用回调函数来替换损坏的图片 URL。

参数

"saveAs"函数接受两个参数。

  • img − 这是一个选择器。用户可以保留它来修复所有损坏的图片。此外,用户可以设置需要触发特定事件的图片的 ID 或类。

  • Error − 这是一个事件名称。它将检测所选图像的"错误"。

  • function() { } − 它是一个在所选图像发生任何错误时执行的函数。

示例

下面的示例中创建了两个图像元素。一个包含原始 URL,另一个包含损坏的图像。

在 jQuery 内部,我们使用 on() 方法检测每个图像上的错误,并在发生错误时调用回调函数。回调函数会替换发生错误的引用图像的 URL。

<html> <head> <style> img { width: 100px; height: 100px; } </style> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"> </script> </head> <body> <h2> Fixing the Broken image automatically using <i> jQuery on() method. </i> </h2> <img src = "https://www.tutorialspoint.com/static/images/logo-footer-b.png" /> <img src = "https://wwwS/images/logo-footer-b.png" /> <script> $("img").on("error", function () { $(this).attr( "src", "https://yt3.ggpht.com/ytc/AMLnZu8XtlipNIpeKZgTSg1z64NO-mF7FEmlC2qML8WvwA=s900-c-k-c0x00ffffff-no-rj" ); }); </script> </body> </html>

使用 jQuery 的 .each() 方法自动修复损坏的图片

在此方法中,我们使用了 jQuery 的 each() 方法迭代所有选定的图片。我们将检查每张图片的原始宽度。如果任何图片的原始宽度为 0 或未定义,则表示图片 URL 已损坏,可以进行替换。

用户应遵循以下语法迭代每个选定的图片并检查损坏的图片 URL。

语法

// 迭代每个图片元素
$("img").each(function () {

    // 检查图片的原始宽度是否为 0 或未定义,然后替换图片 URL
    if (
    (typeof this.naturalWidth != "undefined" &&
    this.naturalWidth == 0) ||
    this.readyState == "uninitialized"
    ){
    $(this).attr("src","https://yt3.ggpht.com/ytc/AMLnZu8XtlipNIpeKZgTSg1z64NO-mF7FEmlC2qML8WvwA=s900-c-k-c0x00ffffff-no-rj");
    }
});

在上述语法中,我们根据替换损坏的图片 URL 的值,检查图片的自然宽度类型、自然宽度本身以及图片的就绪状态。

属性

  • typeof − 返回变量或任何属性的类型。

  • naturalWidth − 返回图片的原始宽度。即使用户更改了图像的宽度,它也会返回原始宽度。

  • readyState - 根据图像是否已加载到文档中,返回布尔值。

示例

以下示例演示了如何使用 jQuery 的 each() 方法遍历每个图像来自动修复损坏的图像。它只是使用 jQuery 的 attr() 方法替换每个损坏图像的"src"属性值。

<html> <head> <style> img { width: 100px; height: 100px; } </style> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"> </script> </head> <body> <h2> Fixing the Broken image automatically using <i> jQuery each() method. </i> </h2> <img src = "https://www.tutorialspoint.com/static/images/logo-footer-b.png" /> <img src = "https://wwwS/images/logo-footer-b.png" /> <script> $("img").each(function () { if ( (typeof this.naturalWidth != "undefined" && this.naturalWidth == 0) || this.readyState == "uninitialized" ) { $(this).attr( "src", "https://yt3.ggpht.com/ytc/AMLnZu8XtlipNIpeKZgTSg1z64NO-mF7FEmlC2qML8WvwA=s900-c-k-c0x00ffffff-no-rj" ); } }); </script> </body> </html>

在本教程中,我们学习了三种使用 jQuery 替换损坏图片的方法。此外,用户还可以使用 hide() 方法在 jQuery 中隐藏损坏的图片。

建议使用第一种方法,因为它最简单,用户可以根据需求使用其他方法。


相关文章