如果我有一个信标:
<img src="http://example.com/beacon" />
我希望有一个方法在信标请求完成后只被调用一次。类似如下的方法:<script>
$("img.beacon").load(function() {
// do stuff knowing the beacon is done
});
</script>
这可行吗?这可以用jQuery实现吗?
如果我有一个信标:
<img src="http://example.com/beacon" />
我希望有一个方法在信标请求完成后只被调用一次。类似如下的方法:<script>
$("img.beacon").load(function() {
// do stuff knowing the beacon is done
});
</script>
这可行吗?这可以用jQuery实现吗?
没问题。记住要在src属性之前添加load属性。
$('<img />').load( function(){
console.log('loaded');
}).attr('src', imgUrl);
如果你在标记中定义了图像标签,那么当窗口加载事件触发时,你就必须确保图像已经被传输到了浏览器。
$('img.beacon').load()
这种方法不总是有效,通常我会这样做:
$.fn.imageLoad = function(fn){
this.on('load', fn);
this.each( function() {
if ( this.complete && this.naturalWidth !== 0 ) {
$(this).trigger('load');
}
});
}
上面的代码还涵盖了在脚本执行之前图像已经完成加载的情况。这种情况可能发生在您在标记中定义图像时。
用法如下:
<img src='http://example.com/image.png' class='beacon' />
<script type='text/javascript'>
$(document).ready(function(){ //document.ready not really necessary in this case
$('img.beacon').imageLoad(function(){
//do stuff
});
});
</script>
$('img.beacon').imageLoad(function() { /* 好 */ }).error(function() { /* 错误 */ })
- JasonSmith<script type="text/javascript">
$().ready(function() {
$('img#beacon').attr('src', 'http://sstatic.net/so/img/so/logo.png')
.load(function() { alert('Image Loaded'); })
.error(function() { alert('Error Loading Image');
});
});
</script>
这将加载StackOverflow的标志。
如果成功加载,则执行alert('Image Loaded');
。
如果失败,则执行alert('Error Loading Image');
。
当然,其中任何一个都可以替换为您自己的函数。
作为新用户,它拒绝了我的图像标记,但图像标记只应包含id='beacon'
属性,除非您想添加类。我们在此处使用代码设置src
属性,通常,您正在监视完成的图像具有以编程方式设置的src
值。
这里有一段简单的javascript代码,适用于所有浏览器:
var myImage = new Image();
myImage.onload = function() {
var image_width = myImage.width;
var image_height = myImage.height;
$('#pictureEl').html('<img width="'+ image_width +'" height="'+ image_height +'" src='+ myImage.src + '></img>');
};
myImage.src = myUrl;
onload
属性:<img onload="alert('loaded');" src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png">
document.getElementsByTagName("img").addEventListener("load", function loaded(){
//any code you may need
});