Selectores y Metodos con jquery

Este reseña pretende simplemente tener como referencia y tenerla a la mano algunos conceptos de jquery, framework de javascript que nos permiten tener compatibilidad con la mayoria de los navegadores, sin tener que adquirir conocimientos tecnicos muy complejos de JavaScript.

Para trabajar necesitamos saber como posicionar nuestros scripts, lo podemos utilizar en la cabecera o en el cuerpo, nosotros situaremos nuestros script antes del cierre del head



<!DOCTYPE html>
<html>
<head>
    <style type="text/css">
      body{
      background: #1a1a1a;
      color: white;
      }
    </style>
<title>Acceder al DOM desde Jquery</title>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js'></script>
<script type="text/javascript">
     $("document").ready(function(){//Este metodo nos permite trabajar el documento cuando la pagina esta cargada.
      $("#enlace-principal").css("color", "red");//Ponemos estilo a nuestro enlace encerrado con etiquetas h1
     })
</script>
</head>
<body>

<h1><a id="enlace-principal" href="#">Canvaso</a></h1>
<h2>DOM desde Jquery</h2>
<div id="contenido">
      <p> En este tutorial veremos los siguientes elementos html que nos ayudan a seleccionar, los siguientes metodos son:</p>
      <ul class="lista-de-metodos">
      <li>Metodo Each</li>
      <li>Metodo Eq</li>
      <li>Metodo on</li>
      </ul>
      <h3 class="temas-menores">Metodo Each</h3>
      <p class="parrafos-menores">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
      consequat. </p>
      <h3 class="temas-menores">Metodo Eq</h3>
      <p class="parrafos-menores">Duis aute irure dolor in reprehenderit in voluptate velit cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
      <h3 class="temas-menores">Metodo On</h3>
      <p class="parrafos-menores">Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    </div>

</body>
</html>


Como observamos agregue todo el documento para que no ocasione problema si se esta iniciando desde cero. Utlizamos la version 2.1.0 de jquery y el codigo que se ejecuta es el siguiente


$("document").ready(function(){//Este metodo nos permite trabajar el documento cuando la pagina esta cargada.
        $("#enlace-principal").css("color", "red");//Ponemos estilo a nuestro enlace encerrado con etiquetas h1
  });



Seleccionamos la id llamada "enlace-principal" y le aplicamos un estilo a la fuente de texto de color rojo, tenga en cuenta que si trabajamos en la cabecera del head necesitamos del metodo ready para que cuando todos los elementos del html esten cargados en el navegador, el codigo de selectores pueda funcionar. Se pueden omitir estos metodos y declar nuestro script antes del cierre del </body>. Una vez comprendido trabajaremos con el mismo documento.


Selectores css



En la figura anterior se habla acerca de la posición del DOM por ejemplo si quisiéramos seleccionar elementos hijos del elemento div, como las p, escribiríamos así el código,



$('div > p').css("background", "blue");


En este caso seleccionamos con ("div > p") en la forma que lo hace css. Para ver más seleccionadores nos vamos a la siguiente tabla

$(".contenido")
Selecciona la clase llamada "contenido"
$("#contenido")
Selecciona la ID llamada "contenido"
$("p")
Selecciona todos los párrafos del documento
$("p a")
Selecciona todas las <a> descendientes de un <p>
$("p, a")
Selecciona todas las <a> y <p>
$("ul.lista-de-metodos")
Selecciona todas las <ul> con clase llamada lista de metodos
$("div ~ p")
Selecciona todos los elementos <p> hermanos de div
$("div > p")
Selecciona los párrafos que son hijos directos de un <div>
$("h1 + h2")
Selecciona un <h2> precedidos de <h1> solo un hermano inmediato
$("p[class]")
Selecciona los párrafos <p> que tiene un atributo clase
$("p[id*=parrafos-solos]")
Selecciona los parrafos <p> que tienen la ID con palabra parrafos-solos
$("a[href$=html]")
Selecciona todas elementos <a> con atributo "href" terminando en html
$("a[title^=Hac]")
Selecciona todas elementos <a> con atributo "title" y la palabra empieza con "Hac"

Selectores Jquery


Con la gran variedad de selectores que tiene css,  jquery utiliza los suyos para poder interactuar con los elementos del html como se muestran a continuación:

$("p:first")
Selecciona el primer elemento <p> de la pagina
$("a[href$=html]:first")
Selecciona el primer elemento <a> que tiene atributo con terminacion html
$("p:last")
Selecciona el ultimo elemento <p>
$("li:first-child")
Selecciona todos los elemento <li> que son primeros hijos
$("li:last-child")
Selecciona ultimos hijos <li>
$("li:nth-child(1)")
Selecciona todos los primeros elementos <li> de cada <ul>
$("li:nth-child(odd)")
Selecciona los <li> que son impares
$("li:nth-child(even)")
Selecciona todos los <li> que son pares
$("p:nth-child(3n)")
Selecciona el tercer elemento <p>
$("p:odd")
Selecciona <p> impares
$("p:even")
Selecciona <p> pares
$("p:eq(2)")
Selecciona el segundo<p> comenzando desde cero
$("p:gt(1)")
Selecciona todos los<p> excepto los dos primeros y cuenta desde cero
$("p:lt(2)")
Selecciona los primeros dos elementos <p> este no cuenta desde cero

Estos son algunos selectores posicionales que funcionan a traves de la posición en que son nombrados, por ejemplo, si queremos seleccionar el primer elemento p, quedaria de la siguiente manera,


$("p:eq(0)").css("background", "red");



Metodo html y text


Ya tenemos como seleccionar los elementos, enseguida veremos algunos métodos que nos ayudan, a saber que contenido hay en los elemento, como lo es, el metodo html y text:


console.log($("h1").html());//<a href="#" id="enlace-principal">Canvaso</a>
console.log($("p:eq(0)").text());//En este tutorial veremos los siguientes elementos html que nos ayudan a seleccionar, los metodos son:


Las salidas en el caso de html() es otro elemento semantico y en el caso de metodo text() contiene solo texto. Tambien se pueden insertar datos nuevos a las etiquetas, se escribiria asi:

$("h1").html("<a id='enlace-principal' href='#'>Canvasososososote</a>");
$("p:eq(0)").text("Veremos los metodos html y text, los metodos son:");



Metodo attr


Ahora trabajamos con el atributo de una etiqueta con el método attr(), por ejemplo en una div se puede seleccionar: id y class; en un enlace: title y href; en una imagen: alt y src. Asi podemos enumerar muchos de los atributos como también los son en el formulario que veremos en otro tutorial.


console.log($("h1 a").attr("id"));//enlace-principal


de este modo accedemos a la ID de "a" que lleva por nombre "enlace-principal" que es el único del documento que dimos mas arriba y es donde estamos trabajando. Para poder insertar un attr de un solo valor, ponga un enlace en elemento link y de inicio al evento click y se abrirá otra pagina con el atributo target: _blanck.


$("a").attr("target", "_blank");


 Ahora agreguemos a ese documento html y agregamos una etiqueta <img>,  que insertaremos algunos atributos, a continuación,


$( "img" ).attr({
  src: "10.jpg",
  title: "jQuery",
  alt: "jQuery Logo"
});



Metodo CSS


El metodo css nos permite leer estilos css en la pagina mediante javascript de la siguiente forma:

$("h1").css("font-weight");//bold


Esta es la forma de acceder a sus propiedades de los elementos css, pero si queremos insertar varios estilos (ya que anteriormente escribimos solo un atributo), con las {} nos permiten insertar multiples estilos así.


$("a").css({
backgroundColor: "green",
color: "yellow",
padding: "5px 2px 5px 2px",
border: "dotted black 4px"
});


De esta manera se puede insertar varios estilos en cascada y establecer varios propiedades en su contenido.

Metodos AddClass removeClass y toggleClass


Addclass nos permite agregar una clase de estilos css a nuestros elementos, primero declaramos nuestra clase para posteriormente utilizarla

 .otro-stilo{
      color: blue;
      font-size: 20px;
      padding: 10px;
      background: white;
      }

Para tener acceso a esta clase agregamos estas lineas, que serán puestas al elemento <a> y modificara sus estilos css.


$("a").addClass("otro-stilo");


Para eliminar esta clase  se utiliza el metodo removeClass


$("a").removeClass("otro-stilo");


Para ver el funcionamiento de toggleClass necesitamos un controlador de evento de tipo click, en este caso utilizaremos el elemento h2 asi,


$( "h2" ).click(function() {
  $( this ).toggleClass("otro-stilo");
});


 su funcionamiento se dispara cuando hacemos click a cualquier h2 del documento, y cuando volvemos a dispar el evento click, esta regresa a su posicion original.


El metodo has


Este método devuelve true si se encuentra una clase igual a la que se le esta invocando y false si es todo lo contrario.


$("a").hasClass("otro-stilo");//false


En este caso no se encuentra la clase llamada otro-sitio en el elemento <a> es por eso, que devuelve false.

Seleccion de metodos


A demás del seleccionador que proporciona jquery $ define varios métodos de selección.

Metodo Find



El método devuelve el selector y encuentra la etiqueta que se le especifica en el método find

$("div#contenido").find("p").length;//Devuelve el numero de elementos p que son 4



Metodo Filter


Devuelve el selector principal y otra propiedad que se quiere encontrar, similar a esto $("div#contenido"), a continuacion se muestra


$("div").filter("#contenido").html();//Devuele todo el contenido html en div#contenido



Metod End


El metodo End() destruye la seleccion y busca el primer pariente, por ejemplo,


$("div#contenido").find("p").css("border", "solid 1px white");


aqui selecciona todas los elementoa p y le colocamos un borde, si utilizamos el metodo end() quedaria de esta manera,


$("div#contenido").find("p").end().css("border", "solid 1px white")


lo que seleccionaría seria todo el div con id "contenido" padre de las p. En el caso del método filter, este seleccionaría a todos sus div hermanos, si añadimos más div en nuestro ejemplo, posemos observar lo que pasa

<div id="contenido">...</div>
<div id="contenido-dos">Soy el contenido dos</div>
<div id="contenido-tres">Soy el contenido tres</div>


Insertamos nuestro código y vemos que sera insertado un borde verde


$("div").filter("#contenido").end().css("border", "solid 1px green");


Descarga y Enlace de Jquery Version Reciente

A veces tenemos problemas para conocer los enlaces que llevan a jquery, ya que no estamos muy familiarizados con este framework, es importantante tenerla referenciadas para su posterior uso.

El primer enlace que podemos utilizar es el de Google; asi evitariamos el almacenamiento de archivos que suelen sobrepasar los limites de nuestros servidores. A continuacion mostramos uno de los enlaces mas usados que es la primera de ellas; y en la segunda, una de las versiones mas recientes:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js'></script>

Tambien podemos enlazar los script desde la misma pagina de jquery, produccion/ desarrollo,


<script src=" http://code.jquery.com/jquery-latest.min.js"></script>

<script src="http://code.jquery.com/jquery-latest.js"></script>



y desde los oficiales de Microsoft, para alguna  actualizacion:


<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script>

<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js"></script>

 <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script>

Estos enlaces han sido todos probados y funcionan a la perfeccion, la fecha de prueba es del 15 de Octubre del 2014.

Flotar Divs en HTML Y CSS


Flotar elementos de html es una de los métodos más importantes de un maquetador, ya que tenemos que tener en cuenta las incompatibilidades  con Internet Explorer versiones antiguas que nos ocasionan problemas muy a menudo.

Hablemos primero del estilo css overflow que agregaremos a una division que es un elemento padre, referenciando a nuestras cajas que flotaremos en el contenido.



<div class="principal_3">
<div class="div_3">
1. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    </div>
<div class="div_3">
2. Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute iruret.</div>
<div class="div_3">
3.
    Exercitation ullamco laboris nisi ut aliquip ex ea commodo
    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur.
    </div>
</div>
Insertamos en nuestra hoja de estilos:


.principal_3{
    padding: 10px;
    overflow: hidden;
    background: #ee6b4d;
    zoom: 1
}
.div_3{
    background: #424a57;
    float: left; width: 30%;
 }

Lo que estamos haciendo es como ya dijimos, nombrar a overflow como hidden, ya que sin este nuestra caja padre no se desplazaría en alto con sus hijos, también vemos que tenemos a zoom que nos ayudara a tener compatibilidad con Internet Explorer. De esta forma quedarían nuestros contenidos de divisiones.

1. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
2. Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute iruret.
3. Exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.


Limpiar float


Ahora mencionaremos otro metodo que podemos implementar; y es, escribir un elemento div al final de nuestras cajas flotadas con el estilo css clear. Esto metodo se conoce como limpieza de float.

<div class="principal_3">
    <div class="div_3">1 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,  ullamco laboris nisi ut aliquip ex ea commodo
    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
    proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </div>
    <div class="div_3">2 Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. </div>
    <div class="div_3">3
    Exercitation ullamco laboris nisi ut aliquip ex ea commodo
    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
    proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </div>
    <div style="clear: both;"></div>
</div>

Los estilos quedarían de la siguiente manera,

.principal_3{
       padding: 10px;
       background: #ee6b4d;
 }
 .div_3{
       background: #424a57;
       float:left;
       width: 30%;
  }

Observamos en los estilos que solo flotamos los div_3 y nos dimos el lujo de no declarar ningún otro valor, usted puede probar con IE y ver la compatibilidad en sus versiones anteriores como la 6, que es la ultima que yo tengo acceso.

Flotar elemetos html con Display en css



Pareciera que solo hay una manera de hacer esto, yo solo conocía la que enseguida explicare y es utilizar display,

 display : inline-block;

lo único que hacemos es alinear en bloque las divs que pretendemos organizar. Ahora del ejemplo anterior, borre la div que tiene como estilo clear:both, y despues remplace el estilos float  por display, y vera que pasa. Usted notara que los bloques quedan uno más alto que otro, para poder resolverlos podemos hacer lo siguiente:

vertical-align:top;

Esta atributo css top nos permite alinear sobre la parte superior, tomando como referencia la mas alta de los elementos. Para ser menos engorrosos esto los estilos quedaria asi,


.principal_3{
    padding: 10px;
    background: #ee6b4d;
 }
 .div_3{
padding:10px;
margin:10px;
     border: solid 1px white;
     background: #424a57;
     display: inline-block;
     width: 30%;
     display: -moz-inline-pila; /*compatibilidad con Mozila en una versiones*/
     vertical-align: top;
     * Display: inline; /*Compatibilidad Con IE versiones anteriores a la 8*/
     zoom: 1;  /*Compatibilidad Con IE versiones anteriores a la 8*/
 }


Estamos viendo que para tener compatibilidad con el malo de la pelicula Internet Explorer usamos* display: inline y zoom:1, pero, a pesar de un buen funcionamiento nos hemos guardado el secreto de que "zoom" no se un estandar de css, y ahora de validar esta no puede crear errores, que de todos modos aun desarrollador web, a veces le llega a importar un poco. Si quisiéramos solucionar un poco esto, solo vastaria poner un operador condicional, que se active cuando la pagina sea cargada en un navegador de tales caracteristicas.



<!--[if IE]>
  <style>
    .div_3{
         zoom: 1;
    }
  </style>
<![endif]-->


Flotar contenidos con clear en css



Escribimos más arriba en "limpiar float" de como podemos incorporar el estilos clear en una etiqueta div y asi evitar algunos errores. El incoveniente de crear un elemento div vacio es que en temas semantica no puede estar permitido y sea no muy estetico para nuestra maquetacion. En temas de posicionamientos, esto puede llegar hacer importante, que de todos modos, una web con buenos contenidos y en algunos casos, con buen entretenimiento esto no importara. Para no tener que crear espectativas del azar, de como funciona los algoritmos de Google y salir con bajas calificaciones, podemos resolver este problema con un selector css after, que nos permite insertar contenido despues del ultima etiqueta, que en este caso son las div con clase .div_3, los estilos quedarian de la siguiente manera:


             

.div_3 {

border: 3px solid white;
/*border-bottom: 3px solid white;*/
float: left;
margin: 5px;
padding: 5px;;
width: 30%;
color:black;
background: #1abc9c;

}

.principal_3{

background: #424a57;

}

.principal_3:after {

content: ".";
display: block;
height: 0;
clear: both;
background: yellow;
padding: 1px;

}

/* Compatibilidad (after) para IE6 */
* html .principal_3 {

height: 1%;

}

/* Compatibilidad (after) para IE7 */
*:first-child+html .principal_3 {

min-height: 1px;

}

Aqui content y clear hacen todo el trabajo para tener una buena flotacion, en los comentarios escribimos las formas para que after pueda tener comparibilidad, y utilizamos display:block, para que se comporte como una linea totalmente independiente.

Flotar cajas con overflow y  height



Para terminar esta exposición uno de lo métodos  por mencionar es la utilización de height; en la pagina de libros web se menciona. Como ya sabemos el inconveniente de zoom es que no es un estandar de css, asi que  podemos utilizar height de la siguiente manera:


.principal_3{
border:   thick solid #1a1a1a;
        overflow: hidden;
        background:  #424a57;
        _height: 1%;
}
.div_3 {
       border: 3px solid white;
       float: left;
       margin: 5px;
       padding: 5px;;
       width: 30%;
       color:black;
       background: #1abc9c;
}

Lo única diferencia de las demás que ya hemos estudiado, es que utilizamos height, para poder simular lo que hace zoom, con el guion abajo que permite tener compatibilidad con IE6. Para mi esta idea no es muy convincente, al final cada quien tendrá su anécdota que contar y se llevara bien con la que más le funcione.


Texto en canvas html5


Texto en canvas es uno de los métodos que se emplean en la api de html5,  que nos ayuda a tener una mejor presentación en nuestros blogs o páginas web. Para poder trabajar con los textos de html5 se utiliza el siguiente código,

fillStyle= "color" ;
font = 'italic 40pt Calibri' ;
textAlign = 'left';
fillText('Hola Mundo!', x, y);
lineWidth = Ancho del borde o línea de texto;
strokeStyle = 'Color del borde’;
strokeText('Hola Mundo!', x, y);

fillstyle se utiliza para el color de nuestro fondo de nuestros texto; font hace referencia a la fuente del texto; textAlign alinea nuestro texto hacia el center, right y left; fillText, muestra el texto en la pantalla, X y Y son nuestras coordenadas; lineWidth es el ancho del trazo del borde; strokeStyle, es el color del trazo del borde ; y strokeText, muestra el trazo del borde en la pantalla con las coordenadas X y Y. Para ver el funcionamiento de los métodos de texto en canvas, pegamos el siguiente código en nuestro editor de texto:


<!DOCTYPE HTML>
<html>
<head>
<style>
body {
margin: 0px;
padding: 0px;
background:#1a1a1a;
}
</style>
</head>
<body>
<canvas id="miCanvas" width="700" height="300"></canvas>
<script>
var canvas = document.getElementById('miCanvas');
var ctx = canvas.getContext('2d');
ctx.beginPath();//Comienzo para pintar
ctx.fillStyle= "white" ;
ctx.font = 'italic 50pt Calibri' ;
ctx.textAlign = 'left';
ctx.fillText('Hola Mundo!', 100, 100);
ctx.lineWidth = 2;
ctx.strokeStyle = '#f7fa00';
ctx.strokeText('Hola Mundo!', 100, 100);

</script>
</body>
</html>

El texto quedaría de la siguiente manera:


Para no dejar tan simple nuestro texto podemos mejorar el texto como se muestra al principio del titulo de este tutorial, la fuente de texto es ThickDeco,

var canvas = document.getElementById('miCanvas');
var context = canvas.getContext('2d');
var x = 50;
var y = 150;
/*Ponemos un fondo con rect*/

context.beginPath();//Comienzo para pintar
context.fillStyle="#1a1a1a";
context.rect(0,0,700,300);
context.fill();

/*Las fuente de texto, el color del fondo y borde, tamaño de trazo se declaran en esta parte*/
context.font = '80pt ThickDeco ';
context.lineWidth = 10;
context.strokeStyle = ' #7600fa';
context.fillStyle = 'yellow';

/*Pintamos el fodo del texto color amarrillo y con el borde violeta*/
context.fillText('HTML5', x, y);
context.strokeText('HTML5', x, y);

/*Pintamos un segundo borde de amarillo*/
context.lineWidth = 2;
context.strokeStyle = '#f7fa00';
context.strokeText('HTML5', x, y);

Utilizamos dos trazos de borde para mejorar la apariencia de nuestro texto, la fuente nos ayuda a que se vea con más presentación; los colores se pueden modificar relacionándolo con el fondo del canvas que en este caso utilizamos, que fue el  método rect, el tamaño es el mismo que el de la etiqueta canvas y comienza a dibujar desde cero.


Prefijos CSS3

La función de los prefijos nos permiten crear compatibilidad entre distintos navegadores, para poder utilizar atributos de CSS3 como lo son: los bordes redondeados, degradados, animaciones, entre otras propiedades.

Los prefijos para los navegadores que se utilizan son los siguientes:

-wbekit- navegador como Chrome y Safari
-o- navegador Opera
-moz- navegador basados en Gecko como Firefox.
-ms- navegador Internet Explorer

Veamos un ejemplo en como utilizar los prefijos utilizando el atributo box-shadow que se utiliza para crear sombras a nuestras cajas o divisiones:


#prefijos{
width:400px;
height:400px;
box-shadow:20px 20px 1px #FFF;
-moz-box-shadow:20px 20px 1px #FFF;
webkit-box-shadow:20px 20px 1px #FFF;
-o-box-shadow:20px 20px 1px #FFF;
-ms-box-shadow:20px 20px 1px #FFF;
}


Para  ahorrarnos tiempo en escribir los prefijos de nuestro proyecto, una de las herramientas que se puede utilizar es Prefix Free como no los muestran en Ayuda Bloggers.

HTML5 Rectángulo en canvas


Para dibujar un rectángulo en canvas debemos utilizar el método rect(), el cual utiliza los parámetros x y y  para posicionar desde el origen cero; así mismo, cuenta con un ancho y  altura que dan el tamaño, ya sea para formar un rectángulo o un cuadrado, a continuación se muestra como se aplica:

beginPath();//Comenzamos a dibujar
rect(x, y, ancho, altura);
fillStyle = '#ffe33a';//El color de nuestro fondo del rectangulo
fill();//Ejecutar nuestro estilo

También podemos poner un borde a nuestro rectángulo de la siguiente manera:

lineWidth = 7;//El ancho del borde
strokeStyle = '#4388cc';//El color del borde
stroke(); //Llamar a la funcion que ejecute el borde

Abrimos nuestro editor de texto y pegamos el siguiente codigo para practicar:


<!DOCTYPE html>
<html>
  <head>
<style type="text/css">
#dibuja{
background: #1a1a1a;
}
</style>
  </head>
  <body>
    <canvas id="dibuja" width="855" height="315"></canvas>
    <script type="text/javascript">
      var canvas=document.getElementById("dibuja");
      var ctx=canvas.getContext('2d');

      ctx.rect(188, 50, 100, 100);
      ctx.fillStyle = '#ffe33a';
      ctx.fill();
      ctx.lineWidth = 7;
      ctx.strokeStyle = '#4388cc';
      ctx.stroke();
  </script>
</body>
</html>


Nos quedaría un cuadrado como se muestra en la siguiente  figura:


Podemos dibujar con rect() un cuadrado o un rectángulo cambiando los valores de ancho y altura , en esta ocasión el ancho y la altura tiene el mismo valor, formando así, un cuadrado.

Para ver el significado y la revolución que ha traído HTML5 en canvas, intentaremos dibujar confeti cuadrado de un solo color, anidando ciclos for:


var canvas=document.getElementById("dibuja");
var ctx=canvas.getContext('2d');
var x=10;
var y=10;
var incre=50;
var increy=50;
   
for(var i=0;i<150;i++){
for(var j=0;j<6;j++){
  s=incre*i;
    d=increy*j;
    ctx.beginPath();
    ctx.rect(x+s, y+d,40, 40);
    ctx.fillStyle = '#ffe33a';
    ctx.fill();
    }
}


Quedado de la siguiente manera, como se muestra en la figura de abajo:



Como observamos, los cuadro son muy grandes, así que los iremos disminuyendo hasta que nos agrade el tamaño. Para poder esparcir los cuadros, utilizaremos el método que hace girar al contexto canvas:

rotate((Math.PI/180)*5);//De 0 hasta 360 grados

Giraremos el contexto 5 grados y reduciremos nuestros cuadros hasta 13px en ambos lados:


 var canvas=document.getElementById("dibuja");
var ctx=canvas.getContext('2d');
var x=10;
var y=10;
var incre=15;
var increy=15;
        for(var i=0;i<100;i++){

        for(var j=0;j<50;j++){
s=incre*i;
        d=increy*j;
        ctx.rotate((Math.PI/180)*5);
        ctx.beginPath();
        ctx.rect(x+s,y+d,13,13);
        ctx.fillStyle = '#32ddbf';
        ctx.fill();
         }
 }


El confeti de un solo color quedar así:


Para terminar, añadimos diferentes colores a nuestros cuadros; sustituyendo el color fillStyle:

      ctx.fillStyle = 'rgb(' +
      parseInt(Math.random() * 104+104) + ',' +
      parseInt(Math.random() * 139+139) + ',' +
      parseInt(Math.random() * 111+111) + ')'; 


Círculos con canvas en html5


Para que podamos dibujar circulos en canvas el metodo que utilizaremos es arc(), sus parametros son los siguientes:

arc(x,  y, r, ca,fn,ar )
x=posición inicial x
y=posición inicial y
r=radio(tamaño de nuestro circulo);
ca=comienzo del angulo
fn=finalizar angulo
ar=booleano antimanecillas del reloj

Como siempre a veces es mejor la practica que la teoría, así es empecemos a jugar con los círculos en canvas.


<!DOCTYPE html>
<html>
  <head>
<style type="text/css">
#dibuja{
background: #1a1a1a;
}
</style>
  </head>
  <body>
    <canvas id="dibuja" width="855" height="315"></canvas>
    <script type="text/javascript">
 var canvas=document.getElementById("dibuja");
 var ctx=canvas.getContext('2d');
 ctx.beginPath();
 ctx.arc(100,100,20,0,(Math.PI/180)*360,false);
 ctx.fillStyle="white";
 ctx.fill();
 ctx.lineWidth=5;
 ctx.strokeStyle="#4388cc";
 ctx.stroke();
    </script>
  </body>
</html>


Nos quedaría de la siguiente manera:


El color de nuestro circulo blanco viene declarada en nuestro código como:

 ctx.fillStyle="white";

El tamaño de nuestro borde azul y color  viene expresado de la siguiente forma:

ctx.lineWidth=5;
ctx.strokeStyle="#4388cc";

Si desea ver el funcionamiento de nuestro inicio y final del angulo, colocaremos lo siguiente:

ctx.arc(100,100,20,(Math.PI/180)*90,(Math.PI/180)*360,false);

Veremos que se comienza a dibujar desde 90 grados hasta los 360 grados. Al igual que nuestro ultimo valor booleano "false", si lo cambiamos por  "true": nuestra cuenta comenzaría en contra del movimiento de las manecillas del reloj. Este valor booleano es opcional, ya que lo podemos ignorar y que esta siempre sera false.

Por ultimo para realizar los círculos de neon que se presenta al inicio de este tutorial, emplearemos las sobras de canvas de html5 que vienen dadas por las propiedasdes:

shadowOffsetX
shadowOffsetY
shadowBlur
shadowColor

Donde:

ShadowOffsetX.  Indica como se desplaza la sombra desde su origen con respecto a x.
ShadowOffsetY . Indica como se desplaza la sombra desde su origen con respecto a y.
ShadowBlur. El difuminado de la sombra.
ShadowColor. El color de la  sombra.

Insertamos el siguiente código en nuestro script:


         var canvas=document.getElementById("dibuja");
 var ctx=canvas.getContext('2d');
 incre=85;
  for(var i=0;i<10;i++){

 s=i*incre;
 //primer circulo blanco que simula el efecto neon
 //Su sombra es azul
 ctx.beginPath();
 ctx.shadowOffsetX = 0;
          ctx.shadowOffsetY = 0;
          ctx.shadowBlur = 40;
          ctx.shadowColor = "#4388cc";
 ctx.arc(s,100,35,0,(Math.PI/180)*360,true);
 ctx.fillStyle="white";
 ctx.fill();
 ctx.lineWidth=2;
 ctx.strokeStyle="#4388cc";
 ctx.stroke();

 //Segundo circulo azul
 //Su sombra es blanca
 ctx.beginPath();
 ctx.shadowOffsetX = 0;
          ctx.shadowOffsetY = 0;
          ctx.shadowBlur = 7;
          ctx.shadowColor = "white";
 ctx.arc(s,100,30,0,(Math.PI/180)*360,true);
 ctx.fillStyle="#001535";
 ctx.fill();
 ctx.lineWidth=2;
 ctx.strokeStyle="#4388cc"
 ctx.stroke();

 //Tercer circulo azul
 //Simula un sombra inset(hacia dentro)
 ctx.beginPath();
 ctx.shadowOffsetX = 0;
          ctx.shadowOffsetY = 0;
          ctx.shadowBlur = 15;
          ctx.shadowColor = "#4388cc";
 ctx.arc(s,100,27,0,(Math.PI/180)*360,true);
 ctx.fillStyle="#001535";
 ctx.fill();
}


Podemos variar el ultimo circulo para tener una sombra por dentro muy difuminada. Como se observa utilizamos un ciclo for para repetir círculos y evitar estar escribiendo más código, haciendo que se incremente nuestros posición de nuestros círculos cada 85px.