Documentos de Académico
Documentos de Profesional
Documentos de Cultura
01 Tutorial de HTML5
01 Tutorial de HTML5
Qu es HTML 5
En el artculo anterior publicado en DesarrolloWeb.com, "El futuro del desarrollo web: HTML 5" e plicamos las ra!ones por las "ue es #erdaderamente importante esta nue#a #ersi$n del len%ua&e de marcaci$n HTML ' #imos "ui(nes son los "ue est)n lle#ando a cabo su especificaci$n. *+ora con#endra e plicar "u( es e actamente HTML 5, 'a "ue no es simplemente una nue#a #ersi$n del len%ua&e de marcaci$n HTML, sino una a%rupaci$n de di#ersas especificaciones concernientes a el desarrollo web. Es decir, HTML 5 no se limita s$lo a crear nue#as eti"uetas, atributos ' eliminar a"uellas marcas "ue est)n en desuso o se utili!an inadecuadamente, sino "ue #a muc+o m)s all). *s pues, HTML 5 es una nue#a #ersi$n de di#ersas especificaciones, entre las "ue se encuentran: HTML , -HTML . D/M 0i#el 1 2D/M 3 Document /b&etc Model4 * la par, HTML 5 pretende proporcionar una plataforma con la "ue desarrollar aplicaciones web m)s parecidas a las aplicaciones de escritorio, donde su e&ecuci$n dentro de un na#e%ador no impli"ue falta de recursos o facilidades para resol#er las necesidades reales de los desarrolladores. 5ara ello se est)n creando unas *56s "ue permitan traba&ar con cual"uiera de los elementos de la p)%ina ' reali!ar acciones "ue +asta +o' era necesario reali!ar por medio de tecnolo%as accesorias. Estas *56, "ue tendr)n "ue ser implementadas por los distintos na#e%adores del mercado, se est)n documentando con minuciosidad, para "ue todos los 7rowsers, creados por cual"uier compa8a las soporten tal cual se +an dise8ado. Esto se +ace con la intenci$n "ue no ocurra lo "ue #iene sucediendo en el pasado, "ue cada na#e%ador +ace la %uerra por su parte ' los "ue acaban pa%)ndolo son los desarrolladores ' a la postre los usuarios, "ue tienen muc+as posibilidades de acceder a webs "ue no son compatibles con su na#e%ador preferido.
presentado. /tras muc+as caractersticas est)n toda#a simplemente en el tintero, a modo de ideas o borradores iniciales. De +ec+o, las #ersiones m)s nue#as de casi todos los na#e%adores, incluido el pol(mico 6nternet E plorer A, implementan al%unas de las caractersticas de HTML 5. Blaro "ue, para "ue una web se #ea bien en todos los sistemas, +a' "ue utili!ar s$lo a"uellas partes "ue funcionan en todos los na#e%adores, por lo "ue a da de +o', pocas son las utilidades realmente disponibles del len%ua&e, si "ueremos +acer un sitio web compatible. 0o obstante, en el peor de los casos, podemos empe!ar a usar a ni#el e perimental estas caractersticas, aun"ue s$lo sea para frotarnos las manos en espera de incorporarlas realmente en nuestras pr)cticas de desarrollo +abituales.
Estructura del cuerpo: La ma'ora de las webs tienen un formato com:n, formado por elementos como cabecera, pie, na#e%adores, etc. HTML 5 permite a%rupar todas estas partes de una web en nue#as eti"uetas "ue representar)n cada uno de las partes tpicas de una p)%ina. Etiquetas para contenido especfico: Hasta a+ora se utili!aba una :nica eti"ueta para incorporar di#ersos tipos de contenido enri"uecido, como animaciones Clas+ o #deo. *+ora se utili!ar)n eti"uetas especficas para cada tipo de contenido en particular, como audio, #deo, etc. Canvas: es un nue#o componente "ue permitir) dibu&ar, por medio de las funciones de un *56, en la p)%ina todo tipo de formas, "ue podr)n estar animadas ' responder a interacci$n del usuario. Es al%o as como las posibilidades "ue nos ofrece Clas+, pero dentro de la especificaci$n del HTML ' sin la necesidad de tener instalado nin%:n plu%in. 5uedes conocer m)s sobre este nue#o elemento en el manual de can#as "ue estamos creando en DesarrolloWeb.com Bases de datos locales: el na#e%ador permitir) el uso de una base de datos local, con la "ue se podr) traba&ar en una p)%ina web por medio del cliente ' a tra#(s de un *56. Es al%o as como las BooDies, pero pensadas para almacenar %randes cantidades de informaci$n, lo "ue permitir) la creaci$n de aplicaciones web "ue funcionen sin necesidad de estar conectados a 6nternet. Web Wor ers: son procesos "ue re"uieren bastante tiempo de procesamiento por parte del na#e%ador, pero "ue se podr)n reali!ar en un se%undo plano, para "ue el usuario no ten%a "ue esperar "ue se terminen para empe!ar a usar la p)%ina. 5ara ello se dispondr) tambi(n de un *56 para el traba&o con los Web WorDers. !plicaciones "eb #ffline: E istir) otro *56 para el traba&o con aplicaciones web, "ue se podr)n desarrollar de modo "ue funcionen tambi(n en local ' sin estar conectados a 6nternet. $eolocali%aci&n: Las p)%inas web se podr)n locali!ar %eo%r)ficamente por medio de un *56 "ue permita la ;eolocali!aci$n.
'uevas !()s para interfa% de usuario: temas tan utili!ados como el "dra% E drop" 2arrastrar ' soltar4 en las interfaces de usuario de los pro%ramas con#encionales, ser)n incorporadas al HTML 5 por medio de un *56. *in de las etiquetas de presentaci&n: todas las eti"uetas "ue tienen "ue #er con la presentaci$n del documento, es decir, "ue modifican estilos de la p)%ina, ser)n eliminadas. La responsabilidad de definir el aspecto de una web correr) a car%o :nicamente de B99. Bomo se puede #er, e istir)n #arios *56 con los "ue podremos traba&ar para el desarrollo de todo tipo de aplicaciones comple&as, "ue funcionar)n online ' offline. >ui!)s se entienda me&or por "u( HTML 5 es un pro'ecto tan ambicioso ' "ue est) lle#ando tanto tiempo para ser elaborado.
Co+patibilidad de canvas
El can#as se desarroll$ inicialmente por *pple para su na#e%ador 9afari ' lue%o fue utili!ado ' estandari!ado por la or%ani!aci$n WH*TW; para incorporarlo a HTML 5. 5osteriormente tambi(n +a sido adoptado por na#e%adores como Cirefo ' /pera. 5or lo "ue respecta a B+orme, es un na#e%ador "ue utili!a el mismo motor de renderi!ado "ue 9afari, por lo "ue tambi(n soporta el elemento Ban#as. De entre los na#e%adores m)s +abituales s$lo nos "ueda por soportar can#as el siempre pol(mico 6nternet E plorer. La :ltima #ersi$n del na#e%ador en el momento de escribir este artculo, 6nternet E plorer A, no soporta can#as con funciones nati#as, pero e isten di#ersos pro'ectos ' plu%ins "ue pueden ampliar las funcionalidades del na#e%ador para dar soporte a este nue#o elemento del HTML 5. 5or e&emplo, e iste el pro'ecto E plorer Ban#as en el "ue se +a preparado un plu%in para "ue E plorer soporte el dibu&o 1d "ue permite can#as. 9in embar%o, aun"ue en di#ersos frentes se +a comen!ado a utili!ar Ban#as, la falta de soporte de E plorer +ace "ue toda#a no sea mu' recomendable su incorporaci$n a las aplicaciones web, 'a
"ue la ma'ora de los usuarios, "ue utili!an e plorer, no podran #er las partes de la p)%ina donde se utili!a can#as. Esta situaci$n se espera "ue cambie durante los pr$ imos meses o a8os, puesto "ue la incorporaci$n de can#as al HTML 5 'a es una realidad e 6nternet E plorer m)s tarde o temprano tendr) "ue dar soporte esta utilidad en su na#e%ador, si no "uiere "ue se descarte su utili!aci$n por parte de los usuarios "ue deseen acceder a los ser#icios web m)s a#an!ados.
El e&emplo se basa en dos partes, primero una en la "ue colocaremos un lien!o can#as en un lu%ar de nuestra p)%ina, con la eti"ueta HTML "B*0G*9" ' lue%o otra parte en la "ue dibu&aremos dentro de ese elemento los rect)n%ulos con pro%ramaci$n Ia#ascript. 9obra decir "ue +ar)n falta unos conocimientos al menos b)sicos de Ia#ascript para poder traba&ar con el can#as.
LLDibu&o en el conte to del can#as conte to.fill@ect25<, <, .<, .5<4N 5rimero con el m(todo %etElement7'6d24 obten%o el elemento de la p)%ina "ue se pasa como par)metro, "ue es el can#as. Lue%o accedo al conte to 1D del can#as, "ue es el "ue tiene #arios m(todos "ue sir#en para dibu&ar en el lien!o. 5or :ltimo puedo e&ecutar tantos m(todos como desee sobre el conte to del can#as para pintar elementos en el lien!o. Bomo deca, estas sentencias Ia#ascript no son compatibles con todos los na#e%adores, por lo "ue +abr) "ue +acer unas comprobaciones b)sicas, para saber si e&ecutar o no las distintas instrucciones de dibu&o.Geamos este c$di%o, un poco m)s elaborado, "ue +ace las comprobaciones necesarias para no +acer nada en el caso "ue el na#e%ador no sea compatible con can#as. LL@ecibimos el elemento can#as #ar elemento 3 document.%etElement7'6d2Mmican#asM4N LLBomprobaci$n sobre si encontramos un elemento LL' podemos e traer su conte to con %etBonte t24, "ue indica compatibilidad con can#as if 2elemento EE elemento.%etBonte t4 O LL*ccedo al conte to de M1dM de este can#as, necesario para dibu&ar #ar conte to 3 elemento.%etBonte t2M1dM4N if 2conte to4 O LL9i ten%o el conte to 1d es "ue todo +a ido bien ' puedo empe!ar a dibu&ar LLBomien!o dibu&ando un rect)n%ulo conte to.fill@ect2<, <, .5<, .<<4N LLcambio el color de estilo de dibu&o a ro&o conte to.fill9t'le 3 MPcc<<<<MN LLdibu&o otro rect)n%ulo conte to.fill@ect2.<, .<, .<<, Q<4N R R El c$di%o est) comentado para "ue se pueda entender m)s f)cilmente. *+ora s$lo falta una :ltima cosa, "ue es e&ecutar estas acciones s$lo cuando la p)%ina est( car%ada por completo ' lista para recibirlas. Esto lo conse%uimos con la el e#ento onload del bod' de la p)%ina: Jbod' onload3"funcionDeDibu&o24"K Blaro "ue tendremos "ue crear la funcionDeDibu&o24 con el c$di%o anterior para operar con el can#as.
/ bien podemos utili!ar este otro recurso para asi%nar el e#ento directamente desde un script Ia#ascript: window.onload 3 function24O LLinstrucciones de dibu&o en can#as R El c$di%o completo de nuestro primer e&emplo de uso de can#as sera el si%uiente: J+tmlK J+eadK JtitleK5robando can#asJLtitleK JscriptK window.onload 3 function24O LL@ecibimos el elemento can#as #ar elemento 3 document.%etElement7'6d2Mmican#asM4N LLBomprobaci$n sobre si encontramos un elemento LL' podemos e traer su conte to con %etBonte t24, "ue indica compatibilidad con can#as if 2elemento EE elemento.%etBonte t4 O LL*ccedo al conte to de M1dM de este can#as, necesario para dibu&ar #ar conte to 3 elemento.%etBonte t2M1dM4N if 2conte to4 O LL9i ten%o el conte to 1d es "ue todo +a ido bien ' puedo empe!ar a dibu&ar en el can#as LLBomien!o dibu&ando un rect)n%ulo conte to.fill@ect2<, <, .5<, .<<4N LLcambio el color de estilo de dibu&o a ro&o conte to.fill9t'le 3 MPcc<<<<MN LLdibu&o otro rect)n%ulo conte to.fill@ect2.<, .<, .<<, Q<4N R R R JLscriptK JL+eadK Jbod'K Jcan#as id3"mican#as" widt+3"1<<" +ei%+t3".<<"K Este te to se muestra para los na#e%adores no compatibles con can#as. JbrK 5or fa#or, utili!a Cirefo , B+rome, 9afari u /pera. JLcan#asK
Bual"uier punto dentro del can#as se calcula con la coordenada 2 ,'4, siendo "ue la crece se%:n los pi el a la derec+a ' la ' con los pi el +acia aba&o. 5ara dibu&ar cual"uier tipo de forma en el can#as necesitaremos posicionarla con respecto a las coordenadas "ue acabamos de #er. En el e&emplo del artculo anterior, #imos "ue para dibu&ar un rect)n%ulo necesitamos #arios #alores: conte to.fill@ect2.<, .<, .<<, Q<4N Los dos primeros par)metros eran las coordenadas e ' de la es"uina superior i!"uierda del rect)n%ulo. Los dos :ltimos par)metros son los #alores de anc+ura ' altura del mismo. 5ero +a' otras formas "ue se pueden dibu&ar en un can#as "ue re"uieren el uso de m(todos con un poco m)s elaborados "ue el dibu&o de un rect)n%ulo. Lo #eremos m)s adelante.
function car%aBonte toBan#as2idBan#as4O #ar elemento 3 document.%etElement7'6d2idBan#as4N if2elemento EE elemento.%etBonte t4O #ar conte to 3 elemento.%etBonte t2M1dM4N if2conte to4O return conte toN R R return C*L9EN R 5odremos in#ocar esta funci$n ' e#aluar su resultado para saber si se obtu#o o no el conte to del can#as. #ar conte to 3 car%aBonte toBan#as2Mmican#asM4N if2conte to4O LLTen%o el conte to, entonces dibu&o sobre el can#as R En este e&emplo #amos a dibu&ar un par de rect)n%ulos, uno a!ul ' otro amarillo. Ua #imos en el anterior e&emplo c$mo se +acan formas rectan%ulares ' tambi(n aprendimos a cambiar el color de la forma. 5ara mostrar otra de las posibilidades del can#as #amos a mostrar c$mo +acer un color semitransparente. LLcambio el color de dibu&o a a!ul conte to.fill9t'le 3 MPVVVVffMN LLdibu&o un rect)n%ulo a!ul conte to.fill@ect2.<,.<,5<,5<4N LLcambio el color a amarillo con un poco de transparencia conte to.fill9t'le 3 Mr%ba2155,155,<,<.Q4MN LLpinto un rect)n%ulo amarillo semitransparente conte to.fill@ect2H5,H5,5<,5<4N 9i nos fi&amos, cuando se cambi$ el color a amarillo se especific$ el color con @;7*, esto si%nifica "ue estamos indicando tambi(n el canal *lp+a, "ue indica el %rado de transparencia desde < 2totalmente transparente4 a . 2totalmente opaco4. *clarmos de cual"uier forma "ue todas estas funciones de dibu&o las e plicaremos con detenimiento m)s adelante. El c$di%o completo de este se%undo e&emplo se puede #er a continuaci$n: J+tmlK J+eadK JtitleKBan#as se%undo e&emploJLtitleK
JscriptK LL@ecibe un identificador del elemento can#as ' car%a el can#as LLDe#ue#e el conte to del can#as o C*L9E si no +a podido conse%uise function car%aBonte toBan#as2idBan#as4O #ar elemento 3 document.%etElement7'6d2idBan#as4N if2elemento EE elemento.%etBonte t4O #ar conte to 3 elemento.%etBonte t2M1dM4N if2conte to4O return conte toN R R return C*L9EN R window.onload 3 function24O LL@ecibimos el elemento can#as #ar conte to 3 car%aBonte toBan#as2Mmican#asM4N if2conte to4O LL9i ten%o el conte to LLcambio el color de dibu&o a a!ul conte to.fill9t'le 3 MPVVVVffMN LLdibu&o un rect)n%ulo a!ul conte to.fill@ect2.<,.<,5<,5<4N LLcambio el color a amarillo con un poco de transparencia conte to.fill9t'le 3 Mr%ba2155,155,<,<.Q4MN LLpinto un rect)n%ulo amarillo semitransparente conte to.fill@ect2H5,H5,5<,5<4N R R JLscriptK JL+eadK Jbod'K Jcan#as id3"mican#as" widt+3".<<" +ei%+t3".<<"K Tu na#e%ador no soporta can#as. JLcan#asK
JLbod'K JL+tmlK El e&emplo puede #erse en marc+a en una p)%ina aparte, pero tener en cuenta "ue +ace falta disponer de compatibilidad con can#as en #uestro na#e%ador.
*unci&n fill4ect56
Esta funci$n, perteneciente al ob&eto conte to de un elemento can#as, sir#e para dibu&ar rect)n%ulos rellenos de color. @ecibe cuatro par)metros, con este es"uema: fill@ect2 ,',anc+ura,altura4 Esto dibu&a un rect)n%ulo cu'a es"uina superior i!"uierda est) en el punto 2 ,'4 ' cu'as dimensiones son altura anc+ura. El color de relleno no lo especificamos en la propia funci$n, sino "ue es el color "ue se ten%a confi%urado en ese momento como color de relleno, "ue se indica con la propiedad fill9t'le del conte to del can#as, asi%nando por e&emplo el @;7 de un color. 'ota-Bomo #imos en el artculo Entender el lien!o de can#as, antes de e&ecutar este m(todo, necesitamos acceder al conte to de un can#as, para lue%o in#ocar al m(todo sobre ese ob&eto. Esto lo #amos a dar por sabido a"u, ' recomendamos la lectura del se8alado artculo para las personas "ue ten%an dudas. 5or e&emplo, #eamos el si%uiente c$di%o:
for 2i3<NiJ3.<<NiW3.<4O conte to.fill@ect2i,i,5,54N R Esto dibu&ara una serie de rect)n%ulos, comen!ando en la posici$n 2<,<4 ' continuando con posiciones siempre de .< p eles de distancia en ambas coordenadas: 2.<,.<4, 21<,1<4 ... *cabando en la coordenada 2.<<,.<<4. Todos los rect)n%ulos ser)n de 5 p eles de alto ' anc+o, lue%o realmente son cuadrados.
*unci&n clear4ect56
Esta funci$n nos sir#e para borrar )reas rectan%ulares de un can#as ' +acerlas totalmente transparentes o sin contenido %r)fico. Cunciona de manera similar a los rect)n%ulos: clear@ect2 ,',anc+ura,altura4 El color a"u no importa muc+o, por"ue es simplemente el color del fondo del contenedor HTML donde +a'amos colocado el can#as.
JtitleKBan#as rect)n%ulosJLtitleK JscriptK LL@ecibe un identificador del elemento can#as ' car%a el can#as LLDe#ue#e el conte to del can#as o C*L9E si no +a podido conse%uise function car%aBonte toBan#as2idBan#as4O #ar elemento 3 document.%etElement7'6d2idBan#as4N if2elemento EE elemento.%etBonte t4O #ar conte to 3 elemento.%etBonte t2M1dM4N if2conte to4O return conte toN R R return C*L9EN R window.onload 3 function24O LL@ecibimos el elemento can#as #ar conte to 3 car%aBonte toBan#as2Mmican#asM4N if2conte to4O LL9i ten%o el conte to LLcambio el color de relleno de los rect)n%ulos conte to.fill9t'le 3 MPcc<<<<MN for 2i3<NiJ3.<<NiW3.<4O LL fill@ect2 ,',widt+,+ei%+t4 dibu&a un rect)n%ulo relleno de color conte to.fill@ect2i,i,5,54N R LLcambio el color de la lnea de borde del rect)n%ulo conte to.stroDe9t'le 3 MPffTTHHMN for 2i3.<<NiK3<NiS3.<4O LLstroDe@ect2 ,',widt+,+ei%+t4 dibu&a el borde de un rect)n%ulo conte to.stroDe@ect2i,.<<Si,5,54N R R R function borrarXparcial24O #ar conte to 3 car%aBonte toBan#as2Mmican#asM4N if2conte to4O LLclear@ect2 ,',widt+,+ei%+t4 borra un )rea rectan%ular del can#as de&)ndola transparente conte to.clear@ect2V<,<,,1,.5<4N R
R JLscriptK JL+eadK Jbod' b%color3"PffffTT"K Jcan#as id3"mican#as" widt+3".5<" +ei%+t3".5<"K Bontenido "ue s$lo #er)n los usuarios "ue no soportan can#as en su na#e%ador. Fsa una #ersi$n moderna de Cirefo , B+rome, 9afari, /pera... casi todos los na#e%adores e cepto E plorer son compatibles con Ban#as. JLcan#asK Ja +ref3"P" onclicD3"borrarXparcial24"K7orrado parcialJLaK JLbod'K JL+tmlK La funci$n car%aBonte toBan#as24 'a la e plicamos en el anterior artculo ' la utili!amos para obtener el ob&eto de conte to del can#as, o false en caso "ue el na#e%ador no soporte el traba&o con can#as del HTML 5. 'ota- 6nternet E plorer, al menos +asta la #ersi$n A no soporta can#as, lue%o no ser) compatible con este e&emplo. En el e#ento window.onload definimos una serie de instrucciones "ue dibu&ar)n una serie de rect)n%ulos &usto cuando la p)%ina +a'a terminado de car%arse. Bon la funci$n borrarXparcial24 simplemente borramos un )rea del can#as ' a esta funci$n se llama por medio del e#ento onclicD del enlace "ue +a' en la parte de aba&o del c$di%o. 5odemos #er el e&emplo en marc+a en una p)%ina aparte. Esperamos "ue con estas indicaciones ' el anterior e&emplo se +a'a podido entender correctamente el modo de dibu&ar rect)n%ulos en un elemento Ban#as del HTML 5. En futuros artculos #eremos c$mo dibu&ar otros tipos de formas. >ui!)s lo m)s complicado para desarrolladores sin e periencia sea la necesidad de traba&ar con el len%ua&e de pro%ramaci$n Ia#ascript, pero recordamos "ue en DesarrolloWeb.com puedes encontrar una serie de manuales de Ia#ascript "ue est)n incluso al alcance de personas "ue no +a'an pro%ramado nunca.
Estamos aprendiendo acerca del elemento Ban#as del HTML 5 ' #amos a presentar un artculo "ue nos ser#ir) para darle un to"ue personal a nuestros dise8os utili!ando un poco de color. En el anterior artculo del Manual de Ban#as del HTML 5 'a #imos un par de funciones para dibu&o de rect)n%ulos ' a+ora #amos a estudiar un poco me&or cu)les son las posibilidades para darles color. De paso, este par de e&emplos ser#ir)n para ilustrar un poco me&or el es"uema de traba&o con can#as. 5ara traba&ar con color en los elementos can#as tenemos #arias posibilidades, pero de momento #amos a aprender a modificar el color con el "ue se rellena o se dibu&a tra!ados. Bomo #imos anteriormente, al dibu&ar rect)n%ulos, podemos ele%ir entre dibu&ar s$lo su contorno o dibu&arlos rellenos de color 2' lue%o #eremos "ue esto es as con otros tipos de caminos4. *+ora #eremos "ue e isten dos atributos del conte to del can#as "ue sir#en para definir el color de relleno ' el color de tra!ado a la +ora de dibu&ar rect)n%ulos u otros caminos.
Bolor con nombre: "blue" Bolor con @;7 +e adecimal, como se define en HTML: "PffVV<<"
Bolor con @;7 en base decimal: "r%b2.<<, 15, 1<V4" Bolor @;7* 2canal alp+a o transparencia, como en B99H4: "r%ba2155, .15, <, <.54" Bon @;7 ' porcenta&e: "r%b2.<<Y, 1<Y, <4" 0osotros podremos ele%ir la "ue m)s nos con#en%a se%:n nuestro caso.
*+ora para acabar #amos a #er la funci$n "ue se encar%ar) de iniciali!ar el conte to del can#as ' definir la e&ecuci$n peri$dica de la funci$n cuadrados*leatorios24 para %enerar la animaci$n. LL#ariable %lobal conte to sin iniciali!ar #ar conte toN window.onload 3 function24O LL@ecibimos el elemento can#as conte to 3 car%aBonte toBan#as2Mmican#asM4N if2conte to4O LL9i ten%o el conte to, defino la funci$n peri$dica set6nter#al2"cuadrados*leatorios2conte to4", 1<<4N R R Todo esto &unto +ace "ue consi%amos una animaci$n en el can#as, pues se in#oca a la funci$n cuadrados*leatorios24 cada 1<< milise%undos, lo "ue %enera dibu&os aleatorios distintos cada poco tiempo. *+ora podemos #er el e&emplo en marc+a en una p)%ina aparte.
en un elemento can#as, como los rect)n%ulos. *+ora #amos a continuar aprendiendo c$mo dibu&ar estructuras di#ersas por medio de los caminos. En can#as e isten di#ersas funciones "ue nos pueden ser#ir para dibu&ar siluetas a nuestro anto&o, "ue se tienen "ue utili!ar de manera complementaria. El proceso pasa por situarse en un punto del lien!o, lue%o definir cada uno de los puntos por los "ue pasa nuestro camino ' lue%o pintar de color dentro, o simplemente dibu&ar la lnea "ue pasara por todos esos puntos. En este artculo #eremos c$mo rellenar de color todo el )rea "ue "ueda definida por un camino. Geamos para empe!ar un resumen de al%unas de las funciones disponibles para +acer caminos, las "ue "ue utili!aremos durante el presente artculo.
*unci&n be0in(at.56
Esta funci$n sir#e para decirle al conte to del can#as "ue #amos a empe!ar a dibu&ar un camino. 0o tiene nin%:n par)metro ' por si sola no +ace nin%una acci$n #isible en el can#as. Fna #e! in#ocada la funci$n podremos empe!ar a dibu&ar el camino a8adiendo se%mentos para completarlo con las diferentes funciones de caminos. 'ota- Las funciones be%in5at+24 ' si%uientes en realidad son m(todos del ob&eto de conte to del can#as. Este ob&eto "ue mantiene el conte to del can#as lo tenemos "ue e traer nosotros por medio de Ia#ascript, a partir del elemento can#as donde deseemos dibu&ar. B$mo traba&ar ' e traer el conte to de un can#as fue 'a e plicado en el artculo E&emplo de dibu&o con el *56 de can#as. 9e%:n las pruebas reali!adas, podramos iniciar un camino sin utili!ar antes be%in5at+24, puesto "ue el efecto a primera #ista es el mismo "ue si no lo in#ocamos 2entiendo "ue el na#e%ador lo in#oca por nosotros al empe!ar a utili!ar funciones de caminos en can#as4. 0o obstante, debe ser recomendable +acer las cosas correctamente e in#ocarlo antes de comen!ar un camino.
*unci&n +oveTo56
9ir#e para mo#er el puntero ima%inario donde comen!aremos a +acer el camino. Esta funci$n no dibu&a nada en si, pero nos permite definir el primer punto de un camino. Llamar esta funci$n es como si le#ant)semos el l)pi! del lien!o ' lo traslad)semos, sin pintar, a otra posici$n. @ecibe como par)metro los puntos e ' donde +a de mo#erse el puntero para dibu&o. 5ara saber cu)l es el punto donde deseamos mo#ernos 2 ,'4, @ecordar "ue el e&e de coordenadas del can#as es la es"uina superior i!"uierda.
*unci&n lineTo56
Esta funci$n pro#oca "ue se dibu&e una lnea recta, desde la posici$n actual del puntero de dibu&o, +asta el punto 2 ,'4 "ue se indi"ue como par)metro. El m(todo lineTo24, por tanto es como si pos)ramos el l)pi! sobre el lien!o en la posici$n actual ' arrastr)semos, dibu&ando una lnea recta, +asta el punto donde se defini$ al in#ocar el m(todo.
La posici$n actual del camino la podemos +aber indicado pre#iamente con un mo#eTo24, o donde +a'amos terminado una lnea dibu&ada anteriormente. 9i no se indic$ antes una posici$n de nuestro puntero de dibu&o, lineTo24 no dibu&a nin%una lnea, sino "ue se tendr) en cuenta las coordenadas en#iadas como par)metro para posicionar tan solo el puntero de dibu&o all. Dic+o de otra manera, si no se di&o d$nde empe!ar el dibu&o, o no se +a dibu&ado nin%:n otro se%mento en el camino anteriormente, lineTo24 ser) e"ui#alente a mo#eTo24.
*unci&n fill56
Este m(todo del conte to del can#as sir#e para rellenar de color el )rea circunscrita por un camino. 5ara rellenar de color un camino, el camino tendra "ue estar cerrado, por lo "ue, si no lo est), autom)ticamente se cerrar) con una lnea recta +asta el primer punto del camino, es decir, donde comen!amos a dibu&ar. 9in embar%o, si durante los distintos se%mentos del camino nos de&amos al%:n se%mento abierto, no se pintar) nada. Bomo decimos, si no lle%amos a cerrar el camino, el m(todo fill24 lo cerrar) por nosotros, pero podramos utili!ar e plcitamente el m(todo close5at+24 para +acerlo nosotros 2close5at+24 lo e plicaremos en futuros artculos4.
Bomo se puede #er, iniciamos un camino con be%in5at+24. Lue%o +acemos un mo#eTo24 para indicar el punto donde comen!ar el camino. 5osteriormente dibu&amos #arias lneas a di#ersos puntos del can#as, para acabar in#ocando al m(todo fill24, con lo "ue rellenaremos de color el camino. Ci&arse "ue el camino no se +aba lle%ado a cerrar. 5or lo "ue fill24 lo cerrar) por nosotros con una lnea al primer punto donde comen!amos el dibu&o. 'ota- 5ara e&ecutar estas lneas de c$di%o necesitaremos una instancia del ob&eto conte to del can#as, para in#ocar todos los m(todos sobre (l. El ob&eto del can#as lo tenemos en la #ariable "ct " en el c$di%o del e&emplo. En el c$di%o completo del e&ercicio podremos #er la funci$n "ue se podra utili!ar para obtener el conte to.
*unci&n close(at.56
9ir#e para cerrar un camino, #ol#iendo a su punto inicial de dibu&o. @ecordemos "ue el camino tiene un punto inicial en el "ue nos situamos para comen!ar el dibu&o, con mo#eTo24. Lue%o #amos dibu&ando se%mentos en el camino por medio de lneas "ue nos lle#an a otros puntos del lien!o. 5ues close5at+24 sera como dibu&ar una lnea recta desde el punto donde se +a'a "uedado el camino al punto inicial donde empe!amos a construirlo. El m(todo close5at+24 no recibe nin%:n par)metro.
if22iY14[3<4O ct .lineTo2iW5,i4N RelseO ct .lineTo2i,iW54N R R ct .lineTo2.,i4N ct .close5at+24N ct .stroDe24N 'ota-5rimero cabe ad#ertir de nue#o "ue para e&ecutar ese c$di%o necesitamos una #ariable "ue +emos llamado "ct " "ue contiene el conte to del can#as, "ue es sobre el "ue in#ocaremos los distintos m(todos para dibu&ar en el can#as. En el script comen!amos el camino con be%in5at+24, lue%o con mo#eTo2.,.4 nos situamos en el punto donde deseamos comen!ar el dibu&o. * continuaci$n reali!amos un bucle for para dibu&ar di#ersas lneas en di#ersas coordenadas. *cabamos +aciendo una :ltima lnea con lineTo24 ' despu(s un close5at+24 para "ue se dibu&e una lnea final +asta el punto de inicio del camino, "ue cerrar) la silueta reali!ada. Bon stroDe24 +acemos "ue se dibu&e una lnea pasando por todos los se%mentos "ue completan el camino dibu&ado. Este e&emplo podemos #erlo en una p)%ina aparte.
ct .be%in5at+24N ct .mo#eTo2.,.4N for 2i3.NiJ.<<NiW354O if22iY14[3<4O ct .lineTo2iW5,i4N RelseO ct .mo#eTo2i,iW54N R R ct .stroDe24N R R JLscriptK JL+eadK Jbod'K Jcan#as id3"mican#as" widt+3".5<" +ei%+t3".5<"K @ecicla tu browser, 5/@ C*G/@[[ JLcan#asK JbrK JbrK Jcan#as id3"mican#as1" widt+3".5<" +ei%+t3".5<"K 5/@ C*G/@, @ecicla tu na#e%ador[[ JLcan#asK JLbod'K JL+tmlK 5odemos acceder a una p)%ina con el e&emplo en funcionamiento.
En artculos anteriores 'a e plicamos c$mo +acer caminos en can#as del HTML 5 esta ocasi$n #amos a dedicarnos a dibu&ar el mismo camino, "ue es un simple +e )%ono, pero con distintas #ariantes, para "ue las personas puedan #er las diferencias entre cerrar o no los caminos, as como rellenarlos de color. En el presente artculo #eremos las si%uientes #ariantes de un camino con la forma de +e )%ono re%ular: .. 1. H. ,. Bamino relleno de color ' con el cierre de camino no e plcito. Bamino relleno de otro color ' con el cierre de camino e plcito por medio de close5at+24. Bamino sin relleno de color, s$lo la lnea, ' sin cierre de camino Bamino sin relleno de color, s$lo la lnea de la silueta ' con cierre de camino e plcito.
@ealmente es un mismo e&ercicio con #arias #ariantes "ue esperamos pueda darnos al%una pista adicional sobre el dibu&o en el elemento can#as del HTML 5. 5odemos #er una ima%en con los cuatro e&emplos de caminos "ue +aremos a continuaci$n:
ct .fill24N R
ct ct ct ct ct ct ct R
* lo lar%o del Manual del componente Ban#as del HTML 5 +emos #isto #arios e&emplos de dibu&o de caminos. 9i +emos se%uido los captulos anteriores de este manual 'a deberamos +aber co%ido un poco de pr)ctica al dibu&ar lneas "ue si%uen un camino, relleno de color o sin relleno. Lo cierto es "ue 'a podramos pasar a al%:n otro tema m)s adelantado, pero tenemos toda#a en el tintero un par de e&emplos con caminos "ue pueden ser interesantes para acabar de entender c$mo se crean. En el presente e&emplo estamos +aciendo #arios caminos en un mismo can#as ' adem)s, #amos a rellenar de colores distintos cada uno de los caminos, lo "ue nos #endr) bien para se%uir practicando. La idea de este artculo es "ue nos podamos familiari!ar un poco m)s con la pr)ctica de abrir caminos, cerrarlos ' #ol#er a abrir otros caminos. *dem)s, podemos #er "ue con un mismo camino tambi(n podemos pintar en dos partes distintas del lien!o, trasladando el puntero de dibu&o pero sin pintar.
En ese c$di%o estamos reali!ando dos caminos distintos sobre un mismo can#as. El primer camino est) separado en el c$di%o del se%undo ' los dos comien!an con un be%in5at+24. En cada camino +acemos un mo#eTo24 para colocar el puntero de dibu&o en las coordenadas deseadas. Lue%o se +ace el close5at+24 para cerrar el camino, complet)ndolo con una lnea recta desde el :ltimo punto +asta el punto desde donde comen!amos el caminio. 5ero como se puede #er en e&emplo, la llamada al m(todo close5at+24 es opcional, pues estos dos caminos se rellenan de color con fill24 ' este m(todo re"uiere "ue el camino est( cerrado. 5or eso, si el camino no se cerr$ e plcitamente con close5at+24, con la llamada a fill24 se +ace implcitamente. /tra cosa interesante es el cambio de color "ue +acemos en el se%undo camino con la propiedad fill9t'le del ob&eto can#as, en la lnea: ct .fill9t'le 3 MPffAA<<MN El primer e&emplo se puede #er en marc+a en este enlace.
ct ct ct ct R
El se%undo e&emplo en marc+a se puede #er tambi(n en una p)%ina aparte. Hemos de admitir "ue estos dos e&emplos no si%nifican un claro a#ance con respecto a lo "ue 'a +abamos relatado en el manual, pero nunca est) de m)s +acer e&emplos pr)cticos. *dem)s, +a' muc+as cosas "ue merece la pena practicar para entender bien c$mo se reali!an. En el si%uiente artculo e plicaremos nue#as t(cnicas para +acer lneas cur#as ' no s$lo lneas rectas como +asta a+ora.
M)s adelante #eremos otras maneras de sol#entar estos temas, como la utili!aci$n de im)%enes, "ue podemos importar ' "pe%ar" en el can#as, a partir de arc+i#os %r)ficos creados con cual"uier pro%rama como 5+otos+op. En los si%uientes artculos #eremos con detalle cada uno de estos tres tipos de cur#as con sus e&emplos. 5odemos comen!ar conociendo las cur#as en arcos.
Los par)metros , ' corresponden con las coordenadas del centro del arco. El par)metro radio es el n:mero de p eles "ue tiene el arco como radio. 5or su parte an%uloXinicio ' an%uloXfinal son los )n%ulos donde comien!a ' acaba el radio. Est)n tomados como si el e&e de la +ori!ontal tu#iese el )n%ulo cero. 9entidoXcontrarioXdelXrelo& es un par)metro boleano, donde true si%nifica "ue el tra!o #a desde un )n%ulo de inicio al de fin en el sentido contrario de las a%u&as del relo&. Calse indica "ue ese camino es en direcci$n contraria.
La #erdad es "ue todos los par)metros son bastante sencillos de entender, pero el )n%ulo de inicio ' fin no se indican en %rados, como podramos suponer, sino en radianes. 5ara el "ue no se acuerde, se puede +acer un paso de %rados a radianes atendiendo a la si%uiente f$rmula: @adianes 3 n:meroX56 2%radosL.A<4 5ara con#ertir %rados en radianes podramos utili!ar la si%uiente lnea de c$di%o Ia#ascript: #ar radians 3 2Mat+.56L.A<4Zde%rees 'ota- Mat+.56 es el famoso n:mero 56 2H..,.V4. En Ia#ascript, a partir de la clase Mat+, tenemos acceso a esa constante, as como di#ersas funcines matem)ticas. Ger las notas sobre la clase Mat+.
En la ima%en anterior tenemos #arios #alores de radianes: < @adianes seran cero %rados ' es el punto marcado por <56, en el e&e de las - ' a la derec+a del centro de la circunferencia. <.5 56 @adianes seran T< %rados el punto del e&e de las U aba&o del centro. . 56 @adianes es media circunferencia, .A< %rados. ..5 56 @adianes sera el e"ui#alente a 1Q< %rados 1 56 @adianes son los HV< %rados de la circunferencia completa ' correspondera con el mismo punto "ue los cero %rados. *s pues, para +acer un crculo completo con centro en 25<, 5<4 de 1< p eles de radio, podramos utili!ar un c$di%o como este: conte toBan#as.arc25<, 5< ,1< , <, Mat+.56Z1, false4N
Bomo se puede #er, la circunferencia empie!a en < 56 2cero4 ' termina en 1 56.
En realidad aun"ue pare!ca una fi%ura un poco comple&a de +acer, se consi%ue con dos caminos. El primer camino se rellena con color ne%ro ' el se%undo con color naran&a. En la si%uiente ima%en se puede #er de una manera m)s clara los caminos "ue +abra en para +acer ese dise8o.
El primer camino tiene dos arcos conc(ntricos, uno con radio ma'or ' el se%undo con un radio menor. Este primer camino comien!a en el radio ma'or ' se puede #er una lnea %ris "ue +emos puesto, con unas flec+as, para poder reconocer la direcci$n "ue lle#a el camino.
@ecordar "ue este c$di%o es parcial, puesto "ue las partes "ue faltaran para completarlo, como la funci$n car%aBonte toBan#as24 o el HTML del elemento can#as, 'a las conocemos de di#ersos artculos anteriores del Manual de Ban#as. De todos modos pod(is #er el c$di%o fuente del e&ercicio, "ue se puede #er en marc+a de una p)%ina aparte.
Fna manera sencilla de entender este m(todo sera #er la si%uiente ima%en:
En el anterior %r)fico tenemos tres puntos: .. El primero, marcado con color morado, es la posici$n del puntero de dibu&o al iniciar la cur#a cuadr)tica. Ese punto no lo definimos al +acer la llamada al m(todo "uadraticBur#eTo24 por"ue 'a est) implcito en el conte to del can#as. En cual"uier caso se puede cambiar con una llamada a mo#eTo24 como +emos #isto en artculos anteriores. 1. El se%undo punto, marcado con color ro&o, es la tendencia de la cur#a cuadr)tica. Ese punto decimos "ue es ima%inario por"ue no aparece en la cur#a. 9implemente sir#e para definir c$mo ser) la cur#atura. 9e define con los par)metros pc , pc'. H. El tercer punto, dibu&ado en #erde, es el final de la cur#a, definido por los par)metros , '.
*+ora podramos +acer un rect)n%ulo redondeado con la si%uiente llamada: #ar ct 3 car%aBonte toBan#as2Mmican#asM4N if2ct 4O rounded@ect2ct , .<, .<, .H<, ..<, 1<4N R
'ota- @ecordemos "ue el "More" de Mootools son una serie de scripts para crear interfaces de usuario a#an!adas. 9e descar%a por separado del "Bore", "ue es el frameworD fundamental. 5or supuesto, para poder implementar los componentes del "More" se necesita tener disponible el "Bore". En principio dicen en la p)%ina de Mootools "ue para e&ecutar cual"uier componente del "More" es necesario +aber descar%ado el "Bore" completo. *s pues, para la parte del slider tenemos "ue incluir los scrips "Bore" ' "More" Jscript src3"mootoolsS..1.,ScoreS'c.&s" t'pe3"te tL&a#ascript"KJLscriptK Jscript src3"mootoolsS..1.,.1Smore.&s" t'pe3"te tL&a#ascript"KJLscriptK Lue%o podramos tener un HTML como este para producir el contenedor del slider: Jdi# id3"slidercontenedor" st'le3"widt+:11<p N paddin%: 5p <p N bacD%roundScolor:PeeeeeeN"K Jdi# id3"slidercontrol" st'le3"widt+:.<p N +ei%+t: .<p N bacD%roundScolor:PTTTTddN"KJLdi#K JLdi#K Jdi#KGalor: Jspan id3"#alor"K1<JLspanKJLdi#K *+ora podemos #er el script Mootols para %enerar din)micamente el componente a partir de estos elementos HTML. window.addE#ent2"domread'", function24O #ar mi9lider 3 new 9lider2"slidercontenedor", "slidercontrol",O Mran%eM: \<,55], MstepsM: 55, Minitial9tepM: 1<, onB+an%e: function2lu%ar4O actuali!a@adio@ectan%ulo2lu%ar4N ^2"#alor"4.set2"+tml", lu%ar4N R R4N R4N
J+tmlK J+eadK Jscript src3"mootoolsS..1.,ScoreS'c.&s" t'pe3"te tL&a#ascript"KJLscriptK Jscript src3"mootoolsS..1.,.1Smore.&s" t'pe3"te tL&a#ascript"KJLscriptK JtitleKBur#as cuadr)ticasJLtitleK JscriptK LL@ecibe un identificador del elemento can#as ' car%a el can#as LLDe#ue#e el conte to del can#as o C*L9E si no +a podido conse%uise function car%aBonte toBan#as2idBan#as4O #ar elemento 3 document.%etElement7'6d2idBan#as4N if2elemento EE elemento.%etBonte t4O #ar conte to 3 elemento.%etBonte t2M1dM4N if2conte to4O return conte toN R R return C*L9EN R LLBrea un rect)n%ulo con las es"uinas rendondeadas function rounded@ect2ct , ,',widt+,+ei%+t,radius4O ct .be%in5at+24N ct .mo#eTo2 ,'Wradius4N ct .lineTo2 ,'W+ei%+tSradius4N ct ."uadraticBur#eTo2 ,'W+ei%+t, Wradius,'W+ei%+t4N ct .lineTo2 Wwidt+Sradius,'W+ei%+t4N ct ."uadraticBur#eTo2 Wwidt+,'W+ei%+t, Wwidt+,'W+ei%+tSradius4N ct .lineTo2 Wwidt+,'Wradius4N ct ."uadraticBur#eTo2 Wwidt+,', Wwidt+Sradius,'4N ct .lineTo2 Wradius,'4N ct ."uadraticBur#eTo2 ,', ,'Wradius4N ct .stroDe24N R function actuali!a@adio@ectan%ulo2radio4O radio 3 parse6nt2radio4 if 2is0a02radio44 O radio 3 <N R #ar ct 3 car%aBonte toBan#as2Mmican#asM4N if2ct 4O ct .clear@ect2<,<,.5<,.5<4N
rounded@ect2ct , .<, .<, .H<, ..<, radio4N R R window.onload 3 function24O LL@ecibimos el elemento can#as #ar ct 3 car%aBonte toBan#as2Mmican#asM4N if2ct 4O rounded@ect2ct , .<, .<, .H<, ..<, 1<4N R R JLscriptK JscriptK window.addE#ent2"domread'", function24O #ar mi9lider 3 new 9lider2"slidercontenedor", "slidercontrol",O Mran%eM: \<,55], MstepsM: 55, Minitial9tepM: 1<, onB+an%e: function2lu%ar4O actuali!a@adio@ectan%ulo2lu%ar4N ^2"#alor"4.set2"+tml", lu%ar4N R R4N R4N JLscriptK JL+eadK Jbod'K Jcan#as id3"mican#as" widt+3".5<" +ei%+t3".5<"K @ecicla tu na#e%ador[[ JLcan#asK Jform name3"fradio"K @adio: Jinput t'pe3"te t" name3"radio" #alue3".<" onDe'up3"actuali!a@adio@ectan%ulo2t+is.#alue4"K JLformK JbrKJbrK *rrastra el cuadradito a!ul para cambiar el radio del borde redondeado: Jdi# id3"slidercontenedor" st'le3"widt+:11<p N paddin%: 5p <p N bacD%roundScolor:PeeeeeeN"K Jdi# id3"slidercontrol" st'le3"widt+:.<p N +ei%+t: .<p N bacD%roundScolor:PTTTTddN"KJLdi#K JLdi#K
Jdi#KGalor: Jspan id3"#alor"K1<JLspanKJLdi#K JLpK JLbod'K JL+tmlK Cinali!amos con el enlace a la p)%ina donde est) el e&emplo en marc+a.
Bomo podemos #er, el m(todo be!ierBur#eTo24 tiene V par)metros "ue corresponden con las coordenadas de H puntos, pero en la ima%en se utili!an +asta , puntos para definir la cur#a 7e!ier, pues el punto de incicio de la cur#a 'a estaba en el conte to del can#as. *s "ue, atendiendo a la anterior ima%en, estos seran los puntos necesarios para componer la cur#a 7e!ier: .. El primer punto, marcado con color morado, es el punto inicial de la cur#a. Este punto no se tiene "ue definir, pues 'a est) implcito en el conte to del can#as, en el lu%ar donde estaba el puntero de dibu&o al llamar al m(todo be!ierBur#eTo24. 'ota- *l dibu&ar cual"uier se%mento de un camino tenemos definido siempre de antemano el punto inicial de ese se%mento del camino, pues es el lu%ar donde est) el puntero de dibu&o. 0osotros podramos cambiar ese puntero de dibu&o, para cambiar el primer punto de la cur#a, con una llamada al m(todo mo#eTo24. 1. El se%undo punto, "ue se +a marcado de color #erde, es la tendencia de la primera parte de la cur#a, "ue se indica con los par)metros pc. , pc.'. H. El tercero, marcado de color ro&o, es la tendencia de la se%unda parte de la cur#a, "ue se indica con los par)metros pc1 , pc1'. ,. Cinalmente, tenemos el punto final de la cur#a, marcado en color %ris, "ue se indica con los par)metros ,'.
ct ct ct ct ct R
La cur#a anterior se puede #er representada en una p)%ina aparte. *+ora podemos complicar un poco m)s ese e&emplo para crear otros caminos con cur#as 7e!ier, con la particularidad de "ue #amos a rellenarlos con colores semitransparentes. 'ota- 0osotros asi%namos colores de relleno para los caminos con la propiedad fill9t'le del ob&eto conte to del can#as. 5odemos asi%nar un color con un c$di%o @;7 de una manera "ue 'a conocemos: ct .fill9t'le 3 "Pccccff"N 5ero aparte, tambi(n podemos indicar colores con #alores @;7 en decimal, de manera similar a como se +ace en B99, e incluso podemos asi%nar #alores @;7* 2con canal alp+a para la transparencia4. ct .fill9t'le 3 Mr%ba2.<<,1H<,.<<,<.H4MN ct ct ct ct ct ct ct ct ct ct ct ct ct ct ct ct ct .be%in5at+24N .fill9t'le 3 Mr%ba2.<<,1H<,.<<,<.H4MN .mo#eTo2<,T<4N .be!ierBur#eTo2T<,Q,..<,.5,.,<,H<4N .be!ierBur#eTo2.H<,55,.,<,V5,.,5,Q<4N .be!ierBur#eTo2.A<,,5,.T<,55,1<<,T54N .lineTo21<<,.5<4N .lineTo2<,.5<4N .fill24N .be%in5at+24N .fill9t'le 3 Mr%ba21H<,1H<,.<<,<.H4MN .mo#eTo25<,.5<4N .be!ierBur#eTo2T<,Q,..<,.5,.V<,.<4N .be!ierBur#eTo2.H<,.<5,.,<,.H5,1<<,H54N .lineTo21<<,.5<4N .lineTo2<,.5<4N .fill24N
Breando esos otros caminos el e&emplo "ueda como se puede #er en este enlace +ttp:LLwww.desarrolloweb.comLarticulosLe&emplosL+tml5Lbe!ierScur#e.+tml.
Bon esto tenemos una #ariable llamada "im%" "ue tiene un ob&eto ima%en dentro. Ese ob&eto ima%en en estos momentos est) sin nin%:n atributo. 5odramos decir "ue est) sin iniciali!ar. La tarea de iniciali!aci$n fundamental sera asi%narle una ruta a un arc+i#o %r)fico. im%.src 3 Mlo%oS%rande.&p%MN Esto +ace "ue en el ob&eto 6ma%e se car%ue la ima%en "ue est) en el arc+i#o Mlo%oS%rande.&p%M ' como no +emos especificado nin%:n directorio en la ruta, se supone "ue ese arc+i#o est) en la misma carpeta "ue el arc+i#o HTML donde est( ese c$di%o Ia#ascript. Fna #e! tenemos el ob&eto ima%en, podramos pintarlo en un can#as por medio de la funci$n draw6ma%e24. 9era al%o parecido a esto: ct .draw6ma%e2im%, .<, .<4N 5ero atenci$n, por"ue este c$di%o tiene un detalle: la ima%en no se dibu&ar) en el can#as a no ser "ue est( pre#iamente car%ada en el na#e%ador. En la secuencia de instrucciones, tal como lo tenemos a+ora: #ar im% 3 new 6ma%e24N im%.src 3 Mlo%oS%rande.&p%MN ct .draw6ma%e2im%, .<, .<4N El na#e%ador al especificar el arc+i#o de la ima%en, actuali!ando el atributo src, tiene "ue descar%arlo ' eso lle#a un tiempo. 5or tanto, si inmediatamente a indicar el arc+i#o, intentamos dibu&ar la ima%en, dar) un problema. Dic+o de otra manera, s$lo podemos dibu&ar la ima%en cuando estamos se%uros "ue el na#e%ador 'a la +a descar%ado. 5ara ase%urarnos de este punto, podemos usar el e#ento onload de la ima%en, para llamar a draw6ma%e24 s$lo cuando la ima%en +a terminado de car%arse. #ar im% 3 new 6ma%e24N im%.src 3 Mcan#asS+tml5.pn%MN im%.onload 3 function24O ct .draw6ma%e2im%, .<, .<4N R
function car%aBonte toBan#as2idBan#as4O #ar elemento 3 document.%etElement7'6d2idBan#as4N if2elemento EE elemento.%etBonte t4O #ar conte to 3 elemento.%etBonte t2M1dM4N if2conte to4O return conte toN R R return C*L9EN R
window.onload 3 function24O LL@ecibimos el elemento can#as #ar ct 3 car%aBonte toBan#as2Mmican#asM4N if2ct 4O LLBreo una ima%en conun ob&eto 6ma%e de Ia#ascript #ar im% 3 new 6ma%e24N LLindico la F@L de la ima%en im%.src 3 Mlo%oSdesarrolloweb.%ifMN LLdefino el e#ento onload del ob&eto ima%en im%.onload 3 function24O LLinclu'o la ima%en en el can#as ct .draw6ma%e2im%, .<, .<4N R R R JLscriptK JL+eadK Jbod'K Jcan#as id3"mican#as" widt+3"1<<" +ei%+t3".<<"K Tu na#e%ador no soporta can#as. JLcan#asK JLbod'K JL+tmlK 5odemos #er el e&emplo en marc+a en una p)%ina aparte.
En el si%uiente artculo #amos a mostrar di#ersas maneras de acceder a ob&etos 6ma%e desde Ia#ascript para mostrar esas im)%enes en el can#as.
=:; Especificar la i+a0en en for+ato data-url- "ue es una cadena de caracteres en formato 7aseV, "ue permite especificar elementos como im)%enes a partir de c$di%o, pero como si esos elementos los ad"uiri(semos remotamente. LLa tra#(s de un "data: url" #ar im% 3 new 6ma%e24N im%.src 3 Mdata:ima%eL%ifNbaseV,,@<l;/Dl+Bw*L*6******HpnL_iH57*E***E*L******L**s***6F+*W+Dc u/,lm0GindoQ"'r6-i;7U*/w33MN ct .draw6ma%e2im%, H<<, 1<<4N 5:; !cceder a el dise@o dibu,ado en otro canvas- para mostrar en un can#as el contenido de otro, como si fuera una ima%en. LLconsi%o una ima%en desde un can#as #ar im%Ban#as 3 document.%etElement7'6d2"can#as1"4N ct .draw6ma%e2im%Ban#as, .<<, .1<4N Este "uinto ' :ltimo m(todo permite al%unas aplicaciones interesantes, como mostrar un un can#as una miniatura de lo "ue +a' en otro can#as.
window.onload 3 function24O LLcar%o un camino en un can#as, para lue%o traerlo como ima%en #ar ct 3 car%aBonte toBan#as2Mcan#as1M4N if2ct 4O ct .fill9t'le 3 MPTT<<<<MN ct .be%in5at+24N ct .mo#eTo25<,.54N ct .lineTo2..1,.54N ct .lineTo2.,H,VT4N ct .lineTo2..1,.1H4N ct .lineTo25<,.1H4N ct .lineTo2.T,VT4N ct .close5at+24N ct .fill24N R
LL@ecibimos el elemento can#as #ar ct 3 car%aBonte toBan#as2Mmican#asM4N if2ct 4O LLBreo un ob&eto 6ma%e con una ima%en de la pa%ina #ar im% 3 document.%etElement7'6d2"im."4N ct .draw6ma%e2im%, .<, .<4N LLconsi%o una ima%en desde el arra' de im)%enes ct .draw6ma%e2document.ima%es\.], .11, 1<4N LLconsi%o una ima%en desde un can#as #ar im%Ban#as 3 document.%etElement7'6d2"can#as1"4N ct .draw6ma%e2im%Ban#as, .<<, .1<4N LLun ob&eto 6ma%e #ar ima%en 3 new 6ma%e24N ima%en.src 3 "+ttp:LLwww.desarrolloweb.comLima%esLiconosLuserX%o.pn%"N ima%en.onload 3 function24O ct .draw6ma%e2ima%en, HH<, .T54N R
LLa tra#(s de un "data: url" #ar im% 3 new 6ma%e24N im%.src 3 Mdata:ima%eL%ifNbaseV,,@<l;/Dl+Bw*L*6******HpnL_iH57*E***E*L******L**s***6F+*W+Dc u/,lm0GindoQ"'r6-i;7U*/w33MN ct .draw6ma%e2im%, H<<, 1<<4N R document.ima%es\.].src 3 Mdata:ima%eL%ifNbaseV,,@<l;/Dl+Bw*L*6******HpnL_iH57*E***E*L******L**s***6F+*W+Dc u/,lm0GindoQ"'r6-i;7U*/w33MN R JLscriptK JL+eadK Jbod'K J+1KBan#as "ue esto' creando con una serie de im)%enesJL+1K Jcan#as id3"mican#as" widt+3"5<<" +ei%+t3",<<"K Tu na#e%ador no soporta can#as. JLcan#asK JpK Jdi# st'le3"displa': noneN"K J+1KBosas "ue pon%o a"u para acceder desde Ia#ascriptJL+1K Jim% src3"can#asS+tml5.pn%" id3"im."K Jim% src3"lo%oS%rande.&p%"K JpK Jcan#as id3"can#as1" widt+3".5<" +ei%+t3".5<"K @ecicla tu na#e%ador[[ JLcan#asK JLdi#K JLbod'K JL+tmlK Este e&emplo se puede #er en una p)%ina aparte. En futuros artculos mostraremos c$mo podemos alterar la forma de las im)%enes din)micamente, para mostrarlas en el can#as con al%unos cambios.
tratamiento de im)%enes en Ban#as, "ue nos permitir)n redimensionar ' recortar las im)%enes antes de pintarlas. El m(todo es bien simple ' consiste en in#ocar al m(todo "ue dibu&a las im)%enes, draw6ma%e24, en#iando distintos &ue%os de par)metros. *nteriormente 'a +abamos traba&ado con este m(todo, "ue como debemos saber, pertenece al ob&eto conte to de un can#as. En el pasado lo llamamos simplemente en#i)ndole la ima%en ' las coordenadas donde +aba "ue colocarla. *+ora #amos a #er los otros dos modos de in#ocarlo, por medio de par)metros adicionales, "ue nos faltan por conocer. El primero de los modos de in#ocaci$n permite escalar una ima%en ' el se%undo recortarla ' escalarla en un mismo paso.
R R Este e&emplo dibu&a la misma ima%en tres #eces, dos de ellas est) escalada a distintas dimensiones ' la :ltima est) a tama8o natural 2sin redimensionar4. 5uedes #er el e&emplo en funcionamiento en una p)%ina aparte.
5odemos #er a continuaci$n el c$di%o de un e&emplo "ue reali!a el recorte ' escalado de una ima%en. #ar ct 3 car%aBonte toBan#as2Mmican#asM4N if2ct 4O LLBreo una ima%en conun ob&eto 6ma%e de Ia#ascript #ar im% 3 new 6ma%e24N
LLindico la F@L de la ima%en im%.src 3 Msa%radaSfamilia.&p%MN LLdefino el e#ento onload del ob&eto ima%en im%.onload 3 function24O ct .draw6ma%e2im%, .QQ, .., .1< , 1H,, .<, .<, T<, .QV4N LLtama8o natural ct .draw6ma%e2im%, .V<, 1<4N R R Este e&emplo dibu&a una ima%en un par de #eces. 5rimero recorta un )rea de la ima%en ori%inal ' la escala, por el m(todo de draw6ma%e24 "ue acabamos de relatar. Lue%o dibu&a la ima%en ori%inal, sin recortar ni escalar, ' la coloca al lado de la otra, en el mismo can#as. 5ara acabar, de&amos un enlace, de modo "ue puedas #er este se%undo e&emplo de traba&o con im)%enes en can#as.