[英]Change image source (twice) when src does not exist
我刚开始在网站的前端使用Vue 。 在我的Vue组件之一中,我想要具有一定路径的图像:
<img src="path/example/with/vue/var">
现在,这就是我想要做的:
- 检查“ path / example / with / vue / var”中的文件是否存在
- 如果不是,请执行以下操作:将src更改为“ another / path / with / vue / var”
- 检查是否存在“另一个/路径/具有/ vue / var”
- 如果不是:将src更改为“ default / path”
我已经尝试过将onerror
与内部函数一起使用。 但是问题是我正在加载100个以上的对象,并且每个对象有几个图像。 如果我只是检查文件是否存在正常方式(通过Ajax或XMLHttpRequest),则性能将完全消失。 所有对象均通过JSON文件加载。
我希望你们能理解这个问题。
我建议您使用https://imagesloaded.desandro.com/
您可以了解路径是否以这种方式存在
$('#container').imagesLoaded()
.always( function( instance ) {
console.log('all images loaded');
})
.done( function( instance ) {
console.log('all images successfully loaded');
})
.fail( function() {
console.log('all images loaded, at least one is broken');
})
在Fail函数中,您可以为另一个路径重新创建imagesLoaded(),依此类推。
一种简单的实现方法是使组件在v-for
循环中使用的对象之外。
然后,您可以简单地使用计算属性来检查对象的src
属性。
在这种情况下,您可以:
const image = new Image()
然后像这样设置src:
image.src = <object>.src
在Image对象上设置src之后,可以检查指定的图像是否已加载onload
或因onerror
失败。
我通过检查图像是否已加载来在代码中执行类似的操作,因此可以将占位符图像替换为实际加载的图像:
setImagePlaceholder(hotel) {
this.$set(hotel, 'imgLoaded', false);
const image = new Image();
image.src = hotel.thumbUrl;
image.onload = () => {
hotel.imgLoaded = true;
};
}
不知道我该如何简化您的工作。
这是一个简单的演示 ,您需要添加recurseve第二次尝试。
var img = new Image();
img.onload=function(){
console.log('loaded!');
};
img.onerror = function(){
console.log("error");
}
img.src='something';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.