Ich habe 2 Leinwände, eines verwendet HTML-Attribute width
und height
zur Größenanpassung verwendet das andere CSS:
<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 wird wie angezeigt angezeigt, compteur2 jedoch nicht. Der Inhalt wird mit JavaScript auf einer 300 x 300-Leinwand gezeichnet.
Warum gibt es einen Anzeigeunterschied?
#attr-canvas-width
) beschrieben. Das Problem ist, dass ichwidth
vorher auf das falsche geklickt habe und stattdessen zum#dom-canvas-width
Abschnitt gegangen bin . Abgelegt w3.org/Bugs/Public/show_bug.cgi?id=9469 darüber.Um das einzustellen
width
undheight
Sie benötigen, können Sie verwendenquelle
el.setAttribute('width', parseInt($el.css('width')))
hat den Trick gemacht, dankewidth: 100%;
CSS-Eigenschaft nachahmt?canvas.setAttribute('width', window.getComputedStyle(canvas, null).getPropertyValue("width"));
. Wiederholen Sie dies für die Höhe.Für
<canvas>
Elemente regeltwidth
undheight
legt das CSS die tatsächliche Größe des Canvas-Elements fest, das auf die Seite gezeichnet wird. Andererseits die HTML-Attributewidth
undheight
die Größe des Koordinatensystems oder 'Rasters', das von der Canvas-API verwendet wird.Betrachten Sie zum Beispiel Folgendes ( jsfiddle ):
Auf beiden wurde in Bezug auf die internen Koordinaten des Canvas-Elements dasselbe gezeichnet. In der zweiten Zeichenfläche ist das rote Rechteck jedoch doppelt so breit, da die gesamte Zeichenfläche nach den CSS-Regeln über einen größeren Bereich gespannt wird.
Hinweis: Wenn die CSS-Regeln für
width
und / oderheight
nicht angegeben sind, verwendet der Browser die HTML-Attribute, um das Element so zu dimensionieren, dass 1 Einheit dieser Werte 1 Pixel auf der Seite entspricht. Wenn diese Attribute nicht angegeben werden, werden standardmäßig awidth
von300
und aheight
von verwendet150
.quelle
Die Leinwand wird gedehnt, wenn Sie die Breite und Höhe in Ihrem CSS festlegen. Wenn Sie die Dimension der Zeichenfläche dynamisch bearbeiten möchten, müssen Sie JavaScript wie folgt verwenden:
quelle
canvas.setAttribute
vorher setzencanvas.getContext('2d')
, um eine Dehnung des Bildes zu vermeiden.Der Browser verwendet die CSS-Breite und -Höhe, das Canvas-Element skaliert jedoch basierend auf der Canvas-Breite und -Höhe. Lesen Sie in Javascript die Breite und Höhe des CSS und stellen Sie die Breite und Höhe der Leinwand darauf ein.
quelle
Shannimal- Korrektur
quelle
CSS legt die Breite und Höhe des Canvas-Elements so fest, dass es den Koordinatenraum beeinflusst und alles gezeichnet bleibt
Hier erfahren Sie, wie Sie die Breite und Höhe mit Vanilla JavaScript einstellen
quelle
Wenn Sie ein dynamisches Verhalten basierend auf z. B. CSS-Medienabfragen wünschen, verwenden Sie keine Attribute für die Breite und Höhe der Zeichenfläche. Verwenden Sie CSS-Regeln und weisen Sie dann vor dem Abrufen des Canvas-Rendering-Kontexts den Attributen width und height die CSS-Stile width und height zu:
quelle