2011-12-01 19 views
10

Estoy siguiendo un tutorial sobre la importación y visualización de imágenes en un lienzo HTML5. Todo funciona bien, hasta que trato de cambiar la imagen en sí. Por ejemplo, tendré un círculo amarillo como mi imagen y la secuencia de comandos funciona bien. Pero si abro la imagen en Paint y cambio el círculo a rojo, y actualizo la página, el círculo no aparecerá hasta que haga clic o actualice de nuevo por segunda vez manualmente. Aquí está el fragmento de código que estoy usando:Imagen dibujada en HTML5 El lienzo no se muestra correctamente en la primera carga

var topMap = new Image(); 
topMap.src = "topMap.png"; 

function drawMap() { 
    context.clearRect(0, 0, WIDTH, HEIGHT); 
    context.drawImage(topMap, 0, 0); 
} 

function init() { 
    drawMap(); 
} 

init(); 
+1

caché del navegador, fuerza una recarga de caché –

+1

No es el almacenamiento en caché del navegador, simplemente no está esperando que la nueva imagen cargue para terminar –

Respuesta

17

El círculo es, probablemente, no se presentó debido a que está dibujando antes de que se cargue la imagen. Cambiar su última declaración a:

// Lets not init until the image is actually done loading 
topMap.onload = function() { 
    init(); 
} 

La razón funciona después de golpear actualización es porque la imagen ya está pre-cargado en la memoria caché.

Siempre desea esperar a que se carguen las imágenes antes de intentar dibujarlas o no aparecerá nada en el lienzo.

+5

Más simplemente, 'topMap.onload = drawMap;'. Tenga en cuenta que [debe establecer 'onload' _antes de que configure 'src'] (http://stackoverflow.com/questions/4776670/should-setting-an-image-src-to-dataurl-be-available-immediately) . Entonces: 'var topMap = new Image; topMap.onload = drawMap; topMap.src = "topMap.png"; ' – Phrogz

+0

Gracias, solucioné y expliqué mi problema :) – Jarek

+0

¡Asegúrese de seguir los consejos de Phrogz aquí también! –

Cuestiones relacionadas