问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

JS判断图片加载失败的多种方法及最佳实践

创作时间:
作者:
@小白创作中心

JS判断图片加载失败的多种方法及最佳实践

引用
1
来源
1.
https://docs.pingcode.com/baike/2312354


JS 判断图片加载失败的方法有几种:onerror 事件处理程序、监听图片对象的 error 事件、使用 Promise 等。最常用的方法是通过设置 onerror 事件处理程序。
onerror 事件处理程序是最常用的方法。你可以在图片元素上直接设置这个事件处理程序,当图片加载失败时会触发这个事件,并执行你定义的处理函数。

一、onerror 事件处理程序

通过 HTML 直接在图片标签上设置
onerror
属性:

<img src="image.jpg" onerror="this.onerror=null; this.src='default.jpg';">

在这个例子中,如果
image.jpg
加载失败,图片的
src
属性会被设置为
default.jpg

也可以通过 JavaScript 动态地设置
onerror
事件处理程序:

var img = new Image();
img.src = "image.jpg";  
img.onerror = function() {  
    img.src = "default.jpg";  
};  
document.body.appendChild(img);  

二、监听图片对象的 error 事件

你可以使用
addEventListener
方法来监听图片对象的
error
事件:

var img = new Image();
img.src = "image.jpg";  
img.addEventListener('error', function() {  
    img.src = "default.jpg";  
});  
document.body.appendChild(img);  

三、使用 Promise 和 Fetch

使用
fetch
方法可以在请求图片之前判断它是否存在:

function loadImage(url) {
    return fetch(url).then(response => {  
        if (!response.ok) {  
            throw new Error('Image not found');  
        }  
        return response.blob();  
    }).then(blob => {  
        return URL.createObjectURL(blob);  
    });  
}  
var img = new Image();  
loadImage('image.jpg').then(src => {  
    img.src = src;  
}).catch(error => {  
    img.src = 'default.jpg';  
});  
document.body.appendChild(img);  

四、综合应用

在实际应用中,图片加载失败可能带来不同的用户体验问题,如用户看不到预期的图像内容,影响页面美观和用户操作。为了提高用户体验,可以结合以上方法,并根据业务需求进行综合应用。例如,可以在图片加载失败时显示一个占位符图片,并提示用户重新加载,或者提供其他操作选项。

五、实践中的具体应用

1. 动态设置图片并处理加载失败

在现代 Web 应用中,经常需要动态地设置图片,比如在用户上传图片时进行预览。可以在图片加载失败时显示一个占位符图片,并提示用户重新上传:

<input type="file" id="upload" />
<img id="preview" src="#" alt="Preview" style="display: none;" />  
<p id="error" style="display: none; color: red;">Image failed to load. Please try again.</p>  
<script>  
document.getElementById('upload').addEventListener('change', function(event) {  
    var file = event.target.files[0];  
    if (file) {  
        var reader = new FileReader();  
        reader.onload = function(e) {  
            var img = document.getElementById('preview');  
            img.src = e.target.result;  
            img.style.display = 'block';  
            img.onerror = function() {  
                img.style.display = 'none';  
                document.getElementById('error').style.display = 'block';  
            };  
        };  
        reader.readAsDataURL(file);  
    }  
});  
</script>  

2. 使用 Promise.all 处理多个图片加载

在一些场景中,可能需要同时加载多个图片,并确保所有图片都成功加载后再进行下一步操作。可以使用
Promise.all
来实现:

function loadImage(url) {
    return new Promise((resolve, reject) => {  
        var img = new Image();  
        img.src = url;  
        img.onload = () => resolve(img);  
        img.onerror = () => reject(new Error('Failed to load image: ' + url));  
    });  
}  
var images = ['image1.jpg', 'image2.jpg', 'image3.jpg'];  
Promise.all(images.map(loadImage)).then(results => {  
    results.forEach(img => document.body.appendChild(img));  
}).catch(error => {  
    console.error(error);  
    // 在所有图片都加载失败时,执行相应的逻辑  
});  

六、优化用户体验

1. 提供替代图片

在图片加载失败时,提供一张替代图片是一个常见的做法。这不仅能提升用户体验,还能避免页面显示空白或错误信息。

2. 提示用户重新加载

在图片加载失败时,可以提示用户重新加载图片。可以通过按钮或其他交互方式,提示用户手动重新加载图片:

<img id="image" src="image.jpg" alt="Image">
<button id="reload" style="display: none;">Reload Image</button>  
<script>  
var img = document.getElementById('image');  
var button = document.getElementById('reload');  
img.onerror = function() {  
    button.style.display = 'block';  
};  
button.addEventListener('click', function() {  
    img.src = 'image.jpg';  
    button.style.display = 'none';  
});  
</script>  

七、结合其他技术优化

1. 使用 Service Worker 缓存

通过使用 Service Worker,可以在用户第一次访问时缓存图片资源,从而在后续访问中快速加载,即使在网络不稳定或图片服务器不可用的情况下,也能提供良好的用户体验。

2. 使用 CDN

使用内容分发网络(CDN)可以加速图片加载,减少加载失败的可能性。CDN 会将图片资源分布在多个服务器上,确保即使某个服务器出现问题,图片也能从其他服务器加载。

八、结论

在 Web 开发中,图片加载失败是一个常见的问题。通过使用
onerror
事件处理程序、监听图片对象的
error
事件、使用 Promise 等方法,可以有效地判断图片加载是否失败,并采取相应的措施提升用户体验。在实际应用中,可以根据具体需求,结合多种方法和技术手段,确保图片资源的稳定加载和良好的用户体验。
通过对这些方法的综合应用,我们不仅可以提高图片加载的可靠性,还能在图片加载失败时提供友好的用户体验,增强用户对应用的满意度和信任度。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号