HTML 5 na prática, Canvas – Parte 1

1 de abril de 2010, 18:02 | Postado em Cookbook, html5

Oi pessoal, tudo bem? Hoje quero mostrar o HTML 5 na prática, nada de teorias sobre novas funcionalidades e especifícações, vamos ao que interessa.

INTRODUÇÃO

canvas é um novo e poderoso elemento entre as inúmeras novas funcionalidades do HTML 5. Com o canvas você consegue de maneira fácil criar gráficos, composições de fotos e animações usando JavaScript. Pense em um bloco de notas, cada folha é um elemento canvas onde você pode usar um contexto diferente, utilizando ou não API’s para fornecer funcionalidades de desenho.

Nesse tutorial vou tentar passar um pouco de como implementar um contexto de canvas 2D em seu código HTML, é requisito que você conheça o básico de JavaScript.

Com a chegada do Internet Explorer 9, todos os grandes navegadores já tem suporte para canvas em suas versões mais atuais, se o seu navegador está desatualizado, aproveite agora para atualizar.

Princípios básicos

Vamos começar inserindo o elemento canvas em seu HTML:

<canvas id="tutorial" width="300" height="300"></canvas>

Você precisa identificar o elemento para encontrar mais tarde via JavaScript, nosso canvas então está identificado como #tutorial. O elemento canvas possui apenas dois atributos – width e height. Se esses elementos não estiverem especificados via CSS ou pelas propriedades DOM, a tela será criada inicialmente com 300 pixels de largura e 150 pixels de altura.

Linhas e Retângulos

Com as propriedades fillStyle e strokeStyle conseguimos configurar facilmente as cores utilizadas em nossas formas, os valores de cores que você pode usar são os mesmos do CSS: códigos hex, rgb (), RGBA () e até mesmo HSLA () se o browser suportar (por exemplo, o Opera 10 e Firefox 3).

Com fillRect você pode desenhar retângulos preenchidos, com o strokeRect podemos desenhar contornos retangulares e ainda temos o clearRect para limpar e criar áreas transparentes. Esses três métodos usam os mesmos argumentos: x, y, width, height. Os dois primeiros, x e y definem a posição do seu desenho na tela (canvas) e os outros, width e height definem o tamanho do seu retângulo, por exemplo. Para alterar a expessura das bordas, você pode usar a propriedade lineWidth.

Bom, vamos ver na prática como funciona tudo isso junto?

window.addEventListener('load', function () {
  // Pegamos o elemento pela referência.
  var elem = document.getElementById('tutorial');

  // Pegamos o contexto 2D, você pode pegar somente um contexto por elemento.
  var context = elem.getContext('2d');

  // Definimos as propriedades de estilo.
  context.fillStyle   = '#264761';
  context.strokeStyle = '#9233A7';
  context.lineWidth   = 4;

  // Desenhando alguns retângulos, lembrando a ordem dos argumentos: (x, y, width, height)
  context.fillRect  (10, 0, 100, 25);
  context.strokeRect(10, 35, 100, 25);
  context.clearRect (20, 55,  80, 10);
  context.strokeRect(10, 70, 100, 25);
}, false);

Veja esse exemplo funcionando, clique aqui.
Resultado:

Paths

Os “caminhos” permitem você criar formas personalizadas com canvas. Primeiro criamos o path chamando o método beginPath(), depois vamos desenhar nosso objeto utilizando linhas, curvas e outras formas primitivas de desenho e quando o desenho estiver pronto, vamos preencher com fill() e stroke() , depois podemos chamar closePath() para finalizar nosso path.

Vamos ver isso na prática criando um triângulo:

  context.fillStyle   = '#264761';
  context.strokeStyle = '#9233A7';
  context.lineWidth   = 4;

  context.beginPath();
  context.moveTo(10, 10); //define o ponto de início
  context.lineTo(100, 100);
  context.lineTo(200, 10);
  context.lineTo(9, 10);

  // Acabamos de desenhar, agora vamos preencher e criar a borda.
  context.fill();
  context.stroke();
  context.closePath();

Veja esse exemplo funcionando, clique aqui.

Eis que nasce o nosso triângulo:

moveTo

Imagine um papel e uma caneta, o moveTo nada mais é que a posição inicial da sua caneta no papel, assim podemos mudar nossa “caneta” de lugar e começar novas linhas de desenho em posições isoladas.

A função moveTo leva dois argumentos – x e y, – que são as coordenadas do novo ponto de partida.

Um exemplo na prática de como usar o moveTo.

  context.strokeStyle = '#FF8A00';
  context.lineWidth   = 4;

  context.beginPath();
  context.arc(75,75,45,0,Math.PI*2,true); //Rosto
  context.moveTo(110,75);
  context.arc(75,75,35,0,Math.PI,false);  //Sorriso
  context.moveTo(65,65);
  context.arc(60,65,5,0,Math.PI*2,true);  //Olho Esquerdo
  context.moveTo(95,65);
  context.arc(90,65,5,0,Math.PI*2,true);  //Olho Direito

  context.stroke();
  context.closePath();

Veja esse exemplo funcionando, clique aqui.
Resultado:



Conclusão e Demos

Pessoal, espero que tenham entendido o básico sobre canvas, agora é começar a brincar com o que eu passei e continuar estudando, em breve vou escrever a parte 2 da série “HTML 5 na prática”, irei continuar falando sobre canvas e os métodos bezierCurveTo, quadraticCurveTo e arc.

Por enquanto é isso, segue algumas demos usando HTML 5:

Interpolation Polynomial
The ernie network graph
Cake – Vários exemplos.

HTML 5 na prática, Canvas – Parte 2

A parte 2 da série “HTML 5 na prática, Canvas” já foi publicada, clique aqui.

Comentários

Brayan,

1 de abril de 2010, 19:01

:o hehe
Parabénsss Leo :D Ótimo tuto aew, muito bom para toda galera ver como é o html5 e conseguir deduzir pontos positivos aew :) Fera mesmo, da para entender certinho como é feito tudo. parabéns :)

Cristiano Luminati,

2 de abril de 2010, 02:29

Parabéns, ficou muito legal esse artigo cara. Seu blog já é referência no assunto.
Eu já havia lido alguns artigos sobre o HTML5 e sobre o canvas, mas, nada muito aprofundado.

Leonardo Chaves,

30 de abril de 2010, 02:07

Muito legal, sou assinante da Web Design, li seu artigo lá e vim ver o blog, bom q vc esteja postando essas dicas e exemplos, de forma descomplicada.

Max Ebina,

1 de julho de 2010, 15:15

Não funciona no IE8?

Escreva seu Comentário