O HTML5 introduziu um novo objeto – o canvas – onde é possível programar em javascript, como uma tela, da mesma forma que se programa sobre painéis em Java.
Há uma série de funções predefinidas para desenhar círculos, retângulos, linhas e escrever textos, com a cor, espessura e fonte que quisermos.
No exemplo abaixo, criamos um canvas com 600px de largura e 400px de altura, e desenhamos dois retângulos, uma circunferência e um círculo, assim como 6 linhas que unem estes 4 objetos.
Visualização:
Código HTML
<!DOCTYPE html> <html> <head> <title>Canvas e Javascript</title> <meta charset="iso-8859-1"> <script type="text/javascript" src="codigo.js"></script> </head> <body onload="inicia();"> <h3>Canvas e Javascript</h3> <canvas width="640" height="480" id="tela"></canvas> </body> </html>
Código javascript
function inicia() {
var canvas = document.getElementById("tela");
var larg = canvas.getAttribute("width");
var alt = canvas.getAttribute("height");
// Aceder ao contexto gráfico do canvas
var ctx = canvas.getContext("2d");
// Retângulo do fundo
ctx.fillStyle = "#60FFFF";
ctx.beginPath();
ctx.rect(0,0,larg,alt);
ctx.fill();
// Retângulo cima, esquerda
ctx.fillStyle = "red";
ctx.beginPath();
ctx.rect(80,70,70,50);
ctx.fill();
// Retângulo cima, direita
ctx.fillStyle = "blue";
ctx.beginPath();
ctx.rect(450,70,70,50);
ctx.fill();
// Círculo baixo esquerda (circunferência)
ctx.lineWidth = 5;
ctx.strokeStyle = "#008000";
ctx.beginPath();
ctx.arc(115,305,35,0,2*Math.PI);
ctx.stroke();
// Círculo baixo direita
ctx.lineWidth = 5;
ctx.fillStyle = "#FFFF20";
ctx.beginPath();
ctx.arc(485,305,35,0,2*Math.PI);
ctx.fill();
// Linha entre os retângulos
poeLinha(ctx,115,95,485,95,"black");
poeLinha(ctx,115,305,485,305,"white");
poeLinha(ctx,115,95,115,305,"khaki");
poeLinha(ctx,485,95,485,305,"purple");
poeLinha(ctx,115,95,485,305,"magenta");
poeLinha(ctx,115,305,485,95,"#123456");
}
function poeLinha(ctx,x1,y1,x2,y2,cor) {
ctx.strokeStyle = cor;
ctx.beginPath();
ctx.moveTo(x1,y1);
ctx.lineTo(x2,y2);
ctx.stroke();
}
A função ctx.arc permite desenhar um arco com a amplitude (em radianos) pretendida. Para desenhar um círculo, precisamos de desenhar de 0 a 2*PI (dois últimos parâmetros). Os dois primeiros parâmetros são as coordenadas do centro, e o terceiro parâmetro é o raio.
ctx.arc(485,305,35,0,2*Math.PI);
Os parâmetros da função ctx.rect são mais intuitivos: abcissa e ordenada do canto superior esquerdo, largura e altura do retângulo.
ctx.rect(450,70,70,50);
As funções do tipo stroke desenham apenas a linha, enquanto que as funções do tipo fill preenchem a figura.
