Я работаю над небольшим количеством JavaScript для отображения данных на <canvas
>. Точки данных помечены одним из нескольких разных (маленьких) файлов изображений. Я пытаюсь заставить метод заговора ждать, пока все изображения не будут загружены. Моя лучшая попытка на данный момент такова:
var icon = {
left : {
air : new Image(),
bone : new Image(),
},
right : {
air: new Image(),
bone : new Image(),
},
};
icon.left.air.src = option.imgPath + 'left.air.png';
icon.right.air.src = option.imgPath + 'right.air.png';
icon.left.bone.src = option.imgPath + 'left.bone.png';
icon.right.bone.src = option.imgPath + 'right.bone.png';
function main() {
Canvas.draw();
// Make sure our image icons are loaded before we try to plot
$(icon.left.air).load(function() {
$(icon.right.air).load(function() {
$(icon.left.bone).load(function() {
$(icon.right.bone).load(function() {
Data.plot();
});
});
});
});
}
Это работает как ожидалось в большинстве случаев времени. В некоторых случаях произойдет сбой, и данные не будут отображаться. Вставка нескольких операторов console.log () показывает, что сценарий автоматически перестанет работать через серию операторов .load (), хотя следующий код будет выполнен.
У меня следующие вопросы: правильно ли я подхожу к этому? Есть ли способ прикрепить событие к моему значку объекта, который будет срабатывать после загрузки всех изображений внутри?
Это плагин jquery, поэтому очевидно, что решения на основе jquery так же приемлемы, как и ванильный javascript.