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 |