2011-12-01 13 views
10

Podążam za samouczkiem dotyczącym importowania i wyświetlania obrazów na płótnie HTML5. Wszystko działa dobrze, dopóki nie spróbuję zmienić samego obrazu. Na przykład, będę mieć żółte kółko jako mój obraz, a skrypt działa dobrze. Ale jeśli sam otworzę obraz w programie Paint i zmieniłem okrąg na czerwony, a odświeżę stronę, kółko nie pojawi się, dopóki nie kliknę lub nie odświeżę po raz drugi ręcznie. Oto fragment kodu używam:Obraz narysowany na płótnie HTML5 nie wyświetla się poprawnie przy pierwszym załadowaniu.

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

buforowanie przeglądarki, wymuszanie przeładowania pamięci podręcznej –

+1

To nie jest buforowanie przeglądarki, po prostu nie czeka na zakończenie ładowania nowego obrazu. –

Odpowiedz

17

Krąg prawdopodobnie nie wyświetlają się, ponieważ jesteś rysowanie go przed obraz jest załadowany. Zmień ostatnie zdanie na:

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

Powodem, dla którego działa po odświeżeniu, jest to, że obraz jest teraz wstępnie załadowany do pamięci podręcznej.

Zawsze chcesz poczekać na załadowanie wszystkich obrazów, zanim spróbujesz je narysować, albo nic nie pojawi się na płótnie.

+5

Po prostu, 'topMap.onload = drawMap;'. Zauważ, że [powinieneś ustawić 'onload' _before_ set' src'] (http://stackoverflow.com/questions/4776670/should-setting-an-image-src-to-dataurl-be-available-mediately) . A więc: 'var topMap = new Image; topMap.onload = drawMap; topMap.src = "topMap.png"; ' – Phrogz

+0

Dzięki, rozwiązałeś i wyjaśniłeś mój problem :) – Jarek

+0

Upewnij się, że słuchasz też rad Phrogza! –

Powiązane problemy