Odpowiedzi:
Element canvas
DOM ma .height
i .width
właściwości, które odpowiadają atrybutom height="…"
i width="…"
. Ustaw je na wartości liczbowe w kodzie JavaScript, aby zmienić rozmiar płótna. Na przykład:
var canvas = document.getElementsByTagName('canvas')[0];
canvas.width = 800;
canvas.height = 600;
Pamiętaj, że ctx.clearRect( 0, 0, ctx.canvas.width, ctx.canvas.height);
spowoduje to wyczyszczenie obszaru roboczego, ale należy postępować zgodnie z tymi przeglądarkami, które nie usuwają całkowicie obszaru roboczego. Po zmianie rozmiaru konieczne będzie przerysowanie treści, które mają być wyświetlane.
Zauważ też, że wysokość i szerokość są logicznymi wymiarami płótna używanymi do rysowania i różnią się od atrybutów style.height
i style.width
CSS. Jeśli nie ustawisz atrybutów CSS, rzeczywisty rozmiar płótna zostanie użyty jako jego rozmiar wyświetlania; jeśli ustawisz atrybuty CSS i różnią się one od wymiarów obszaru roboczego, zawartość zostanie przeskalowana w przeglądarce. Na przykład:
// 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';
Zobacz ten przykład na żywo płótna powiększonego 4x.
Płótno ma 2 rozmiary, rozmiar pikseli w kanwie (jest to backststore lub drawingBuffer) i rozmiar wyświetlania. Liczbę pikseli ustawia się za pomocą atrybutów canvas. W HTML
<canvas width="400" height="300"></canvas>
Lub w JavaScript
someCanvasElement.width = 400;
someCanvasElement.height = 300;
Oddzielne są szerokość i wysokość stylu CSS płótna
W CSS
canvas { /* or some other selector */
width: 500px;
height: 400px;
}
Lub w JavaScript
canvas.style.width = "500px";
canvas.style.height = "400px";
Prawdopodobnie najlepszym sposobem na wykonanie płótna 1x1 pikseli jest ZAWSZE STOSOWANIE CSS, aby wybrać rozmiar, a następnie napisanie odrobiny kodu JavaScript, aby liczba pikseli pasowała do tego rozmiaru.
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;
}
Dlaczego to najlepszy sposób? Ponieważ działa w większości przypadków bez konieczności zmiany kodu.
Ponieważ nie ustawiłem atrybutów, jedyną rzeczą, która zmieniła się w każdej próbce jest CSS (jeśli chodzi o płótno)
Uwagi:
Dziękuję Ci bardzo! Wreszcie rozwiązałem problem rozmytych pikseli za pomocą tego kodu:
<canvas id="graph" width=326 height=240 style='width:326px;height:240px'></canvas>
Po dodaniu „półpiksela” można odblokować linie.
Najlepszy sposób to zrobić:
<canvas id="myChart" style="height: 400px; width: 100px;"></canvas>
$('#mycanvas').attr({width:400,height:300}).css({width:'800px',height:'600px'});
Jeśli chcesz, aby rozmiar wizualny był taki sam jak rozmiar w pikselach, nigdy nie ustawiaj stylów, tylko atrybuty.