我的代码(以及此处:http://jsbin.com/oseruc/1)在每次点击鼠标时翻转给定的图像。它可以在我可以测试的所有浏览器中正常工作,除了最新的Firefox。 Firefox显示错误,例如:
Image corrupt or truncated: http://upload.wikimedia.org/wikipedia/commons/0/0c/St._Cristopher-D%C3%BCrer.jpg
Image corrupt or truncated: http://upload.wikimedia.org/wikipedia/commons/0/0c/St._Cristopher-D%C3%BCrer.jpg
Image corrupt or truncated: Rhinoceros.jpg">http://upload.wikimedia.org/wikipedia/commons/b/b9/D%C3%BCrer-_Rhinoceros.jpg
Image corrupt or truncated: http://upload.wikimedia.org/wikipedia/commons/0/0c/St._Cristopher-D%C3%BCrer.jpg
Image corrupt or truncated: Rhinoceros.jpg">http://upload.wikimedia.org/wikipedia/commons/b/b9/D%C3%BCrer-_Rhinoceros.jpg
如果我点击太快就会发生这种情况。是的,已经看过这个错误报告:http://code.google.com/p/fbug/issues/detail?id=4291
任何想法为什么会发生这种情况以及如何解决这个问题?因为我不能忽视这些错误。它们干扰了我的功能。
我的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript">
(function (window) {
var frames = [
"http://upload.wikimedia.org/wikipedia/commons/6/65/Duerer_%28Marter_der_zehntausend_Christen%29.jpg",
"http://upload.wikimedia.org/wikipedia/commons/0/0c/St._Cristopher-D%C3%BCrer.jpg",
"http://upload.wikimedia.org/wikipedia/commons/b/b9/D%C3%BCrer_-_Rhinoceros.jpg"
];
window.onload = function () {
var frame_num = 0;
var image = document.getElementById("image");
image.onclick = function () {
frame_num = (frame_num + 1) % frames.length;
image.src = frames[frame_num];
return false;
};
};
})(window);
</script>
</head>
<body>
<img id="image" src="http://upload.wikimedia.org/wikipedia/commons/6/65/Duerer_%28Marter_der_zehntausend_Christen%29.jpg" style="position:relative">
</body>
</html>
答案 0 :(得分:6)
当您请求图像太快时,肯定会发生这种情况。我通过使用setTimeout来查看是否在过去的35ms内请求了一个图像。我的应用程序有点不同,但您可以执行类似的操作(或者只是在图像加载之前禁用按钮)。
答案 1 :(得分:3)
我有完全相同的问题,它影响所有浏览器firefox,chrome,即不仅仅是firefox,只有firefox然后在consol日志中显示错误消息“图像损坏或截断”。 问题只发生在ajax请求发生得太快而导致beforeSend函数和success函数之间发生冲突时。这是我的代码:
function loadlist(page, maxrows){
var orderby = $('.sortby_active').attr('title');
var category = $('.category_active').attr('title');
$.ajax({
type: 'post',
url: 'gallery_pages.php?page=' + page + '&maxrows=' + maxrows + '&orderby=' + orderby + '&category=' + category,
beforeSend: function(){
$('#page_loading').show();
$('#container').fadeOut(300);
},
success: function(data){
$('#container').html(data);
$('#container').stop().animate({'bottom': '0px'}, 100);
n = 0;
$('#up_arrow').hide();
$('#scrollup').css('cursor', 'default');
if(!$('#down_arrow').is(':visible')){
$('#down_arrow').show();
$('#scrolldown').css('cursor', 'pointer');
}
$('#page_loading').hide();
$('#container').fadeIn(700);
}
});
}
我的代码中的冲突发生在fadeIn和fadeOut之间。 fadeout需要300ms,如果ajax请求发生的时间超过300ms,它将显示消息和ajax响应数据不能正确显示。解决方案是在成功函数中使用 delay()。我将fadeIn推迟了310ms以防万一:)
function loadlist(page, maxrows){
var orderby = $('.sortby_active').attr('title');
var category = $('.category_active').attr('title');
$.ajax({
type: 'post',
url: 'gallery_pages.php?page=' + page + '&maxrows=' + maxrows + '&orderby=' + orderby + '&category=' + category,
beforeSend: function(){
$('#page_loading').show();
$('#container').fadeOut(300);
},
success: function(data){
$('#container').html(data);
$('#container').stop().animate({'bottom': '0px'}, 100);
n = 0;
$('#up_arrow').hide();
$('#scrollup').css('cursor', 'default');
if(!$('#down_arrow').is(':visible')){
$('#down_arrow').show();
$('#scrolldown').css('cursor', 'pointer');
}
$('#page_loading').hide();
$('#container')**.delay(310)**.fadeIn(700);
}
});
}
答案 2 :(得分:1)
试试这个:
window.onload = function () {
var frame_num = 0;
var image = document.getElementById("image");
function load_next_image() {
image.onclick = null;
frame_num = (frame_num + 1) % frames.length;
image.src = frames[frame_num];
return false;
};
image.onclick = load_next_image;
image.onload = function() {
image.onclick = load_next_image;
}
};
每当您点击图片时,它会暂时禁用点击处理程序,然后在图片加载完成后重新启用它。
答案 3 :(得分:1)
我知道这已经过时了,但对于其他任何偶然发现检查并确保文件确实没有损坏的人。在查看了其中几个解决方案之后,我让我的设计师重新创建了图像。一旦他上传,一切都按预期开始工作。