O día 2 de xaneiro entrou en vigor a Ley Antitabaco que prohibe fumar na maioría dos locais públicos salvo excepcións contadas. Para lembrarllo a xente ten que existir a cartelería correspondente nos locais. É aquí cando vexo os carteis de "Prohibido Fumar", e o sinxelo que sería debuxalos con simples trazos de liñas e círculos. Entón venme a cabeza a idea de debuxar un cartel de prohibido fumar empregando a tag canvas para deste modo ir probando funcionalidades de HTML5.
Botando man do libro "Dive into HTML5" do autor Mark Pilgrim e do seu capítulo "Let's Call it a Draw(ing Surface)" póñome mans a obra.
Para pintar o cartel precisamos un lenzo (canvas) sobre o que imos aplicar varios métodos de código javascript:
<canvas id="cartel" width="410" height="410"></canvas>
O código javascript non é ningunha marabilla pero amosa as posibilidades da etiqueta canvas. O primeiro que se fai é recuperar o elemento canvas facendo uso de document.getElementById e despois recuperamos o contexto 2d a partir do elemento canvas con getContext.
<script type="text/javascript">
/* <![CDATA[ */
var canvas = document.getElementById('cartel');
var ctxt = canvas.getContext('2d');
var radius = 180;
var width = height = 410;
var x1, y1;
var lineWidth = 20.0;
function drawCabicha() {
// Cigarro
ctxt.beginPath();
ctxt.moveTo(105, 200);
ctxt.lineTo(308, 200);
ctxt.lineCap = 'butt';
ctxt.lineWidth = lineWidth + 10;
ctxt.strokeStyle = "#000";
ctxt.stroke();
ctxt.closePath();
ctxt.fillRect(310, 185, 10, 30);
ctxt.fillRect(322, 185, 10, 30);
ctxt.fillRect(334, 185, 10, 30);
}
function drawSinal() {
// Círculo
ctxt.beginPath();
ctxt.arc(width/2, height/2, radius, 0 , Math.PI * 2, false);
ctxt.lineWidth = lineWidth;
ctxt.strokeStyle = "#F00";
ctxt.stroke();
ctxt.closePath();
// Liña
ctxt.beginPath();
ctxt.moveTo(0, 0);
x1 = 205 - Math.ceil(Math.PI * 1/4 * radius);
y1 = 205 - Math.ceil(Math.PI * 1/4 * radius);
ctxt.moveTo(x1 + lineWidth, y1 + lineWidth);
ctxt.lineTo(width-x1-lineWidth, height-y1-lineWidth);
ctxt.lineCap = 'round';
ctxt.lineWidth = lineWidth;
ctxt.strokeStyle = "#F00";
ctxt.stroke();
ctxt.closePath();
}
function drawFume() {
// Fume
ctxt.beginPath();
ctxt.arc(320, 170, 10, Math.PI/2, -Math.PI/2, false);
ctxt.arc(320, 150, 10, Math.PI/2, -Math.PI/2, false);
ctxt.arc(320, 130, 10, Math.PI/2, -Math.PI/2, false);
ctxt.arc(320, 120, 10, -Math.PI/2, Math.PI/2, false);
ctxt.arc(320, 140, 10, -Math.PI/2, Math.PI/2, false);
ctxt.arc(320, 160, 10, -Math.PI/2, Math.PI/2, false);
ctxt.lineWidth = 1;
ctxt.strokeStyle = "#FFF";
ctxt.fillStyle = '#CCC';
ctxt.fill();
ctxt.closePath();
}
// Imos imprimindo por partes
setTimeout(drawCabicha, 1000);
setTimeout(drawSinal, 2000);
setTimeout(drawFume, 3000);
/* ]]> */
</script>
Un resumo dos métodos do contexto máis importantes e o que veñen facendo:
No código fonte establécense uns temporizadores para ir pintando por partes os distintos elementos do debuxo. Evidentemente esta técnica permitiría crear gráficos para estatísticas dinámicos, por exemplo. A etiqueta canvas abre un mundo de posibilidades que con HTML4 tiñamos que botar man de flash, applets java, ... outros plugins.
Descargar o código fonte do exemplo para quen queira facer as súas modificacións e probas.
NOTA: para que este exemplo funcione en IExploter no apartado What about IE? do libro Dive into HTML5 explícase un workaround empregando o proxecto excanvas.
| Última actualización | 2012-08-15 2:24 AM (Europe/Madrid) |
| Data de creación | 2011-01-03 12:49 PM (Europe/Madrid) |
| Pintar un cartel con canvas (HTML5) | |
| javascript html5 | |