Wie kann ich die Breite und Höhe des Canvas-Elements in JavaScript ermitteln?
Was ist auch der "Kontext" der Leinwand, über die ich immer wieder lese?
quelle
Wie kann ich die Breite und Höhe des Canvas-Elements in JavaScript ermitteln?
Was ist auch der "Kontext" der Leinwand, über die ich immer wieder lese?
Es könnte sich lohnen, sich ein Tutorial anzusehen: Firefox Canvas Tutorial
Sie können die Breite und Höhe eines Canvas-Elements ermitteln, indem Sie einfach auf diese Eigenschaften des Elements zugreifen. Beispielsweise:
var canvas = document.getElementById('mycanvas');
var width = canvas.width;
var height = canvas.height;
Wenn die Attribute width und height im Canvas-Element nicht vorhanden sind, wird die Standardgröße 300 x 150 zurückgegeben. Verwenden Sie den folgenden Code, um dynamisch die richtige Breite und Höhe zu erhalten:
const canvasW = canvas.getBoundingClientRect().width;
const canvasH = canvas.getBoundingClientRect().height;
Oder verwenden Sie die kürzere Objektzerstörungssyntax:
const { width, height } = canvas.getBoundingClientRect();
Dies context
ist ein Objekt, das Sie von der Leinwand erhalten, damit Sie hinein zeichnen können. Sie können sich das context
als API für die Zeichenfläche vorstellen, die Ihnen die Befehle zur Verfügung stellt, mit denen Sie auf das Zeichenflächenelement zeichnen können.
width
undheight
direkt als<canvas />
Tag-Attribute angegeben werdenNun, alle Antworten zuvor sind nicht ganz richtig. 2 der gängigen Browser unterstützen diese beiden Eigenschaften nicht (IE ist eine davon) oder verwenden sie anders.
Bessere Lösung (wird von den meisten Browsern unterstützt, aber ich habe Safari nicht überprüft):
Zumindest erhalte ich korrekte Werte mit scrollWidth und -Height und MUSS canvas.width und height festlegen, wenn die Größe geändert wird.
quelle
Die genannten Antworten
canvas.width
geben die internen Abmessungen der Zeichenfläche zurück, dh die beim Erstellen des Elements angegebenen:Wenn Sie die Leinwand mit CSS Größe, sind seine DOME Dimensionen erreichbar über
.scrollWidth
und.scrollHeight
:quelle
width
undheight
call geben immer 300x150 zurück, wenn Sie keine Werte angeben und die relative Größe verwenden (während Sie Bootstrap verwenden ... usw.). Vielen Dank.Mit dem Kontextobjekt können Sie die Zeichenfläche bearbeiten. Sie können zum Beispiel Rechtecke und vieles mehr zeichnen.
Wenn Sie die Breite und Höhe erhalten möchten, können Sie einfach die Standard-HTML-Attribute verwenden
width
undheight
:quelle
Ab 2015 scheinen alle (Haupt-?) Browser zuzulassen
c.width
undc.height
die interne Größe der Leinwand zu erhalten , aber:Die Frage als Antwort ist irreführend, da die Leinwand grundsätzlich 2 verschiedene / unabhängige Größen hat.
Das "HTML" sagt CSS Breite / Höhe und seine eigene (Attribut-) Breite / Höhe
Schauen Sie sich dieses kurze Beispiel für eine andere Größe an , bei dem ich eine 200/200-Zeichenfläche in ein 300/100-HTML-Element eingefügt habe
Bei den meisten Beispielen (alles, was ich gesehen habe) gibt es keine CSS-Größe, so dass diese die Breite und Höhe der (Zeichnungs-) Leinwandgröße implizit erhalten. Aber das ist kein Muss und kann zu lustigen Ergebnissen führen, wenn Sie die falsche Größe wählen - dh. CSS-Breite / Höhe für die innere Positionierung.
quelle
Keiner von denen hat für mich gearbeitet. Versuche dies.
quelle
Hier ist ein CodePen, der canvas.height / width, CSS height / width und context verwendet, um jede Leinwand in jeder Größe korrekt zu rendern .
HTML:
CSS:
Javascript:
Grundsätzlich legt canvas.height / width die Größe der Bitmap fest, auf die Sie rendern. Die CSS-Höhe / Breite skaliert dann die Bitmap, um sie an den Layoutbereich anzupassen (häufig wird sie beim Skalieren verzerrt). Der Kontext kann dann seine Skalierung ändern, um mithilfe von Vektoroperationen unterschiedliche Größen zu zeichnen.
quelle
Ich hatte ein Problem, weil sich meine Leinwand in einem Container ohne ID befand, also habe ich diesen unten stehenden Abfragecode verwendet
quelle