Comment mettre automatiquement à l'échelle l' <canvas>
élément HTML5 pour l'adapter à la page?
Par exemple, je peux obtenir une mise <div>
à l'échelle en définissant les propriétés height
et width
à 100%, mais <canvas>
pas une mise à l'échelle, n'est-ce pas?
javascript
html
html5-canvas
devyn
la source
la source
Réponses:
Je crois avoir trouvé une solution élégante à cela:
Javascript
CSS
Jusqu'à présent, cela n'a pas eu un grand impact négatif sur les performances.
la source
body, html { margin: 0px;}
La solution suivante a fonctionné le mieux pour moi. Étant donné que je suis relativement nouveau dans le codage, j'aime avoir une confirmation visuelle que quelque chose fonctionne comme je m'y attend. Je l'ai trouvé sur le site suivant: http://htmlcheats.com/html/resize-the-html5-canvas-dyamically/
Voici le code:
La bordure bleue vous montre le bord de la zone de redimensionnement et se trouve toujours le long du bord de la fenêtre, visible sur les 4 côtés, ce qui n'était PAS le cas pour certaines des autres réponses ci-dessus. J'espère que cela aide.
la source
overflow: hidden
etdisplay: block
est ce qui me manquait pour que cela fonctionne correctement.Fondamentalement, ce que vous devez faire est de lier l'événement onresize à votre corps, une fois que vous avez attrapé l'événement, il vous suffit de redimensionner le canevas à l'aide de window.innerWidth et window.innerHeight.
la source
Pour définir la largeur et la hauteur de l'espace de coordonnées du canevas en fonction des dimensions du client du navigateur, vous devez redimensionner et redessiner chaque fois que le navigateur est redimensionné.
Une solution moins compliquée consiste à conserver les dimensions dessinables dans les variables Javascript, mais à définir les dimensions du canevas en fonction des dimensions screen.width, screen.height. Utilisez CSS pour ajuster:
La fenêtre du navigateur ne sera généralement jamais plus grande que l'écran lui-même (sauf lorsque la résolution de l'écran est mal déclarée, comme cela pourrait être le cas avec deux moniteurs non correspondants), donc l'arrière-plan ne s'affichera pas et les proportions de pixels ne varieront pas. Les pixels du canevas seront directement proportionnels à la résolution de l'écran, sauf si vous utilisez CSS pour mettre le canevas à l'échelle.
la source
Une approche CSS pure s'ajoutant à la solution de @jerseyboy ci-dessus.
Fonctionne sous Firefox (testé en v29), Chrome (testé en v34) et Internet Explorer (testé en v11).
Lien vers l'exemple: http://temporaer.net/open/so/140502_canvas-fit-to-window.html
Mais attention, comme le dit @jerseyboy dans son commentaire:
la source
la source
À moins que vous ne vouliez que le canevas améliore automatiquement vos données d'image (c'est ce dont parle la réponse de James Black, mais ce ne sera pas joli), vous devez le redimensionner vous-même et redessiner l'image. Centrer une toile
la source
Si votre div a complètement rempli la page Web, vous pouvez remplir cette div et ainsi avoir une toile qui remplit la div.
Vous trouverez peut-être cela intéressant, car vous devrez peut-être utiliser un CSS pour utiliser le pourcentage, mais cela dépend du navigateur que vous utilisez et de son accord avec les spécifications: http://www.whatwg.org/ spécifications / applications web / travaux en cours / multipage / the-canvas-element.html # the-canvas-element
Vous devrez peut-être obtenir l'offsetWidth et la hauteur de la div, ou obtenir la hauteur / largeur de la fenêtre et la définir comme valeur de pixel.
la source
CSS
Javascript
la source
Si vous souhaitez conserver les proportions et le faire en CSS pur (compte tenu des proportions), vous pouvez faire quelque chose comme ci-dessous. La clé est
padding-bottom
sur l'::content
élément qui dimensionne l'container
élément. Ceci est dimensionné par rapport à la largeur de son parent, qui est100%
par défaut. Le rapport spécifié ici doit correspondre au rapport des tailles sur l'canvas
élément.la source
À l'aide de jQuery, vous pouvez également suivre le redimensionnement de la fenêtre et modifier la largeur de votre toile à l'aide de jQuery.
Quelque chose comme ca
la source
la source
Je pense que c'est ce que nous devons faire exactement: http://www.html5rocks.com/en/tutorials/casestudies/gopherwoord-studios-resizing-html5-games/
la source
J'utilise sketch.js donc après avoir exécuté la commande init pour la toile, je change la largeur et la hauteur avec jquery. Il base les dimensions sur l'élément parent.
la source