Javascript JS函数执行有问题
我对JS函数的执行有点问题。 这就是代码:Javascript JS函数执行有问题,javascript,Javascript,我对JS函数的执行有点问题。 这就是代码: function CaricaImmagini() { //First for loop for (i = 0; i < tiles.length; i++) { tileGraphics[i] = new Image(); tileGraphics[i].src = tiles[i]; tileGraphics[i].onload = function()
function CaricaImmagini() {
//First for loop
for (i = 0; i < tiles.length; i++)
{
tileGraphics[i] = new Image();
tileGraphics[i].src = tiles[i];
tileGraphics[i].onload = function()
{
img_loaded++;
pda.SetPerc(Math.round((70/(tiles.length + img_nec.length))*img_loaded));
pda.CounterFill();
}
}
//Second for loop
for (i=0; i < img_nec.length; i++)
{
imgs[i] = new Image();
imgs[i].src = img_nec[i];
imgs[i].onload = function()
{
img_loaded++;
pda.SetPerc(Math.round((70/(tiles.length + img_nec.length))*img_loaded));
pda.CounterFill();
}
}
//Change % in Canvas
pda.SetPerc(75);
pda.CounterFill();
}
maimmagini()函数{
//循环优先
对于(i=0;i
问题在于,“画布中的更改百分比”注释下的函数是在for循环之前执行的。
因此在画布中我看到了第一个75%(setperc函数呈现%加载),
然后我看到这些计算的输出[数学圆((70/(tiles.length+img_nec.length))*img_loaded)]。
我怎样才能解决这个问题
在这方面,发生这种情况是因为
onload
事件会在稍后触发,只有在这之后才会执行您定义的回调。因此,函数末尾的行首先执行是正常的——这不会有任何不同
因此,只需将0%放在那里:
//Change % in Canvas
pda.SetPerc(0);
pda.CounterFill();
然而,如果您希望在加载完所有代码后执行代码,那么请定义一个回调。你可以这样做:
function CaricaImmagini(callback) { // notice the parameter that must be passed
// ...
tileGraphics[i].onload = function()
{
// ...
if (img_loaded == tiles.length + img_nec.length && callback) callback();
}
// ...
imgs[i].onload = function()
{
// ...
if (img_loaded == tiles.length + img_nec.length && callback) callback();
}
}
然后通过将回调函数传递给该函数来调用该函数:
CaricaImmagini(function () {
// all is loaded now
//Change % in Canvas
pda.SetPerc(75);
pda.CounterFill();
});
以下是一种模式,可能会对您有所帮助:
var nr = 100;
var imgs = [];
var some_sources = ... // list of 100 sources
var imgs_loaded = 0;
for(var i = 0; i < nr; i++) {
imgs[i] = new Image();
imgs[i].src = some_sources[i];
imgs[i].onload = function() {
imgs_loaded++;
if (imgs_loaded === nr) { // when all pictures are loaded
doSomethingElse();
}
}
}
var nr=100;
var-imgs=[];
var some_sources=…//100个来源清单
var imgs_加载=0;
对于(变量i=0;i
因此,让我们异步加载所有图片,在每次图像到达时检查是否已加载所有图像。如果在加载最后一张图片后最终为真,则调用另一个函数。实际for循环在您提到的注释之前执行,但是在循环内部应用异步回调,并且每当加载图片时都会执行,在函数的同步处理完成之后,你希望结果是什么样的?加载所有这些图像时,您希望
setPerc()?根据您当前的数学,您似乎不希望它从0变为100。加载这些图像时,您希望起始值和最终值是多少?谢谢您的帮助,代码运行得非常完美,但我需要两个图像数组。所以再次感谢你的回答,希望能帮助别人。尊敬的,特别感谢您的帮助,代码非常适合我的项目。再次感谢您和所有其他帮助我的用户。问候,特别的