Antes que nada tenemos que ver que necesitamos para poder dibujar, JavaScript y una etiqueta canvas, con un id, ancho y alto definidos, no estaría mal, definirle un borde y saber cuál es el área de nuestro documento HTML en donde estamos dibujando.
Código Javascript :
<canvas id="areaDibujoA" width="200" height="200">Tú navegador no soportar canvas</canvas>
Ahora con JS dibujamos desde figuras sencillas como un cuadrado, observa los comentarios del siguiente código:
Código Javascript :
<script type="text/javascript" charset="utf-8"> window.onload = function (){ //Definimos el canvas donde vamos a dibujar var creandoDibujoA = document.getElementById('areaDibujoA'); //Activamos al función 2d para la variable donde vamos a dibujar var dibujandoA = creandoDibujoA.getContext('2d'); //Definimos las carateristicas del elemento color, tamaño del borde y color de este dibujandoA.lineWidth = 5; dibujandoA.strokeStyle = "#0099FF"; dibujandoA.fillStyle = "#FFFF99"; //Transladamos al elemento a la mitad del canvas, //esto debido a que toma la esquina superior izquierda como las coordenas 0,0 dibujandoA.translate(100, 100); dibujandoA.rotate(0); //Iniciamos un nuevo path donde dibujaremos dibujandoA.beginPath(); //Ahora el centro del canvas posee las coordenadas 0,0, creo que es mas coomodo así dibujandoA.moveTo( 0,0 ); dibujandoA.fillRect(0, 0, 50, 50); //aplicamos las caracteristicas color y tamaño dibujandoA.fill(); dibujandoA.stroke(); //cerramos el path dibujandoA.closePath(); } </script>
Mira funcionando el ejemplo:
se pueden usar líneas para hacer figuras más complejas:
El código fuente es:
Código Javascript :
<canvas id="areaDibujoB" width="200" height="200">Tú navegador no soportar canvas</canvas> <script type="text/javascript" charset="utf-8"> window.onload = function (){ //Definimos el canvas donde vamos a dibujar var creandoDibujoB = document.getElementById('areaDibujoB'); //Activamos al función 2d para la variable donde vamos a dibujar var dibujandoB = creandoDibujoB.getContext('2d'); //Definimos las carateristicas del elemento color, tamaño del borde y color de este/ dibujandoB.lineWidth = 2; dibujandoB.strokeStyle = "#0099FF"; dibujandoB.fillStyle = "#FFFF99"; //Transladamos al elemento a la mitad del canvas, //esto debido a que toma la esquina superior izquierda como las coordenas 0,0 dibujandoB.translate(100, 100); dibujandoB.rotate(0); //Iniciamos un nuevo path donde dibujaremos dibujandoB.beginPath(); //Ahora el centro del canvas posee las coordenadas 0,0, creo que es mas coomodo así dibujandoB.moveTo( 0,0 ); //Dibujamos una linea dibujandoB.lineTo( 50,0 ); //Un arco dibujandoB.arc(0,0,50,0,1.5*Math.PI,true); //Otra linea para cerrar la figura dibujandoB.lineTo( 0,0 ); //aplicamos las caracteristicas color y tamaño dibujandoB.fill(); //con este dibujamos las lineas dibujandoB.stroke(); //cerramos el path dibujandoB.closePath(); } </script>
Las librerías de JS para dibujar en canvas nos pueden facilitar mucho el trabajo, como es el caso de jCanvas, donde, desde el inicio de su página web muestra lo fácil que es el dibujo usando JavaScript, mira el ejemplo:
Código Javascript :
<canvas id="areaDibujoC" width="200" height="200">Tú navegador no soportar canvas</canvas> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jcanvas.min.js"></script> <script type="text/javascript" charset="utf-8"> $(document).ready(function (){ //Con esta funcion dibujamos un circulo, definicmos, color, posicion y tamaño $("#areaDibujoC").drawArc({ fillStyle: "black", x: 100, y: 100, radius: 25 }); }); </script>
con un código más simple, pero necesitamos usar la librería jquery para que funcione. Otro punto es el hecho de no poder usas eventos, sin embargo, una buena librería si lo único que se quiere es dibujar.
Existen otras librerías que nos permiten usar eventos en los diferentes elementos que dibujemos en nuestro canvas. Tal es el caso de JcanvaScript, observa el ejemplo:
Código Javascript :
<canvas id="areaDibujoD" width="200" height="200">Tú navegador no soportar canvas</canvas> <script type="text/javascript" src="jCanvaScript.min.js"></script> <script type="text/javascript" charset="utf-8"> window.onload = function (){ //definimos el canvas donde vamos a dibujar, le ponemos el 25 para que funcionen los eventos jc.start('areaDibujoD',25); //dibujamos los elementos //un circulo jc.circle(100,100,50,'rgba(255,0,0,0.5)',1) //ahora su evento, cuando se le click a circulo cambiará de color .click(function(){ this.color('#00ff00'); }); //Podemos dibujar más figuras //un rectangulo rotado jc.rect(150,40,50,60,1) //aplicar funciones de transformación, //rotado desde el centro .rotate(30,'center') //ahora su evento, cuando se le click rotará .click(function(){ this.rotate(50,'center') }); //volvemos usar esta función para redibujar y finalizar el canvas jc.start('areaDibujoD',25); } </script>
creo, es muy entendible, creamos la figura e inmediatamente le asignamos su evento, esta librería tiene además de los eventos mousedown y mouseup, dobleclick, solo que tiene un pequeña desventaja, los eventos parecen funcionar solo para figuras básicas, y para poder crear figuras complejas es algo complicado. Sin embargo muy útil y muy simple para eventos con figuras básicas.
Una forma de resolver el problema con las figuras complejas y usar eventos en ellas es el uso de una librería llamada kineticjs, aquí un tutorial de cómo usarlo. Abajo un ejemplo:
Código Javascript :
<canvas id="areaDibujoE" width="200" height="200">Tú navegador no soportar canvas</canvas> <script type="text/javascript" src="kinetic.js"></script> <script type="text/javascript" charset="utf-8"> window.onload = function (){ //Definimos un nuevo kinectic para usar la libreria kin = new Kinetic("areaDibujoE", "2d"); kin.setDrawStage(function(){ //Limpiamos el canvas kin.clear(); // var dibujandoE = kin.getContext(); // inciamos una nueva region para dibujar kin.beginRegion(); //Definimos las carateristicas del elemento color, tamaño del borde y color de este/ dibujandoE.lineWidth = 2; dibujandoE.strokeStyle = "#0099FF"; dibujandoE.fillStyle = "#FFFF99"; //Iniciamos un nuevo path donde dibujaremos dibujandoE.beginPath(); //Ahora el centro del canvas posee las coordenadas 0,0, creo que es mas coomodo así dibujandoE.moveTo( 100,100 ); //Dibujamos una linea dibujandoE.lineTo( 150,100 ); //Un arco dibujandoE.arc(100,100,50,0,1.5*Math.PI,true); //Otra linea para cerrar la figura dibujandoE.lineTo( 100,100 ); //aplicamos las caracteristicas color y tamaño dibujandoE.fill(); //con este dibujamos las lineas dibujandoE.stroke(); //cerramos el path dibujandoE.closePath(); //aderimos un evento onmousedown kin.addRegionEventListener("onmousedown", function(){ alert("Click"); }); //cerramos la region kin.closeRegion(); }); } </script>
Como te habrás dado cuenta, para el dibujo usa el primer método que mostré en este post, sin embargo esta página te da ejemplos y te explica como aprender a dibujar usando este método, mira este tutorial HTML5 Canvas Arc Tutorial.Un detalle que tiene esta librería es que el evento mousedown que ocupa no funciona en pantallas táctiles.
Para resolver el uso del click en pantallas táctiles existe una librería que permite figuras complejas, con eventos y que funciona con este tipo de pantallas, Gury, una de las características que me gustaron de esta librería es que no necesitas definir un canvas para poder usarla, solo un div, mira el ejemplo:
Código Javascript :
<div id="areaDibujoF" width="200" height="200"></div> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="gury.js"></script> <script type="text/javascript" charset="utf-8"> window.onload = function (){ //Creamos el canvas y le asignamos un tamaño $g().size(200, 200) //Aderimos el elemento a dibujar, junto con su nombre de instancia .add('dibujoFa',function(dibujandoFa) { //Definimos las carateristicas del elemento dibujandoFa.lineWidth = 2; dibujandoFa.strokeStyle = "#0099FF"; dibujandoFa.fillStyle = "#FFFF99"; //Guardamos para despues reestablecer los valores dibujandoFa.save(); //Transladamos al elemento a la mitad del canvas dibujandoFa.translate(100, 100); dibujandoFa.rotate(1.2*Math.PI); //Iniciamos un nuevo path donde dibujaremos dibujandoFa.beginPath(); //Comenzamos desde el centro dibujandoFa.moveTo( 0,0 ); dibujandoFa.lineTo( 50,0 ); dibujandoFa.arc(0,0,50,0,1.5*Math.PI,true); dibujandoFa.lineTo( 0,0 ); //aplicamos las caracteristicas color y tamaño dibujandoFa.fill(); dibujandoFa.stroke(); //cerramos el path dibujandoFa.closePath(); //restauramos los valores salvados dibujandoFa.restore(); }) //Aderimos el elemento a dibujar, junto con su nombre de instancia .add('dibujoFb',function(dibujandoFb) { //Definimos las carateristicas del elemento dibujandoFb.lineWidth = 2; dibujandoFb.strokeStyle = "#3399FF"; dibujandoFb.fillStyle = "#33FF99"; //Guardamos para despues reestablecer los valores dibujandoFb.save(); //Transladamos al elemento a la mitad del canvas dibujandoFb.translate(100, 100); dibujandoFb.rotate(0.2*Math.PI); //Iniciamos un nuevo path donde dibujaremos dibujandoFb.beginPath(); //Comenzamos desde el centro dibujandoFb.moveTo( 0,0 ); dibujandoFb.lineTo( 50,0 ); dibujandoFb.arc(0,0,50,0,1.8*Math.PI,true); dibujandoFb.lineTo( 0,0 ); //aplicamos las caracteristicas color y tamaño dibujandoFb.fill(); dibujandoFb.stroke(); //cerramos el path dibujandoFb.closePath(); //restauramos los valores salvados dibujandoFb.restore(); }) //Aderimos los eventos .click('dibujoFa', function(e) { alert('Click en la Figura 1'); }) .click('dibujoFb', function(e) { alert('Click en la Figura 2'); }) //Ponemos el dibujo(s) en el div notese que es en el DIV no en un canvas .place("#areaDibujoF").draw(); } </script>
Si bien se necesita de la librería Jquery y de usar el primer método, es muy buena esta librería para usar figuras complejas, con eventos y que funcione en pantallas táctiles, aún se encuentra en versión alpha por lo que es probable que encuentren algunos problemillas, como por ejemplo si se descargan la versión que publica el autor y usan el evento click les dirá que tiene un error, para corregirlo descarguen la versión completa, de la siguiente página https://github.com/rsandor/gury/blob/master/demos/tags.html, denle click en download y luego de descomprimir el archivo gury.js,
ábranlo, váyanse a la línea 350 y cambien ob por object,
de no cambiarlo la consola de JavaScript (use la de google Chrome, me parece muy buena, pero esa es otra historia), mostrará un error.
Espero que este post les sea de ayuda, y cualquier duda, no duden en preguntar, gracias por su visita.
Pueden ver el articulo original desde mi pagina web Dibujando en Canvas con JS HTML5, donde podrán probar ver los ejemplos.