我有这样的锚标签:
<a href=\"http://www.duckbill.com" target=\"_blank\"><img height=\"160\" width=\"160\" src=\"http://images.duckbill.com/PlatypiOnVacation.jpg\" alt=\"Platypi playing Pinochle and eating Pizza in Panama\" /></a>
...有时无法加载src图像;在这种情况下,我想在经过足够的延迟(几秒钟)后,将其替换为:
<a href=\"http://www.duckbill.com" target=\"_blank\"><img height=\"160\" width=\"160\" src=\"Content/Images/PlatypiOnVacation.jpg\" alt=\"Platypi playing Pinochle and eating Pizza in Panama\" /></a>
我知道我可以在jQuery中做到这一点,但是我怎么能够以编程方式确定远程文件没有加载,在这种情况下,使用回退图像进行响应?
我喜欢Brad Christie对真正不可用的图像的回答,但是我想永远不要显示“不可用” - 如果目前还没有遥控器,只需使用本地的。我喜欢这个:http://www.cirkuit.net/projects/jquery/onImagesLoad/example1.html但是如何以编程方式确定图像失败了?
答案 0 :(得分:13)
<img src="http://remotecdn.com/myimage.jpg"
data-failover="/assets/notfound.jpg" />
然后:
<script>
$('img[data-failover]').error(function(){
var failover = $(this).data('failover');
if (this.src != failover){
this.src = failover;
}
});
</script>
尝试加载实际源,但如果发生错误,请使用failover
数据属性将其转换为本地资源。由于我们将补充信息分开,因此在不能/不支持它的浏览器中应该优雅地失败。
有关.error()
的更多信息。
答案 1 :(得分:1)
我发现问题是图像请求有时会挂起很长一段时间。如果你想在发生这种情况时向用户展示一些内容,你可以在img元素上设置一个带有“not available”图标等的CSS背景。然后,如果图像最终加载,它仍然会显示。
setTimeout(function(){
$(".thumb").each(function(){
if(!this.complete){
$(this).css({background:'url("not-available.gif")'});
}
});
}, 5000);
答案 2 :(得分:1)
我找到了一个CSS解决方案:重叠图像。
在我的情况下,我有两张个人资料图片,一张图片是用户,如果它存在,如果它不存在,那么将使用一个头像。我们不知道用户图像是否存在。
因此,如果目标图像不存在,则化身会显示:)
// CSS
.avatar {
position:relative;
height: 40px;
width: 40px;
}
.avatar img {
position: absolute;
top: 0px;
}
// HTML
<div class="avatar">
<img height="40" width="40" src="/assets/users/avatar.jpg">
<img height="40" width="40" src="/assets/users/joe.jpg" >
</div>