Como posso dimensionar automaticamente o <canvas>
elemento HTML5 para caber na página?
Por exemplo, posso obter um <div>
escalonamento definindo as propriedades height
e width
para 100%, mas um <canvas>
não escalará, não é?
javascript
html
html5-canvas
devyn
fonte
fonte
Respostas:
Acredito ter encontrado uma solução elegante para isso:
Javascript
CSS
Até agora, não tive nenhum grande impacto negativo no desempenho para mim.
fonte
body, html { margin: 0px;}
A solução a seguir funcionou melhor para mim. Como sou relativamente novo em codificação, gosto de ter uma confirmação visual de que algo está funcionando da maneira que eu esperava. Encontrei-o no seguinte site: http://htmlcheats.com/html/resize-the-html5-canvas-dyamically/
Aqui está o código:
A borda azul mostra a borda da tela de redimensionamento e está sempre ao longo da borda da janela, visível nos quatro lados, o que NÃO foi o caso de algumas das outras respostas acima. Espero que ajude.
fonte
overflow: hidden
edisplay: block
é o que estava faltando para eu fazer isso funcionar corretamente.Basicamente, o que você precisa fazer é vincular o evento onresize ao seu corpo, depois de capturar o evento, basta redimensionar a tela usando window.innerWidth e window.innerHeight.
fonte
Definir a largura e a altura do espaço das coordenadas da tela com base nas dimensões do cliente do navegador exige que você redimensione e redesenha sempre que o navegador for redimensionado.
Uma solução menos complicada é manter as dimensões desenháveis nas variáveis Javascript, mas defina as dimensões da tela com base nas dimensões screen.width, screen.height. Use CSS para ajustar:
A janela do navegador geralmente nunca será maior que a própria tela (exceto onde a resolução da tela é incorreta, como poderia ser com monitores duplos não correspondentes), para que o fundo não seja exibido e as proporções de pixel não variem. Os pixels da tela serão diretamente proporcionais à resolução da tela, a menos que você use CSS para dimensionar a tela.
fonte
Uma abordagem CSS pura que foi adicionada à solução do @jerseyboy acima.
Funciona no Firefox (testado na v29), Chrome (testado na v34) e Internet Explorer (testado na v11).
Link para o exemplo: http://temporaer.net/open/so/140502_canvas-fit-to-window.html
Mas tome cuidado, como @jerseyboy afirma em seu comentário:
fonte
fonte
A menos que você queira que a tela aprimore automaticamente os dados da imagem (é sobre isso que a resposta de James Black fala, mas não ficará bonita), você deve redimensioná-la e redesenhar a imagem. Centralizando uma tela
fonte
Se o seu div preencheu completamente a página da Web, você pode preenchê-lo e criar uma tela que preencha o div.
Você pode achar isso interessante, pois pode precisar usar um css para usar a porcentagem, mas isso depende de qual navegador você está usando e de quanto está de acordo com a especificação: http://www.whatwg.org/ especificações / aplicativos da web / trabalho atual / várias páginas / the-canvas-element.html # the-canvas-element
Pode ser necessário obter a offsetWidth e a altura da div ou obter a altura / largura da janela e definir isso como o valor do pixel.
fonte
CSS
Javascript
fonte
Se você estiver interessado em preservar as proporções e fazê-lo em CSS puro (considerando a proporção), pode fazer algo como abaixo. A chave é a
padding-bottom
do::content
elemento que dimensiona ocontainer
elemento. Isso é dimensionado em relação à largura do pai, que é100%
por padrão. A proporção especificada aqui deve corresponder à proporção dos tamanhos nocanvas
elemento.fonte
Usando o jQuery, você pode acompanhar o redimensionamento da janela e alterar a largura da sua tela usando o jQuery também.
Algo parecido
fonte
fonte
Eu acho que é isso que devemos fazer exatamente: http://www.html5rocks.com/en/tutorials/casestudies/gopherwoord-studios-resizing-html5-games/
fonte
Estou usando o sketch.js, então, depois de executar o comando init da tela, altero a largura e a altura com o jquery. Baseia as dimensões no elemento pai.
fonte