检查是否在一定时间间隔内加载了多个图像;如果没有,则替换为其他 URL
check if multiple images loaded within certain timeinterval; if not then replace with other url
问题 - 我在页面上显示一些由某些代理服务器提供的图像。在每页中,我显示 30 张图像(每行 6 行 - 5 张)。在这里,如果由于过载或由于任何其他问题,如果代理服务器无法在 6 秒内服务器图像(所有图像或其中一些图像),那么我想使用 javascript 将卸载的图像 url 替换为其他一些 url,以便我可以在最后显示 30 张图像。
我尝试的内容如下。
objImg = new Image();
objImg.src = 'http://www.menucool.com/slider/prod/image-slider-4.jpg';
if(!objImg.complete)
{
alert('image not loaded');
}else{
img.src = 'http://www.menucool.com/slider/prod/image-slider-4.jpg';
}
我也尝试了下面的代码。
$('img[id^="picThumbImg_"]').each(function(){
if($(this).load()) {
//it will display loaded image id's to console
window.console.log($(this).attr('id'));
}
});
我无法为每个图像使用设置超时,因为它会延迟所有页面加载。
我检查了有关堆栈溢出的其他类似问题,但没有解决方案完美地工作,因为我需要显示多个图像。请指导如何进行。
您不必等待 6 秒或使用超时。您可以使用 onload
Javascript/Jquery 事件检查图像是否已加载。我知道,调度onerror
事件需要一点点时间,让我们看看:
为什么不在窗口或图像本身上使用 load
Jquery 事件?
$(window).load(function(){
//check each image
})
缺点:
- 它将等待其他资源,如脚本,样式表和Flash,而不仅仅是图像,这些资源可能对您有用,也可能不合适。
- 如果图像从缓存加载,某些浏览器可能不会触发事件(包括您的浏览器,这就是您的代码不起作用的原因)
为什么不在图像本身上使用 error
Jquery 事件?
$('img[id^="picThumbImg_"]').error(function(){
//image loading error
})
弊:
- 它不能始终如一地工作,也不能可靠地跨浏览器 工作
- 如果图像 src 设置为与以前相同的 src,则在 WebKit 中无法正确触发
- 它没有正确地冒泡 DOM 树
- 可以停止为浏览器缓存中已存在的图像触发
注意::错误与加载事件几乎相同
改进代码!
$('img[id^="picThumbImg_"]').one('error', function() {
// image load error
}).each(function() {
if(!this.complete) $(this).error();
});
这将避免以前的代码中的一些事情,但是如果它是404并且您要在onerror
事件中替换它,您仍然需要等待,这将需要一点时间,对吗?
那么,现在怎么办!
你可以使用这个很棒的插件!添加引用后,您只需使用以下内容:
var imgLoad = imagesLoaded('#img-container');
imgLoad.on( 'always', function() {
// detect which image is broken
for ( var i = 0, len = imgLoad.images.length; i < len; i++ ) {
if(!imgLoad.images[i].isLoaded){
//changing the src
imgLoad.images[i].img.src = imgLoad.images[i].img.getAttribute("data-src2");
}
}
});
您的 HTML 标记应如下所示:
<div id="img-container">
<div class="row">
...
</div>
<div class="row">
<img src="original-path.jpg" data-src2="alternative-path.jpg">
...
</div>
<div class="row">
...
</div>
</div>
注意:在这种情况下,您不需要jQuery,此插件由Paul Irish ;)建议
为所有图像指定一个特定的类。 遍历您的图像并使用 .load() 检查是否加载,下面的示例...
检测图像加载
相关文章:
- 如何知道元素在屏幕上是否可见.如果没有,请滚动页面
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- 如果没有互联网连接,Android WebView离线消息
- 如果没有历史记录,我如何隐藏图像或按钮onclick=;历史.go(-1);
- 如果没有从下拉列表中选择任何值,则允许使用php、mysql、javascript将文本框添加到mysql表中
- 如果没有Ember中的控制器,我如何更改查询参数
- 如果没有添加PHP&Javascript
- 如果没有其他函数链接到promise,则默认行为
- 如果没有document.ready(),我怎么能拥有多个javascript函数呢
- 如果没有任何输入,如何启用按钮
- 有没有一个javascript库可以生成这样的垂直切片背景图像?如果没有,我怎么能创建它
- Jquery自动完成:如果没有选择任何项目,则使tab键选择第一个项目
- 如果设置了位置,如何在每个状态下检查路由器ui,如果没有,则转到登录页
- 如何从网站获得apple touch图标,如果没有;不存在,则显示收藏夹
- 如果没有src,则使用jquery隐藏图像
- 检查是否在一定时间间隔内加载了多个图像;如果没有,则替换为其他 URL
- 如果没有链接,如何自动隐藏图像
- 如果容器中没有图像,请添加默认图像
- 如果没有找到图像,如何防止显示图像占位符
- jQuery:查找特定标记字符串后的文本,如果没有图像则删除img标记