Mam 2 płótnach używa atrybutów HTML width
i height
wielkości to, CSS innych zastosowań:
<canvas id="compteur1" width="300" height="300" onmousedown="compteurClick(this.id);"></canvas>
<canvas id="compteur2" style="width: 300px; height: 300px;" onmousedown="compteurClick(this.id);"></canvas>
Compteur1 wyświetla się tak, jak powinien, ale nie compteur2. Treść jest rysowana za pomocą JavaScript na kanwie 300 x 300.
Dlaczego występuje różnica w wyświetlaniu?
#attr-canvas-width
). Problem polega na tym, że wcześniej kliknąłem źlewidth
i poszedłem do#dom-canvas-width
sekcji. Złożony w3.org/Bugs/Public/show_bug.cgi?id=9469 na ten temat.Aby ustawić
width
iheight
potrzebujesz, możesz użyćźródło
el.setAttribute('width', parseInt($el.css('width')))
width: 100%;
właściwość css?canvas.setAttribute('width', window.getComputedStyle(canvas, null).getPropertyValue("width"));
. Powtórz dla wysokości.W przypadku
<canvas>
elementów CSS regulujewidth
iheight
ustawia rzeczywisty rozmiar elementu canvas, który zostanie narysowany na stronie. Z drugiej strony atrybuty HTMLwidth
iheight
ustawia rozmiar układu współrzędnych lub „siatki”, z której będzie korzystać interfejs API canvas.Rozważmy na przykład to ( jsfiddle ):
Oba mają narysowane to samo w stosunku do wewnętrznych współrzędnych elementu canvas. Ale w drugim kanwie czerwony prostokąt będzie dwa razy szerszy, ponieważ kanwa jako całość jest rozciągana na większym obszarze zgodnie z regułami CSS.
Uwaga: Jeśli reguły CSS dla
width
i / lubheight
nie zostaną określone, przeglądarka użyje atrybutów HTML, aby zmienić rozmiar elementu, tak aby 1 jednostka tych wartości na stronie wynosiła 1 piks. Jeśli te atrybuty nie są wymienione, a następnie będą one domyślniewidth
of300
aheight
od150
.źródło
Płótno zostanie rozciągnięte, jeśli ustawisz szerokość i wysokość w swoim CSS. Jeśli chcesz dynamicznie manipulować wymiarem płótna, musisz użyć JavaScript w następujący sposób:
źródło
canvas.setAttribute
wcześniej,canvas.getContext('2d')
aby uniknąć rozciągania obrazu.Przeglądarka używa szerokości i wysokości css, ale element canvas jest skalowany w oparciu o szerokość i wysokość canvas. W javascript przeczytaj szerokość i wysokość css i ustaw do tego szerokość i wysokość płótna.
źródło
Korekta shannimal
źródło
CSS ustawia szerokość i wysokość elementu canvas, więc wpływa na przestrzeń współrzędnych, pozostawiając wszystko rysowane pochylone
Oto mój sposób na ustawienie szerokości i wysokości za pomocą Vanilla JavaScript
źródło
Jeśli chcesz dynamicznego zachowania opartego np. Na zapytaniach o media CSS, nie używaj atrybutów szerokości i wysokości obszaru roboczego. Użyj reguł CSS, a następnie, przed uzyskaniem kontekstu renderowania na płótnie, przypisz atrybutom szerokość i wysokość style szerokości i wysokości CSS:
źródło