2011-12-01 15 views
10

Sto seguendo un tutorial sull'importazione e la visualizzazione di immagini su un canvas HTML5. Tutto funziona bene, finché non provo a cambiare l'immagine stessa. Per esempio, avrò un cerchio giallo come immagine mia, e lo script funziona bene. Ma se apro l'immagine stessa in Paint e cambi il cerchio in rosso, e aggiorno la pagina, il cerchio non verrà visualizzato fino a quando non clicco o aggiorno di nuovo una seconda volta manualmente. Ecco il frammento di codice che sto utilizzando:Immagine disegnata su HTML5 Canvas non viene visualizzata correttamente al primo caricamento

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

cache del browser, forza una cache ricarica –

+1

Non è il caching del browser, non aspetta solo il nuovo caricamento dell'immagine per finire –

risposta

17

Il cerchio non è probabilmente rivelando perché si sta disegnando prima l'immagine viene caricata. Cambia la tua ultima dichiarazione a:

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

Il motivo per cui funziona dopo aver colpito aggiornamento è perché l'immagine è ormai pre-caricato nella cache.

Si desidera sempre attendere il caricamento delle immagini prima di tentare di disegnarle oppure non verrà visualizzato nulla sulla tela.

+5

Più semplicemente, 'topMap.onload = drawMap;'. Nota che [dovresti impostare 'onload' _before_ hai impostato' src'] (http://stackoverflow.com/questions/4776670/should-setting-an-image-src-to-dataurl-be-available-immediately) . Quindi: 'var topMap = nuova immagine; topMap.onload = drawMap; topMap.src = "topMap.png"; ' – Phrogz

+0

Grazie, risolto e spiegato il mio problema :) – Jarek

+0

Assicurati di ascoltare anche il consiglio di Phrogz! –

Problemi correlati