2013-08-06 2 views
0

Рисует маленький белый прямоугольник, но не изображение, почему это так и как его исправить.не рисует с onload()

var imageReady = false; 
img = new Image(); 
img.src = 'player.png'; 
img.onload = loaded(); 

function loaded() { 
imageReady = true; 
redraw(); 
} 

function redraw() { 
    //ctx.fillStyle = "blue"; 
    //ctx.fillRect(0, 0, 500, 500); 

    if (imageReady) { 
     ctx.fillStyle = "white"; 
     ctx.fillRect(10,10,10,10); 
     ctx.drawImage(img, 5, 5); 
    } 
} 
+0

Вы можете поделиться своим кодом? Im, предполагающий, что вы меняете imageRead во время загрузки img. Верный? – wendelbsilva

+0

добавлено еще код – Myrez

ответ

1

Вы передаете loaded() в onload. Попробуйте пройти img.onload = loaded;

Нравится this (JSFiddle Here).

var imageReady = false; 
img = new Image(); 
img.onload = loaded; 

И еще одно, я предлагаю вам установить onload перед src. Я не знаю, как браузеры загружают внутренне, но MAYBE, он может загружать слишком быстро изображение, и вы отправите нагрузку после загрузки. Это возможно? не знаю.

Редактировать

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

+0

спасибо. Но почему вы должны передать это следующим образом: загружено, а не так: loaded(): – Myrez

+0

Его функция обратного вызова. Когда вы выполняете '= loaded()', вы вызываете загруженную функцию и устанавливаете ее возврат в 'onload'. Но вы хотите дать функцию img, чтобы она могла выполняться, когда изображение готово. – wendelbsilva

0

Вы вызываете свою функцию loaded() и присваиваете img.onload возвращаемому значению этой функции вместо назначения функции img.onload вашей функции. Попробуйте изменить задание:

img.onload = loaded; 

Кроме того, я не уверен, что я вижу смысл вашего imageLoaded флага.

Смежные вопросы