Compteur1 wird so angezeigt, wie es sollte, aber nicht compteur2. Der Inhalt wird mit JavaScript auf einer 300×300-Leinwand gezeichnet.
Warum gibt es einen Anzeigeunterschied?
SamB
Es scheint, dass die width Und height -Attribute bestimmen die Breite oder Höhe des Koordinatensystems der Leinwand, während die CSS-Eigenschaften nur die Größe der Box bestimmen, in der sie angezeigt wird.
Der canvas element hat zwei Attribute, um die Größe der Bitmap des Elements zu steuern: width Und height. Diese Attribute müssen, wenn angegeben, Werte haben, die sind gültige nicht negative ganze Zahlen. Der Regeln zum Analysieren nicht negativer Ganzzahlen müssen verwendet werden, um ihre numerischen Werte zu erhalten. Wenn ein Attribut fehlt oder die Analyse seines Werts einen Fehler zurückgibt, muss stattdessen der Standardwert verwendet werden. Der width Attribut standardmäßig auf 300 und die height Attribut standardmäßig auf 150.
in der Tat … Ich dachte immer, direkte Attribute wie “Breite” und “Höhe” seien in neueren HTML-Versionen veraltet.
Eine API zu haben, die ähnlich aussieht, sich aber grundlegend von einer anderen unterscheidet (CSS-Breite, Höhe). Wow.
– Ben Aston
28. August 2017 um 9:22 Uhr
Es ist wichtig, diese für Zeiten zu unterscheiden, in denen das interne Koordinatensystem anders sein soll. (z. B. für Retina-Displays oder Spiele im 8-Bit-Stil)
– Samie Bencherif
13. November 2018 um 6:13 Uhr
Das war wirklich verwirrend. Wir haben versucht, die Breite und die Höhe im CSS festzulegen. Wir brauchten 2 Tage haarsträubenden Stress, um diese 2 unterschiedlichen Interpretationen von Breite und Höhe herauszufinden. Einfach wow…
– NME New Media Entertainment
7. Mai 2020 um 22:40 Uhr
fermar
Zum Einstellen der width Und height Auf einer Leinwand können Sie Folgendes verwenden:
+1 el.setAttribute('width', parseInt($el.css('width'))) hat es geschafft, danke
– Shanimal
7. November 2012 um 16:53 Uhr
Was ist, wenn ich möchte, dass meine Leinwand eine relative Größe hat? Das heißt, wie man a nachahmt width: 100%; CSS-Eigenschaft?
– Maxbester
7. März 2013 um 8:00 Uhr
Tolle Antwort, aber vergessen Sie nicht, auch canvasObject.setAttribute(‘height’, ‘123’) hinzuzufügen!
– Tom Wells
15. März 2013 um 14:46 Uhr
Ich glaube nicht, dass Sie .setAttribute() verwenden müssen. Ich habe immer die Eigenschaften .width und .height verwendet
– Zorgatone
21. Juni 2017 um 14:42 Uhr
Verwendung einer einfachen JavaScript-Version (ohne jQuery). getComputedStyle: canvas.setAttribute('width', window.getComputedStyle(canvas, null).getPropertyValue("width"));. Wiederholen Sie dies für die Höhe.
– Ben J
14. Juli 2017 um 10:17 Uhr
Ben Jackson
Für <canvas> Elemente, die CSS-Regeln für width Und height Legen Sie die tatsächliche Größe des Canvas-Elements fest, das auf die Seite gezeichnet wird. Andererseits sind die HTML-Attribute von width Und height Legen Sie die Größe des Koordinatensystems oder „Rasters“ fest, das die Canvas-API verwenden wird.
Auf beiden wurde das Gleiche relativ zu den internen Koordinaten des Canvas-Elements gezeichnet. Aber im zweiten Canvas ist das rote Rechteck doppelt so breit, weil der Canvas als Ganzes durch die CSS-Regeln über eine größere Fläche gestreckt wird.
Hinweis: Wenn die CSS-Regeln für width und/oder height 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 sind, werden sie standardmäßig auf a gesetzt width von 300 und ein height von 150.
Blauer Regen
Die Leinwand wird gedehnt, wenn Sie die Breite und Höhe in Ihrem CSS festlegen. Wenn Sie die Dimension der Leinwand dynamisch manipulieren möchten, müssen Sie JavaScript wie folgt verwenden:
Der Browser verwendet die CSS-Breite und -Höhe, aber das Canvas-Element wird basierend auf der Canvas-Breite und -Höhe skaliert. Lesen Sie in Javascript die CSS-Breite und -Höhe und stellen Sie die Breite und Höhe der Leinwand darauf ein.
var myCanvas = $('#TheMainCanvas');
myCanvas[0].width = myCanvas.width();
myCanvas[0].height = myCanvas.height();
XaviGuardia
Shannimal Korrektur
var el = $('#mycanvas');
el.attr('width', parseInt(el.css('width')))
el.attr('height', parseInt(el.css('height')))
Yves M.
Canvas rendert Bilder nach Puffer. Wenn Sie also die HTML-Attribute width und height angeben, ändern sich Größe und Länge des Puffers, aber wenn Sie CSS verwenden, bleibt die Größe des Puffers unverändert. Das Bild gestreckt machen.
Verwenden der HTML-Größenanpassung.
Größe der Leinwand wird geändert -> Puffergröße wird geändert -> gerendert
Verwendung von CSS-Größenanpassung
Größe der Leinwand wird geändert -> gerendert
Da die Pufferlänge unverändert bleibt, wenn der Kontext das Bild rendert, wird das Bild in einer Leinwand mit geänderter Größe angezeigt (aber in unverändertem Puffer gerendert).
14494400cookie-checkCanvas wird gestreckt, wenn CSS verwendet wird, aber normal mit den Attributen “width” und “height”.yes