Wie kann ich das HTML5- <canvas>
Element automatisch an die Seite anpassen?
Zum Beispiel kann ich eine <div>
Skalierung erhalten, indem ich die Eigenschaften height
und width
auf 100% setze, aber eine <canvas>
wird nicht skaliert, oder?
javascript
html
html5-canvas
Devyn
quelle
quelle
Antworten:
Ich glaube, ich habe eine elegante Lösung dafür gefunden:
JavaScript
CSS
Hat bisher keine großen negativen Auswirkungen auf die Leistung für mich gehabt.
quelle
body, html { margin: 0px;}
Die folgende Lösung hat bei mir am besten funktioniert. Da ich relativ neu im Codieren bin, möchte ich eine visuelle Bestätigung haben, dass etwas so funktioniert, wie ich es erwartet habe. Ich habe es auf der folgenden Website gefunden: http://htmlcheats.com/html/resize-the-html5-canvas-dyamically/
Hier ist der Code:
Der blaue Rand zeigt Ihnen den Rand der Leinwand zum Ändern der Größe und befindet sich immer am Rand des Fensters, sichtbar auf allen 4 Seiten, was bei einigen der anderen oben genannten Antworten NICHT der Fall war. Ich hoffe es hilft.
quelle
overflow: hidden
unddisplay: block
ist das, was mir gefehlt hat, damit das richtig funktioniert.Grundsätzlich müssen Sie das Ereignis onresize an Ihren Körper binden. Sobald Sie das Ereignis erfasst haben, müssen Sie nur die Größe der Zeichenfläche mit window.innerWidth und window.innerHeight ändern.
quelle
Wenn Sie die Breite und Höhe des Canvas-Koordinatenraums basierend auf den Abmessungen des Browser-Clients festlegen, müssen Sie die Größe ändern und neu zeichnen, wenn die Größe des Browsers geändert wird.
Eine weniger komplizierte Lösung besteht darin, die zeichnbaren Dimensionen in Javascript-Variablen beizubehalten, die Canvas-Dimensionen jedoch basierend auf den Dimensionen screen.width, screen.height festzulegen. Verwenden Sie CSS, um Folgendes anzupassen:
Das Browserfenster wird im Allgemeinen nie größer als der Bildschirm selbst sein (außer wenn die Bildschirmauflösung falsch angegeben wird, wie dies bei nicht übereinstimmenden Doppelmonitoren der Fall sein könnte), sodass der Hintergrund nicht angezeigt wird und die Pixelproportionen nicht variieren. Die Leinwandpixel sind direkt proportional zur Bildschirmauflösung, es sei denn, Sie verwenden CSS zum Skalieren der Leinwand.
quelle
Ein reiner CSS- Ansatz, der zur obigen Lösung von @jerseyboy beiträgt.
Funktioniert in Firefox (getestet in Version 29), Chrome (getestet in Version 34) und Internet Explorer (getestet in Version 11).
Link zum Beispiel: http://temporaer.net/open/so/140502_canvas-fit-to-window.html
Aber seien Sie vorsichtig, wie @jerseyboy in seinem Kommentar feststellt:
quelle
quelle
Wenn Sie nicht möchten, dass die Leinwand Ihre Bilddaten automatisch hochskaliert (das ist die Antwort von James Black, aber sie sieht nicht hübsch aus), müssen Sie die Größe selbst ändern und das Bild neu zeichnen. Leinwand zentrieren
quelle
Wenn Ihr Div die Webseite vollständig ausgefüllt hat, können Sie dieses Div ausfüllen und so eine Leinwand erstellen, die das Div ausfüllt.
Sie finden dies möglicherweise interessant, da Sie möglicherweise ein CSS verwenden müssen, um den Prozentsatz zu verwenden. Dies hängt jedoch davon ab, welchen Browser Sie verwenden und inwieweit er mit der Spezifikation übereinstimmt: http://www.whatwg.org/ specs / web-apps / current-work / mehrseitig / the-canvas-element.html # the-canvas-element
Möglicherweise müssen Sie die Offsetbreite und -höhe des Div oder die Fensterhöhe / -breite abrufen und als Pixelwert festlegen.
quelle
CSS
JavaScript
quelle
Wenn Sie daran interessiert sind, Seitenverhältnisse beizubehalten und dies in reinem CSS (angesichts des Seitenverhältnisses) zu tun, können Sie Folgendes tun. Der Schlüssel ist der
padding-bottom
auf dem::content
Element, der die Größe descontainer
Elements angibt. Die Größe ist relativ zur Breite des übergeordneten Elements festgelegt, die100%
standardmäßig verwendet wird. Das hier angegebene Verhältnis muss mit dem Verhältnis der Größen auf demcanvas
Element übereinstimmen .quelle
Mit jQuery können Sie die Größe des Fensters verfolgen und die Breite Ihrer Zeichenfläche auch mit jQuery ändern.
So ähnlich
quelle
quelle
Ich denke, genau das sollten wir tun: http://www.html5rocks.com/en/tutorials/casestudies/gopherwoord-studios-resizing-html5-games/
quelle
Ich verwende skizze.js. Nachdem ich den Befehl init für die Zeichenfläche ausgeführt habe, ändere ich die Breite und Höhe mit jquery. Die Bemaßungen basieren auf dem übergeordneten Element.
quelle