2010-07-28 20 views
6

Sto provando a scrivere del testo su un elemento canvas, ma sembra che le opzioni dei caratteri che ho inserito siano completamente ignorate. A prescindere da ciò a cui li cambio, tutto viene fuori lo stesso, che ritengo essere il 10px sans-serif predefinito. Ecco cosa ho (questa funzione funziona a carico)HTML 5 carattere canvas ignorato

function start() 
{ 
    canvas = document.getElementById('c'); 
    ctx = canvas.getContext('2d'); 
    ctx.fillStyle = "white"; 
    ctx.font = "12px monospace"; 
    ctx.textBaseline = "top"; 
} 

Non funziona in Firefox o Chrome.

+1

Ciò accade anche se si passa una stringa di formato non valida, ad esempio '" 12 px monospace "' con uno spazio aggiuntivo. – Noumenon

risposta

5

Come si è visto, il cambiamento ctx.font deve essere usato nella stessa funzione che sta facendo il fillText()

Questo lo fa funzionare come un fascino.

EDIT

Come richtaur menzionato nel suo commento, questa risposta è sbagliata. Il tuo contesto deve essere salvato e ripristinato usando ctx.save() e ctx.restore() come attualmente viene ripristinato quando si chiama di nuovo canvas.getContext ('2d').

+0

Sospetto che ogni volta che riacquisti il ​​contesto grafico con canvas.getContext ('2d') ottieni un nuovo contesto che viene reimpostato sul font predefinito. Questo ha senso, perché stai eseguendo operazioni di disegno e probabilmente eseguirai il rendering di tutti i tipi di testo in tutti i diversi tipi di carattere, e visualizzali in sequenza mentre esegui il rendering di ciascun fotogramma ... quindi (re) l'impostazione del carattere per ogni nuovo contesto rende senso. – Triynko

+0

> Come risulta, il cambiamento ctx.font deve essere utilizzato nella stessa funzione che sta facendo il fillText() <- Non è così che funziona. Le impostazioni sono globali per quel contesto, quindi probabilmente sta diventando sovrascritto nella tua altra funzione. Dovresti fare come 'ctx.save()' quindi 'ctx.restore()' per salvare lo stato del tuo contesto. Vedi: https://developer.mozilla.org/en/Drawing_text_using_a_canvas – richtaur

8

Questo può accadere anche se si ripristina la dimensione della tela. Almeno, ho visto questo in Chrome 23 oggi.

context.font = 'bold 20px arial'; 
canvas.width = 100; 
canvas.height = 100; 
console.log(context.font); // gives '10px sans-serif' 
+1

Grande consiglio! Ho passato per sempre su questo. Perché le proprietà come quelle vengono ripristinate quando la dimensione cambia? Sembra assurdo per me. – AdrianCooney