Javascript 使用对象数组预加载图像
我想要写预加载图像,我被困在检查已经存在的lodead图像上:Javascript 使用对象数组预加载图像,javascript,jquery,Javascript,Jquery,我想要写预加载图像,我被困在检查已经存在的lodead图像上: var imgContainer = []; $(this).find('img').each(function() { imgContainer.push({ image: $(this) // other properties }) }); setInterval(function() { console.log(imgContainer[0].image.comple
var imgContainer = [];
$(this).find('img').each(function() {
imgContainer.push({
image: $(this)
// other properties
})
});
setInterval(function() {
console.log(imgContainer[0].image.complete); // undefined
}, 2000);
但此解决方案有效(阵列中没有对象):
为什么它不起作用?在代码中,您试图访问jQuery对象上的“complete”属性,但它没有这个属性。请尝试访问DOM元素本身的完整属性 我认为这一准则应该更有效:
var imgContainer = [];
$(this).find('img').each(function() {
imgContainer.push({
image: $(this)
// other properties
})
});
setInterval(function() {
/* imgContainer = array with objects, [0] = get first element */
/* image = jQuery collection, [0] = get dom element of the first item in the collection */
console.log(imgContainer[0].image[0].complete);
}, 2000);
在您的代码中,您试图访问jQuery对象上的“complete”属性,但它没有这个属性。请尝试访问DOM元素本身的完整属性 我认为这一准则应该更有效:
var imgContainer = [];
$(this).find('img').each(function() {
imgContainer.push({
image: $(this)
// other properties
})
});
setInterval(function() {
/* imgContainer = array with objects, [0] = get first element */
/* image = jQuery collection, [0] = get dom element of the first item in the collection */
console.log(imgContainer[0].image[0].complete);
}, 2000);
不要使用
setInterval
,检查是否加载了所有图像,只需将上述代码替换为以下代码:
(function(that){
var remains = 0;
var loadHandler = function(){
if(--remains == 0){
console.log('All images are loaded !!!');
}
};
$(that).find('img').each(function() {
if( !this.complete ){
remains++;
$(this).load(loadHandler);
}
});
})(this);
不要使用
setInterval
,检查是否加载了所有图像,只需将上述代码替换为以下代码:
(function(that){
var remains = 0;
var loadHandler = function(){
if(--remains == 0){
console.log('All images are loaded !!!');
}
};
$(that).find('img').each(function() {
if( !this.complete ){
remains++;
$(this).load(loadHandler);
}
});
})(this);
event
对于该参数名称来说,听起来是一个非常糟糕的选择。你知道你可以使用这个
并减少函数参数吗?好吧,这两行是不相同的,是否有图像
的完整属性?@ThiefMaster你是对的。我更改了它,但这仍然不能解决问题。虽然事件
在语义上不正确,但它被正确地用作传递给函数的itterative函数中的第二个参数,jQuery集合上的每个参数都是相关迭代的相关元素。作为旁注,检查是否加载了setInterval可能不是一个好办法,但现在您知道自己做错了什么,请改为实现@Engineer的解决方案;)<代码>事件对于该参数名称来说,听起来是一个非常糟糕的选择。你知道你可以使用这个
并减少函数参数吗?好吧,这两行是不相同的,是否有图像
的完整属性?@ThiefMaster你是对的。我更改了它,但这仍然不能解决问题。虽然事件
在语义上不正确,但它被正确地用作传递给函数的itterative函数中的第二个参数,jQuery集合上的每个参数都是相关迭代的相关元素。作为旁注,检查是否加载了setInterval可能不是一个好办法,但现在您知道自己做错了什么,请改为实现@Engineer的解决方案;)