下面代码运行时为什么只能把最后一张图片载入?
这里的onload方法是异步的吗?在循环完成了之后才运行?
var name = names[i]
var img = new image()
var 改成let就好了。
var images = {
ball: 'images/block.png',
block: 'images/block.png',
paddle: 'images/paddle.png'
}
//预先载入所有图片
var names = Object.key(images)
for( var i = 0; i<images.length; ++i ){
var name = names[i]
var path = images[name]
var img = new image()
img.src = path
img.onload = function(){
//存入g.images中
g.images[name] = img
//所有图片载入成功后,调用run
loads.push(1)
if( loads.length == images.length ){
g.run()
}
}
}
下面这段代码感觉和上面的解决方案很相似,查了下图片预加载,对网上说“onload需要图片的加载完全,没有图片也就没有onload”不是很清楚,这里的图片加载完全什么意思?onload的异步具体是什么情况啊?
for( let i=1; i<=10; ++i ){
setTimeout( console.log(i),0 )
}
onload 事件在图片加载完成后立即执行,是异步回调
这执行的的时候name已经是最后一个值了