2011-11-20 13 views
6

State curiosando su StackOverflow e Google per i modi di risolvere questo problema, ma non ho avuto fortuna con una soluzione.HTML5 Canvas filltext e font-face

Che cosa sta succedendo è il mio font font-face non si carica al momento giusto. Quello che sto succedendo è che ho una tela html5 e javascript dove disegno alcune semplici cerchie con il testo di riempimento al loro interno. Ora i cerchi vengono disegnati, ma il testo in sé è sbagliato.

Suppongo che il motivo sia dato dal fatto che il carattere è stato caricato per ultimo e seleziona solo il carattere predefinito.

Ora la mia domanda è ... c'è un modo per ritardare il prelievo degli oggetti di disegno finché il carattere non viene caricato? In questo modo il font sarà pronto per l'uso e assegnerà i caratteri giusti agli oggetti canvas.

Devo sottolineare che ho un file index.php che include il mio altro file php in cui javascript e canvas vengono effettivamente disegnati.

+0

State provando molti metodi diversi per farlo funzionare, ma sembra che il carattere si stia ancora caricando alla fine di quando la pagina si carica. Quindi il testo di riempimento della tela non viene visualizzato con il carattere corretto. qualche idea? – Anks

risposta

4

Utilizzare this trick e associare un evento onerror a un elemento Image.

Demo qui: http://jsfiddle.net/g6LyK/ - funziona sull'ultimo Chrome.

var canvas = document.getElementById('canvas'); 
var ctx = canvas.getContext('2d'); 

var link = document.createElement('link'); 
link.rel = 'stylesheet'; 
link.type = 'text/css'; 
link.href = 'http://fonts.googleapis.com/css?family=Vast+Shadow'; 
document.getElementsByTagName('head')[0].appendChild(link); 

// Trick from https://stackoverflow.com/questions/2635814/ 
var image = new Image; 
image.src = link.href; 
image.onerror = function() { 
    ctx.font = '50px "Vast Shadow"'; 
    ctx.textBaseline = 'top'; 
    ctx.fillText('Hello!', 20, 10); 
}; 
+0

Funziona, ma il modo in cui ho il mio javascript che genera il contenuto della tela non riesco a farlo funzionare nel modo in cui ne ho bisogno. Ho una matrice con più stringhe e ho bisogno di scriverle su una nuova immagine sulla tela. Sta andando attraverso un ciclo for. Eventuali suggerimenti? – Anks

+0

Finché il codice viene eseguito con la callback 'image.onerror' dovresti essere in grado di usare il carattere. Prova a mettere il tuo loop lì dentro. –