加载前检查图像是否存在
Check if image exists before loading
我使用了其他各种 Stack Overflow 问题的示例,但出于某种原因,这对我不起作用。我做了一个函数来获取缩略图和 return 实际图像路径或默认(无缩略图)图像的路径。
同时使用 JQuery 方法和 Javascript 图像 class,我在控制台中收到关于丢失图像的 404 错误,并且找到的图像没有错误,但没有不要出现。谁能指出我做错了什么?
在 getThumbnail() 函数中,写入控制台时 "image_url" 显示正确。当我在调用函数中并记录 returned 值时,它只显示为 "undefined".
JQuery:
function getThumbnail(name)
{
var image_url = "images/" + name + ".jpg";
$.get(image_url)
.done(function()
{
return image_url;
})
.fail(function()
{
return "images/default.jpg";
})
}
Javascript:
function getThumbnail(name)
{
var image = new Image();
image.src = image_url;
image.onload = function()
{
return image;
}
image.onerror = function()
{
return "images/default.jpg";
}
}
调用函数:
$.each( cycle, function( key, value )
{
var mapIndex = key;
var mapValue = value;
var brick = "<div class='brick small'><a class='delete' href='#'>×</a><img src='" + getThumbnail(value) + "' /><h2><span>" + value + "</span></h2></div>";
$( ".gridly" ).append( brick );
});
它不起作用的问题是 getThumbnail() 方法的行为不符合您的要求。
.onload 是一个异步调用,对于这种情况,getThumbnail(value) 将始终具有未定义的返回结果;
要完成你想要的,你可以这样做:
<img src="/image/..." onerror="javascript:this.src='images/default.jpg'"/>
这不起作用,因为 return
在 onerror
和 onload
函数中,并且因为请求是异步的,所以函数不会等到请求完成。
您可以使用回调来实现。
function callback(src, value){
var brick = "<div class='brick small'><a class='delete' href='#'>×</a><img src='" + src + "' /><h2><span>" + value + "</span></h2></div>";
$( ".gridly" ).append( brick );
}
function getThumbnail(name, c)
{
var image_url = "images/" + name + ".jpg";
var image = new Image();
image.onload = function()
{
c(image_url, name);
}
image.onerror = function()
{
c("images/default.jpg", name);
}
image.src = image_url;
}
$.each( cycle, function( key, value )
{
var mapIndex = key;
var mapValue = value;
getThumbnail(value, callback);
});
我使用了其他各种 Stack Overflow 问题的示例,但出于某种原因,这对我不起作用。我做了一个函数来获取缩略图和 return 实际图像路径或默认(无缩略图)图像的路径。
同时使用 JQuery 方法和 Javascript 图像 class,我在控制台中收到关于丢失图像的 404 错误,并且找到的图像没有错误,但没有不要出现。谁能指出我做错了什么?
在 getThumbnail() 函数中,写入控制台时 "image_url" 显示正确。当我在调用函数中并记录 returned 值时,它只显示为 "undefined".
JQuery:
function getThumbnail(name)
{
var image_url = "images/" + name + ".jpg";
$.get(image_url)
.done(function()
{
return image_url;
})
.fail(function()
{
return "images/default.jpg";
})
}
Javascript:
function getThumbnail(name)
{
var image = new Image();
image.src = image_url;
image.onload = function()
{
return image;
}
image.onerror = function()
{
return "images/default.jpg";
}
}
调用函数:
$.each( cycle, function( key, value )
{
var mapIndex = key;
var mapValue = value;
var brick = "<div class='brick small'><a class='delete' href='#'>×</a><img src='" + getThumbnail(value) + "' /><h2><span>" + value + "</span></h2></div>";
$( ".gridly" ).append( brick );
});
它不起作用的问题是 getThumbnail() 方法的行为不符合您的要求。
.onload 是一个异步调用,对于这种情况,getThumbnail(value) 将始终具有未定义的返回结果;
要完成你想要的,你可以这样做:
<img src="/image/..." onerror="javascript:this.src='images/default.jpg'"/>
这不起作用,因为 return
在 onerror
和 onload
函数中,并且因为请求是异步的,所以函数不会等到请求完成。
您可以使用回调来实现。
function callback(src, value){
var brick = "<div class='brick small'><a class='delete' href='#'>×</a><img src='" + src + "' /><h2><span>" + value + "</span></h2></div>";
$( ".gridly" ).append( brick );
}
function getThumbnail(name, c)
{
var image_url = "images/" + name + ".jpg";
var image = new Image();
image.onload = function()
{
c(image_url, name);
}
image.onerror = function()
{
c("images/default.jpg", name);
}
image.src = image_url;
}
$.each( cycle, function( key, value )
{
var mapIndex = key;
var mapValue = value;
getThumbnail(value, callback);
});