2014-09-28 4 views
0

Я пытаюсь создать объекты изображения, по одному для каждого из моих игровых активов .png. Создатель изображений makeImage() создает правильный объект, и он имеет правильный путь как свой собственный объект .src, но он не загружает изображение. img.isReady остается false.Javascript: Объект изображения, похоже, не загружает изображение

Я начинаю как в JavaScript, так и в кодировке, и мне интересно, есть ли какое-то поведение функций или объектов, которые я пропускаю.

var assets = {}; 

function makeImage(path) { 
    var img = new Image(); 
    img.isReady = false; 
    img.onload = function() { 
     img.isReady = true; 
    }; 
    img.src = path; 
    return img; 
} 

assets.tileset = makeImage('images/tileset.png'); 
+1

Как и когда вы проверяете 'isReady' недвижимость? Какие-либо ошибки в консоли разработчика? –

+0

'isReady' Я буду использовать позже, когда рендеринг. Я не использую консоль разработчика, но я просто попробовал, и ничего не выделялось. Только то, что кажется несвязанным комментарием к «windows.controllers», является устаревшим. – NebulaSpex

ответ

2

Рабочая Fiddle: http://jsfiddle.net/anjrLy40/1/

Вопрос заключается в том, что вы вернув изображение img перед изображением нагрузок, что является асинхронным процессом. Вы должны вложить возврат в функцию onload. Попробуйте это:

function createImg(path, nodeID) { 

    var img = new Image(), 
     isLoaded = false; 

    img.onload = function() { 

     document.getElementById(nodeID).appendChild(img); 

     isLoaded = true; 

     alert(isLoaded); 
    }; 

    img.src = path; 
}; 

Функция создается и прикрепляется к IMG object и запускается, как только вы установите path и этот процесс завершается. Вы увидите набор src до того, как функция будет создана в кодах некоторых людей, но это не самый предпочтительный метод.

Ссылка: http://fragged.org/preloading-images-using-javascript-the-right-way-and-without-frameworks_744.html

+0

Это решило это. Большое спасибо. Не могли бы вы рассказать об асинхронном процессе? Что делает установку пути к исходному изображению отличным от других значений? – NebulaSpex

+0

JavaScript - это однопоточный язык. Загрузка изображения выполняется браузером в любое время, когда вы устанавливаете 'src', даже если изображение не прикреплено к DOM. Это иногда называют «ленивой загрузкой». Поэтому, когда вы устанавливаете источник изображения, хотя вы просто присоединяете «строку» к объекту, браузер фактически загружает изображение, что может занять некоторое время в зависимости от размера изображения. Таким образом, браузер делает это асинхронно, чтобы позволить другим процессам работать одновременно. Вы должны заглянуть в ajax и обещать. Они окажутся очень полезными, я думаю, ура! – bencripps

+0

Еще раз спасибо. Сделаю. – NebulaSpex