onLoad返回0作为宽度和高度
onLoad return 0 as width and height
我正在尝试构建一个简单的图像预加载,它创建一个图像元素并存储它,这样我以后就可以立即使用它。
我已经设置了这个相当简单的singleton类,我可以在任何地方使用它:
var Preloader = (function() {
var instance = null;
function PrivateConstructor() {
var total = 0;
var onComplete = null;
this.loadImages = function(images, completeHandler) {
total = images.length;
onComplete = completeHandler;
for(var i = 0; i < images.length; i++) {
var img = new Image();
img.onLoad = this.onLoad(img);
img.src = images[i];
}
}
this.onLoad = function(img) {
console.log(img);
console.log(img.width);
console.log(img.height)
total--;
if(total == 0) onComplete();
}
}
return new function() {
this.getInstance = function() {
if (instance == null) {
instance = new PrivateConstructor();
instance.constructor = null;
}
return instance;
}
}
})()
现在,当我使用这个并检查我的宽度和高度时,它仍然是0
Preloader.getInstance().loadImages(['https://si0.twimg.com/profile_images/188302352/nasalogo_twitter_bigger.jpg'], function() {
console.log('images loaded');
});
// output
<img src="https://si0.twimg.com/profile_images/188302352/nasalogo_twitter_bigger.jpg">
0
0
在行中:
img.onLoad = this.onLoad(img);
您错误地立即调用this.onLoad
,而不是将该函数作为加载处理程序传递。这样,您的代码就完成了,而无需等待实际加载图像。
您也有错误的情况-处理程序属性应该被称为img.onload
,而不是img.onLoad
。
请注意,调用.onload
事件处理程序时,会将图像作为其this
上下文变量,而不是将其作为参数传递,因此您将在该事件处理程序中使用this
(表示图像,而不是您的类)。
另一种选择是写:
var self = this;
img.onload = function() {
self.onLoad(this);
}
相关文章:
- 尝试使用多个Twenty20实例,但有些实例的高度返回为0,并且不显示
- Javascript返回内容/字符串;不适合UIWebView的给定宽度和高度
- 黑莓网站:窗口大小(窗口高度)在黑莓模拟器中返回不正确的值
- Jquery高度返回错误值
- Image.onload 函数为高度和宽度返回零
- Android Webview onLoad返回错误的高度
- .height() 以百分比返回高度,如何以像素为单位获取它
- jquery 高度返回 0
- 为什么jQuery为元素高度返回null
- 我设置的高度和宽度值与返回的值不一致的原因是什么
- 图像高度始终返回为0
- onLoad返回0作为宽度和高度
- 文档's总高度函数's的返回值在浏览器刷新时发生更改(F5)
- Jquery偶尔会在图像上返回零高度和零宽度
- 为什么不't此代码返回完整的文档高度
- jquery最大高度和最大宽度返回错误的值
- FabricJS toDataURL倍增器没有返回正确的高度/缩放正确
- Javascript在Firefox for Android中随机返回不一致的高度
- 图像宽度和高度返回为0
- jQuery宽度()和高度()返回0的img元素