JavaScript 图像加载器不起作用
JavaScript image loader isn't working
我正在尝试为我的游戏制作非常简单的图像加载器,但我找不到为什么这不起作用。这是我的代码:
window.onload = function() {
var canvas = document.getElementById('gameCanvas');
var ctx = canvas.getContext('2d');
var images = [];
function loadImages(imageFiles) {
var loadedImages = [];
for(var i = 0; i < imageFiles.length; i++) {
var image = new Image();
image.onload = function() {
alert("Loaded");
}
image.src = imageFiles[i];
loadedImages[i] = image;
}
return loadedImages;
}
function init() {
images = loadImages(['img/1.png', 'img/2.png']);
main();
}
function main() {
ctx.drawImage(images[1], 0,0);
}
init();
}
我看到的只是没有图像的空白画布。
使用
Promise
,Promise 对象用于延迟和异步计算。承诺表示尚未完成但预计在将来完成的操作。
Promise.all()
,Promise.all(iterable)
方法返回一个承诺,当可迭代参数中的所有承诺都已解析时,该承诺将解析。
function loadImages(imageFiles) {
var promiseArr = [];
for (var i = 0; i < imageFiles.length; i++) {
var eachPromise = new Promise(function(resolve, reject) {
var image = new Image();
image.onload = function() {
alert('Loaded!');
resolve();
}
image.src = imageFiles[i];
});
promiseArr.push(eachPromise);
}
return promiseArr;
}
function init() {
var AllImages = ['https://www.google.co.in/logos/doodles/2016/earth-day-2016-5741289212477440.2-5643440998055936-ror.jpg', 'https://www.google.co.in/logos/doodles/2016/earth-day-2016-5741289212477440.3-5700735861784576-ror.jpg'];
var allPromises = loadImages(AllImages);
Promise.all(allPromises).then(function() {
alert('All Loaded');
main();
});
}
function main() {}
init();
尝试替换
image.onload = function() {
alert("Loaded");
}
跟
if(i==1){
image.onload = function() {
main();
}}
加载第二个图像时,将调用您的函数然后编辑代码以满足您的需求我一会儿会编辑更多
图像是异步加载的,因此当您尝试在 main 中读取文件时,图像仍在加载。因此,您需要等到加载所有图像。
window.addEventistener("load", function() {
var canvas = document.getElementById('gameCanvas');
var ctx = canvas.getContext('2d');
var images = [];
function loadImages(imageFiles, completeFnc) {
var loadedImages = [],
loadedCnt = 0;
for(var i = 0; i < imageFiles.length; i++) {
var image = new Image();
image.onload = function() {
loadedCnt++; //increment the count
if(loadedCnt==imageFiles.length) { //if count equals total, fire off callback
completeFnc();
}
};
image.onerror = function () {
alert("There was a problem loading the images");
};
image.src = imageFiles[i];
loadedImages[i] = image;
}
return loadedImages;
}
function init() {
images = loadImages(['img/1.png', 'img/2.png'], main);
}
function main() {
ctx.drawImage(images[1], 0,0);
}
init();
});
这应该更好用
var images = ['img/1.png', 'img/2.png'], loadedImages = [], canvas,ctx, idx=0:
function main() {
ctx.drawImage(images[1], 0, 0);
}
function loadImages() {
if (loadedImages.length == images.length) {
main();
return;
}
var image = new Image();
image.onload = function() {
loadedImages.push(this);
loadImages();
idx++;
}
image.src = imageFiles[idx];
}
function init() {
canvas = document.getElementById('gameCanvas');
ctx = canvas.getContext('2d');
loadImages();
}
window.onload = function() {
init();
}
您需要将项目推送到数组中。取代
loadedImages[i] = image;
跟
loadedImages.push(image);
相关文章:
- JavaScript链接在点击时不起作用;函数在页面加载时工作
- Jquery(多读/少读)在从数据库加载整个数据后不起作用
- 加载后的页面与ajax表单提交不起作用
- jQuery加载完成事件不起作用
- $(select).selectmenu('打开')不'如果使用ajax加载页面,则不起作用
- 使用requireJS的jqGrid-网格加载但不起作用
- 加载自定义类在ExtJs中不起作用
- jQuery Mobile pageinit在第一次加载页面上不起作用(可复制)
- jquery ias插件不适用于我的网站,加载更多项目不起作用
- getUserMedia()在使用Ajax加载时不起作用
- 同一页面上的 mysql 中的 Ajax 加载表不起作用
- 按钮在第一次成功的 ajax 数据加载后不起作用
- 谷歌将部分页面加载后自动完成不起作用 ASP.Net MVC
- 使用 jQuery .load() 加载的内容不起作用
- HTML 不加载 CSS ,刷新后一切正常.同样在移动设备上,它在首次加载时不起作用
- ng-view 中的脚本在从文件引用时不起作用(JQuery 在角度之前加载)
- JavaScript 图像加载器不起作用
- 淡出加载然后淡入不起作用
- 使用 jquery 在我的网站中加载其他网页不起作用
- 在加载javascript之前让页面加载的代码不起作用