Risposte:
L' canvas
elemento DOM ha .height
e .width
proprietà che corrispondono agli attributi height="…"
e width="…"
. Impostali su valori numerici nel codice JavaScript per ridimensionare la tela. Per esempio:
var canvas = document.getElementsByTagName('canvas')[0];
canvas.width = 800;
canvas.height = 600;
Si noti che questo cancella la tela, anche se è necessario seguire ctx.clearRect( 0, 0, ctx.canvas.width, ctx.canvas.height);
per gestire quei browser che non cancellano completamente la tela. Dovrai ridisegnare tutti i contenuti che volevi visualizzare dopo la modifica delle dimensioni.
Si noti inoltre che l'altezza e la larghezza sono le dimensioni logiche dell'area di disegno utilizzate per il disegno e sono diverse dagli attributi CSS style.height
e style.width
. Se non imposti gli attributi CSS, la dimensione intrinseca dell'area di disegno verrà utilizzata come dimensione di visualizzazione; se imposti gli attributi CSS e differiscono dalle dimensioni della tela, i tuoi contenuti verranno ridimensionati nel browser. Per esempio:
// Make a canvas that has a blurry pixelated zoom-in
// with each canvas pixel drawn showing as roughly 2x2 on screen
canvas.width = 400;
canvas.height = 300;
canvas.style.width = '800px';
canvas.style.height = '600px';
Guarda questo esempio dal vivo di una tela ingrandita di 4x.
Una tela ha 2 dimensioni, la dimensione dei pixel nella tela (è backingstore o drawingBuffer) e la dimensione di visualizzazione. Il numero di pixel viene impostato utilizzando gli attributi canvas. In HTML
<canvas width="400" height="300"></canvas>
O in JavaScript
someCanvasElement.width = 400;
someCanvasElement.height = 300;
A parte ciò ci sono la larghezza e l'altezza dello stile CSS della tela
Nel CSS
canvas { /* or some other selector */
width: 500px;
height: 400px;
}
O in JavaScript
canvas.style.width = "500px";
canvas.style.height = "400px";
Il modo migliore per creare una tela 1x1 pixel è UTILIZZARE SEMPRE i CSS per scegliere la dimensione, quindi scrivere un po 'di JavaScript per far corrispondere il numero di pixel a quella dimensione.
function resizeCanvasToDisplaySize(canvas) {
// look up the size the canvas is being displayed
const width = canvas.clientWidth;
const height = canvas.clientHeight;
// If it's resolution does not match change it
if (canvas.width !== width || canvas.height !== height) {
canvas.width = width;
canvas.height = height;
return true;
}
return false;
}
Perché è questo il modo migliore? Perché funziona nella maggior parte dei casi senza dover modificare alcun codice.
Perché non ho impostato gli attributi, l'unica cosa che è cambiata in ogni campione è il CSS (per quanto riguarda la tela)
Appunti:
Grazie mille! Alla fine ho risolto il problema dei pixel sfocati con questo codice:
<canvas id="graph" width=326 height=240 style='width:326px;height:240px'></canvas>
Con l'aggiunta del "mezzo pixel" si risolvono le linee.
Il modo migliore per farlo:
<canvas id="myChart" style="height: 400px; width: 100px;"></canvas>
$('#mycanvas').attr({width:400,height:300}).css({width:'800px',height:'600px'});
se si desidera che la dimensione visiva sia uguale alla dimensione in pixel, non impostare mai gli stili, ma solo gli attributi.