Professional Documents
Culture Documents
com
Parte 1:
Introduccin a HTML 5
%u& es '()! * " +u& no,edades traer- consigo en el desarrollo de p-ginas web. entre las +ue destaca el elemento /0#102. +ue estamos e3plicando en el presente manual.
1.1.- Qu es HTML 5
"eremos qu# es HTML 5, su previsi$n de tiempo para convertirse en una especi%icaci$n recomendada y las novedades m&s si'ni%icativas que proporcionar&! 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.
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com tanto, muc+as de las caractersticas de HTML 5 est)n 'a listas para ser implementadas, en un punto de desarrollo "ue se encuentra cercano al "ue finalmente ser) 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.
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.
Artculo por
1.2.- Introdu
Canvas es uno de los componentes m&s novedosos de est&ndar HTML 5 que sirve para dibujar din&micamente im&'enes en una p&'ina (eb! HTML 5 #iene con #arias no#edades interesantes ' una de las "ue podemos empe!ar a probar 'a es el Ban#as. Ban#as si%nifica en espa8ol al%o as como lien!o ' es b)sicamente eso, un )rea donde podemos dibu&ar como si fuera un lien!o. El elemento can#as permite especificar un )rea de la p)%ina donde se puede, a tra#(s de scripts, dibu&ar ' renderi!ar im)%enes, lo "ue ampla notablemente las posibilidades de las p)%inas din)micas ' permite +acer cosas "ue +asta a+ora estaban reser#adas a los desarrolladores en Clas+, con la #enta&a "ue para usar can#as no ser) necesario nin%:n plu%in en el na#e%ador, lo "ue me&orar) la disponibilidad de esta nue#a aplicaci$n. En este artculo ' los si%uientes pretendemos dar una introducci$n a can#as, para los lectores de DesarrolloWeb.com interesados en conocer de cerca esta nue#a utilidad de HTML 5. *l menos esperamos dar a conocer las posibilidades del can#as ' ofrecer al%unos e&emplos "ue se puedan probar 'a en los na#e%adores m)s modernos.
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com puede destacar 7espin, un editor de c$di%o de Mo!illa, o ;oo%le Wa#e. En la entrada de la WiDi sobre Ban#as podemos encontrar di#ersos enlaces a sitios web con e&emplos de uso de este elemento del HTML 5. En los si%uientes artculos #eremos e&emplos de uso de can#as ' e plicaremos c$mo podemos utili!ar nosotros mismos esta nue#a +erramienta del HTML 5.
Artculo por
Parte 2:
El elemento tiene apertura ' cierre ' entre medias podemos escribir un te to "ue ser) lo "ue #ean los usuarios "ue entren
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com con na#e%adores "ue no soporten la eti"ueta B*0G*9. 5ara especificar las caractersticas de este can#as tenemos #arios atributos: Atributo id# 5ara asi%narle un nombre :nico ' lue%o referirnos a este can#as desde Ia#ascript. Atributos widt$ % $ei&$t# 5ara indicar la anc+ura ' altura del )rea del can#as. /tros atributos se pueden colocar de manera opcional, como por e&emplo st'le, para indicar atributos de +o&as de estilo para definir el aspecto del lien!o.
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.
''(ecibimos el elemento canvas var elemento = document.getElement)*+d,-micanvas-./ ''$omprobaci4n sobre si encontramos un elemento ''* podemos extraer su contexto con get$ontext,.! 5ue indica compatibilidad con canvas i ,elemento 66 elemento.get$ontext. 7 ''0ccedo al contexto de -2d- de este canvas! necesario para dibu1ar var contexto = elemento.get$ontext,-2d-./ i ,contexto. 7 ''%i tengo el contexto 2d es 5ue todo ha ido bien * puedo empe"ar a dibu1ar ''$omien"o dibu1ando un rect8ngulo contexto. ill(ect,0! 0! 130! 100./ ''cambio el color de estilo de dibu1o a ro1o contexto. ill%t*le = -9cc0000-/ ''dibu1o otro rect8ngulo contexto. ill(ect,10! 10! 100! :0./ ; ;
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:
<bod* onload=" uncion2e2ibu1o,.">
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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 = unction,.7 ''instrucciones de dibu1o en canvas ;
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com En este artculo #amos a e plicar las caractersticas de nuestro lien!o ' las coordenadas con las "ue podemos mo#ernos por (l ' reali!ar dibu&os.
5odemos #er el si%uiente dia%rama para tener una idea e acta de las dimensiones ' coordenadas en un can#as.
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:
contexto. ill(ect,10! 10! 100! :0./
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.
5odremos in#ocar esta funci$n ' e#aluar su resultado para saber si se obtu#o o no el conte to del can#as.
var contexto = carga$ontexto$anvas,-micanvas-./ i ,contexto.7 ''=engo el contexto! entonces dibu1o sobre el canvas ;
En este e&emplo #amos a dibu&ar un par de rect)n%ulos, uno a!ul ' otro amarillo. La #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.
''cambio el color de dibu1o a a"ul contexto. ill%t*le = -9>>>> -/ ''dibu1o un rect8ngulo a"ul contexto. ill(ect,10!10!30!30./ ''cambio el color a amarillo con un poco de transparencia contexto. ill%t*le = -rgba,233!233!0!0.:.-/ ''pinto un rect8ngulo amarillo semitransparente contexto. ill(ect,?3!?3!30!30./
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:
<html> <head> <title>$anvas segundo e1emplo<'title> <script> ''(ecibe un identi icador del elemento canvas * carga el canvas ''2evueve el contexto del canvas o #0<%E si no ha podido conseguise unction carga$ontexto$anvas,id$anvas.7 var elemento = document.getElement)*+d,id$anvas./ i ,elemento 66 elemento.get$ontext.7 var contexto = elemento.get$ontext,-2d-./ i ,contexto.7 return contexto/ ; ; return #0<%E/ ; window.onload = unction,.7 ''(ecibimos el elemento canvas var contexto = carga$ontexto$anvas,-micanvas-./
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.
Artculo por
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
10
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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.
Nota#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.
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.
Dibu&a el borde de un rect)n%ulo comen!ando en la posici$n 2 ,'4 para su es"uina superior i!"uierda ' con las dimensiones de altura anc+ura.
or ,i=100/i>=0/iB=10.7 contexto.stroAe(ect,i!100Bi!3!3./ ;
Bon el c$di%o anterior tambi(n dibu&amos una serie de cuadrados en el can#as, aun"ue en esta ocasi$n s$lo la silueta sin estar rellenos de color, de 5 p eles de anc+ura ' altura ' con distintas coordenadas "ue producimos al +acer el bucle for. De manera similar, para definir el color del borde del rect)n%ulo, utili!amos la propiedad stroDe9t'le del ob&eto del conte to del can#as, a la "ue podemos asi%nar el #alor @;7 "ue deseemos para el borde de los cuadrados o a"uello "ue #a'amos a dibu&ar en el can#as.
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.
11
window.onload = unction,.7 ''(ecibimos el elemento canvas var contexto = carga$ontexto$anvas,-micanvas-./ i ,contexto.7 ''%i tengo el contexto ''cambio el color de relleno de los rect8ngulos contexto. ill%t*le = -9cc0000-/ or ,i=0/i<=100/i@=10.7 '' ill(ect,x!*!width!height. dibu1a un rect8ngulo relleno de color contexto. ill(ect,i!i!3!3./ ; ''cambio el color de la lCnea de borde del rect8ngulo contexto.stroAe%t*le = -9 DD??-/ or ,i=100/i>=0/iB=10.7 ''stroAe(ect,x!*!width!height. dibu1a el borde de un rect8ngulo contexto.stroAe(ect,i!100Bi!3!3./ ;
; ;
unction borrarEparcial,.7 var contexto = carga$ontexto$anvas,-micanvas-./ i ,contexto.7 ''clear(ect,x!*!width!height. borra un 8rea rectangular del canvas de18ndola transparente contexto.clear(ect,>0!0!F2!130./ ; ; <'script> <'head> <bod* bgcolor="9 DD">
<canvas id="micanvas" width="130" height="130"> $ontenido 5ue s4lo ver8n los usuarios 5ue no soportan canvas en su navegador. Gsa una versi4n moderna de #ire ox! $hrome! %a ari! &pera... casi todos los navegadores excepto Explorer son compatibles con $anvas. <'canvas> <a hre ="9" onclicA="borrarEparcial,.">)orrado parcial<'a> <'bod*> <'html>
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.
Nota# 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 borrarMparcial24 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
12
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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.
Artculo por
9uponiendo "ue tenemos el ob&eto conte to de un can#as en la #ariable ct , con la anterior lnea estamos solicitando al elemento can#as "ue la pr$ ima #e! "ue se rellene el color se +a%a en ro&o oscuro.
Bon esa lnea estamos marcando "ue el color de tra!ado sea a!ul oscuro. 5or lo cual, la pr$ ima #e! "ue se +a%a un tra!ado la lnea ser) de ese color.
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 0osotros podremos ele%ir la "ue m)s nos con#en%a se%:n nuestro caso.
*+ora #amos a mostrar otra funci$n para dibu&ar el lien!o de un can#as, rellenando de cuadraditos con colores aleatorios:
unction cuadrados0leatorios,.7 or,i=0/ i<?00/ i@=10.7 or,1=0/ 1<230/ 1@=10.7 contexto. ill%t*le = color0leatorio,./ contexto. ill(ect,i!1!10!10. ; ; ;
Bomo se puede #er, tenemos un bucle anidado, "ue reali!a la tarea. En cada iteraci$n se obtiene un color aleatorio ' lue%o se pinta un rect)n%ulo con ese color. La funci$n utili!a una #ariable %lobal llamada "conte to", "ue es el conte to del can#as sobre el "ue estamos dibu&ando. *+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.
''variable global contexto sin iniciali"ar var contexto/ window.onload = unction,.7 ''(ecibimos el elemento canvas contexto = carga$ontexto$anvas,-micanvas-./ i ,contexto.7 ''%i tengo el contexto! de ino la unci4n peri4dica set+nterval,"cuadrados0leatorios,contexto."! 200./ ; ;
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.
14
Parte 3:
15
Nota# 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.
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.
16
Nota# 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.
17
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com En el presente artculo #eremos dos nue#as funciones :tiles en la creaci$n de caminos, "ue son close5at+24, para cerrar un camino ' stroDe24, para dibu&ar el camino reali!ado mediante una lnea. Las dos funciones, como cual"uier otra funci$n de dibu&o en el lien!o de can#as, son m(todos del ob&eto conte to del can#as, "ue se debe obtener a partir del elemento can#as con las correspondientes funciones de Ia#ascript, tal como #imos anteriormente en este manual. Geremos estas nue#as funciones para dibu&o de caminos con un e&emplo, pero antes podemos e plicarlas detalladamente.
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.
18
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com El dibu&o anterior lo +emos reali!ado con un c$di%o como el "ue si%ue:
ctx.beginPath,./ ctx.move=o,1!1./ or ,i=1/i<100/i@=3.7 i ,,iK2.L=0.7 ctx.line=o,i@3!i./ ;else7 ctx.move=o,i!i@3./ ; ; ctx.stroAe,./
19
@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:
20
21
Hasta a"u lle%a esta pr)ctica de caminos en Ban#as del HTML 5, con distintas #ariantes a partir de los mismos puntos del camino. 9i lo deseas, puedes #er una p)%ina donde se muestran los cuatro e&emplos de caminos #istos en este artculo.
Artculo por
22
ill,.
''creo un segundo camino ctx.beginPath,./ ''probar a comentar esta lCnea para ver lo 5ue pasa ctx. ill%t*le = -9 NN00-/ ctx.move=o,F:!30./ ctx.line=o,>:!:0./ ctx.line=o,>:!?0./ ctx.closePath,./ ctx. ill,./
Nota# Lo cierto es "ue este c$di%o est) incompleto, pues le falta la funci$n car%aBonte toBan#as24 "ue 'a se +a e plicado anteriormente en el artculo Entender el lien!o de can#as.
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:
ctx. ill%t*le = -9 NN00-/
23
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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.
Artculo por
24
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com En este artculo e plicaremos c$mo +acer caminos con arcos. Los arcos son se%mentos de circunferencias, o una circunferencia entera, en el caso de un arco completo. 9on uno de los modos de +acer cur#as en el elemento Ban#as del HTML 5. El m(todo "ue podemos dibu&ar para +acer un arco es arc24, "ue in#ocamos sobre el ob&eto el conte to del can#as. Este m(todo re"uiere unos cuantos par)metros para poder in#ocarlo ' especificar las caractersticas del arco "ue se desea +acer ' lo cierto es "ue no resulta del todo tri#ial por"ue +a' "ue conocer al%unas f$rmulas matem)ticas para el traba&o con circunferencias. *s "ue tendremos "ue refrescar al%unos conocimientos "ue pueden +aberse ol#idado del periodo de ense8an!a media.
Nota# 6%ual "ue los caminos, una #e! creados, podemos decidir si "ueremos rellenarlos de color, mediante el m(todo fill24 o bien dibu&ar solamente el contorno, con el m(todo stroDe24. Todas estas cosas sobre caminos ' dem)s se pueden aprender en el Manual del traba&o con Ban#as.
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%uloMinicio ' an%uloMfinal 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. 9entidoMcontrarioMdelMrelo& 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 = nOmeroEP+ x ,grados'1N0.
5ara con#ertir %rados en radianes podramos utili!ar la si%uiente lnea de c$di%o Ia#ascript:
var radians = ,Hath.P+'1N0.Idegrees
Nota# Mat+.56 es el famoso n:mero 56 2H..,.O4. 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+.
25
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 K< %rados el punto del e&e de las L 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 HO< %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:
contexto$anvas.arc,30! 30 !20 ! 0! Hath.P+I2! alse./
Bomo se puede #er, la circunferencia empie!a en < 56 2cero4 ' termina en 1 56.
26
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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.
Artculo por
27
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com e presarlas tenemos un punto inicial, un punto final de la cur#a ' un punto "ue define la tendencia de la cur#atura. Las cur#as cuadr)ticas son un tipo concreto de cur#as 7e!ier, es decir, una manera de e presar matem)ticamente una cur#a, similar a las 7e!ier pero m)s simplificada. Mientras "ue en las cur#as 7e!ier tenemos dos puntos para definir la tendencia de la cur#a, al principio ' el fin de la misma, en las cur#as cuadr)ticas s$lo tendremos un punto.
Nota# 0o +emos #isto toda#a las mencionadas cur#as 7e!ier, pues son m)s comple&as "ue las cur#as cuadr)ticas. Es por eso "ue las #eremos m)s adelante.
Este m(todo recibe cuatro #alores, "ue corresponden con dos puntos del lien!o. 6nsisto en "ue el punto inicial 'a est) implcito en el conte to del can#as, con la posici$n dada del puntero de dibu&o antes de comen!ar la cur#a cuadr)tica. Lue%o, el punto 2pc , pc'4 es el lu%ar "ima%inario" al "ue tendrera la cur#atura de la lnea. El punto 2 ,'4 sera el final de la cur#a. 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 , '.
28
Bomo se puede #er, aparte de la cur#a cuadr)tica tenemos otras lneas rectas en este dibu&o, "ue lue%o se rellena de color con fill24. 0os da el resultado una forma parecida a una +o&a, "ue se puede #er en el e&emplo en marc+a. En el si%uiente artculo podremos #er otro e&emplo para +acer cur#as cuadr)ticas m)s a#an!ado.
Artculo por
9implemente +ace un rect)n%ulo en la posici$n ,' con anc+ura ' altura dadas por medio de los par)metros widt+ ' +ei%+t ' un :ltimo par)metro radius para especificar el radio de la cur#atura en la es"uina redondeadas. *+ora podramos +acer un rect)n%ulo redondeado con la si%uiente llamada:
var ctx = carga$ontexto$anvas,-micanvas-./ i ,ctx.7 rounded(ect,ctx! 10! 10! 1?0! 110! 20./
29
*+ora podemos #er el campo de te to para cambiar el radio de las es"uinas manualmente, escribiendo cual"uier otro #alor dentro del mismo.
(adioQ <input t*pe="text" name="radio" value="10" onAe*up="actuali"a(adio(ectangulo,this.value.">
Bomo se puede #er, tiene definido un e#ento para actuali!ar el radio del rect)n%ulo cuando el usuario pulsa una tecla en el campo de te to.
*s pues, para la parte del slider tenemos "ue incluir los scrips "Bore" ' "More"
<script src="mootoolsB1.2.FBcoreB*c.1s" t*pe="text'1avascript"><'script> <script src="mootoolsB1.2.F.2Bmore.1s" t*pe="text'1avascript"><'script>
Lue%o podramos tener un HTML como este para producir el contenedor del slider:
<div id="slidercontenedor" st*le="widthQ220px/ paddingQ 3px 0px/ bacAgroundBcolorQ9eeeeee/"> <div id="slidercontrol" st*le="widthQ10px/ heightQ 10px/ bacAgroundBcolorQ9DDDDdd/"><'div> <'div> <div>MalorQ <span id="valor">20<'span><'div>
*+ora podemos #er el script Mootols para %enerar din)micamente el componente a partir de estos elementos HTML.
window.addEvent,"domread*"! unction,.7 var mi%lider = new %lider,"slidercontenedor"! "slidercontrol"!7 -range-Q R0!33S! -steps-Q 33! -initial%tep-Q 20! on$hangeQ unction,lugar.7 actuali"a(adio(ectangulo,lugar./ T,"valor"..set,"html"! lugar./ ; ;./
30
window.onload = unction,.7 ''(ecibimos el elemento canvas var ctx = carga$ontexto$anvas,-micanvas-./ i ,ctx.7 rounded(ect,ctx! 10! 10! 1?0! 110! 20./ ; ; <'script>
31
Bomo #emos, se tienen "ue especificar coordenadas de tres puntos, de una manera similar a la "ue conocimos en las cur#as cuadr)ticas.
32
Nota#Las cur#as cuadr)ticas un tipo determinado de cur#as 7e!ier, lo "ue ocurre es "ue en las cur#as 7e!ier utili!amos dos puntos de tendencia de la cur#a, para el principio ' el final de la misma, mientras "ue en las cur#as cuadr)ticas s$lo se utili!aba uno. 5ara aclarar este punto recomendamos ec+ar un #ista!o a las e plicaciones sobre cur#as cuadr)ticas.
En la si%uiente ima%en se puede #er un dia%rama sobre los puntos "ue se utili!an para definir una cur#a 7e!ier.
Bomo podemos #er, el m(todo be!ierBur#eTo24 tiene O 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.
Nota# *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 ,'.
33
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.
Nota# 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: ctx. ill%t*le = "9cccc "/ 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. ctx. ill%t*le = -rgba,100!2?0!100!0.?.-/ ctx.beginPath,./ ctx. ill%t*le = -rgba,100!2?0!100!0.?.-/ ctx.move=o,0!D0./ ctx.be"ier$urve=o,D0!:!110!13!1F0!?0./ ctx.be"ier$urve=o,1?0!33!1F0!>3!1F3!:0./ ctx.be"ier$urve=o,1N0!F3!1D0!33!200!D3./ ctx.line=o,200!130./ ctx.line=o,0!130./ ctx. ill,./ ctx.beginPath,./ ctx. ill%t*le = -rgba,2?0!2?0!100!0.?.-/ ctx.move=o,30!130./ ctx.be"ier$urve=o,D0!:!110!13!1>0!10./ ctx.be"ier$urve=o,1?0!103!1F0!1?3!200!?3./ ctx.line=o,200!130./ ctx.line=o,0!130./ ctx. ill,./
Breando esos otros caminos el e&emplo "ueda como se puede #er en este enlace +ttp:RRwww.desarrolloweb.comRarticulosRe&emplosR+tml5Rbe!ierJcur#e.+tml.
Artculo por
34
Parte !:
En#iamos tres par)metros, el primero es el ob&eto Ia#ascript de la ima%en "ue se desea incluir en el lien!o. Los dos si%uientes son las coordenadas donde situar la ima%en, siendo 2 ,'4 el punto donde se colocar) la es"uina superior i!"uierda de la ima%en. Bomo deca, este m(todo pertenece al ob&eto del can#as, por lo "ue antes de poder in#ocarlo debemos +aber obtenido el conte to del can#as, tal como +emos aprendido anteriormente en el Manual de Ban#as para cual"uier otro tipo de dibu&o.
35
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.
img.src = -logoBgrande.1pg-/
Esto +ace "ue en el ob&eto 6ma%e se car%ue la ima%en "ue est) en el arc+i#o Slo%oJ%rande.&p%S ' 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:
ctx.draw+mage,img! 10! 10./
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:
var img = new +mage,./ img.src = -logoBgrande.1pg-/ ctx.draw+mage,img! 10! 10./
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.
var img = new +mage,./ img.src = -canvasBhtml3.png-/ img.onload = unction,.7 ctx.draw+mage,img! 10! 10./ ;
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.
Artculo por
4tro ejemplo de dibujo en con el AP de canvas del HTML 5, en el que incluimos im&'enes tra1das por di%erentes v1as posibles con Javascript! En el artculo anterior e plicamos las %eneralidades del traba&o con ima%enes en el elemento can#as del HTML 5. Bontinuando con esas e plicaciones #eremos a+ora c$mo pintar en un lien!o di#ersas im)%enes "ue e traemos de #arios modos. La idea es e perimentar con el dibu&o en Ban#as por medio de una nue#a pr)ctica ' a la #e! repasar todos los modos "ue e isten de obtener una ima%en por medio de Ia#ascript, "ue 'a e plicamos en el artculo Distintas maneras de acceder a ob&etos 6ma%e Ia#ascript. Bomo 'a se e plic$ en el mencionado artculo, e isten di#ersas maneras de conse%uir ob&etos 6ma%e en Ia#ascript, "ue lue%o podramos pintar en un can#as. Lo iremos #iendo directamente sobre el c$di%o fuente de este e&emplo: )*+ ,raerse una i-a&en que $a% en la p'&ina# por medio del m(todo %etElement7'6d24, en#iando como par)metro el identificador de la eti"ueta 6M; de la ima%en deseada.
''$reo un ob1eto +mage con una imagen de la pagina var img = document.getElement)*+d,"im1"./ ''luego la dibu1o en el canvas ctx.draw+mage,img! 10! 10./
.*+ A trav/s del Arra% de i-a&es# Tambi(n de una ima%en "ue +a'a en la p)%ina, en una eti"ueta 6M;. *l arra' accedemos con el ndice de la ima%en se%:n orden de aparici$n en el c$di%o HTML.
''consigo una imagen desde el arra* de im8genes ctx.draw+mage,document.imagesR1S! 122! 20./
37
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 0*+ Creando nuestro ob1eto !-a&e# >ue es la forma con la "ue traba&amos en el artculo anterior. L por tanto no #amos a repetir las e plicaciones.
''un ob1eto +mage var imagen = new +mage,./ imagen.src = "httpQ''www.desarrolloweb.com'images'iconos'userEgo.png"/ imagen.onload = unction,.7 ctx.draw+mage,imagen! ??0! 1D3./ ;
2*+ Especificar la i-a&en en for-ato data#url# "ue es una cadena de caracteres en formato 7aseO, "ue permite especificar elementos como im)%enes a partir de c$di%o, pero como si esos elementos los ad"uiri(semos remotamente.
''a travYs de un "dataQ url" var img = new +mage,./ img.src = -dataQimage'gi /base>F!(0lZ&2lh$w0<0+000000?pn'[iJ3)0E000E0<000000<00s000+Gh0@hAcu&FlmPMindo:5*r+WiZ )U0&w==-/ ctx.draw+mage,img! ?00! 200./
3*+ Acceder a el dise4o dibu1ado en otro canvas# para mostrar en un can#as el contenido de otro, como si fuera una ima%en.
''consigo una imagen desde un canvas var img$anvas = document.getElement)*+d,"canvas2"./ ctx.draw+mage,img$anvas! 100! 120./
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.
''cargo un camino en un canvas! para luego traerlo como imagen var ctx = carga$ontexto$anvas,-canvas2-./ i ,ctx.7 ctx. ill%t*le = -9DD0000-/ ctx.beginPath,./ ctx.move=o,30!13./ ctx.line=o,112!13./ ctx.line=o,1F?!>D./ ctx.line=o,112!12?./ ctx.line=o,30!12?./ ctx.line=o,1D!>D./
38
''(ecibimos el elemento canvas var ctx = carga$ontexto$anvas,-micanvas-./ i ,ctx.7 ''$reo un ob1eto +mage con una imagen de la pagina var img = document.getElement)*+d,"im1"./ ctx.draw+mage,img! 10! 10./ ''consigo una imagen desde el arra* de im8genes ctx.draw+mage,document.imagesR1S! 122! 20./ ''consigo una imagen desde un canvas var img$anvas = document.getElement)*+d,"canvas2"./ ctx.draw+mage,img$anvas! 100! 120./ ''un ob1eto +mage var imagen = new +mage,./ imagen.src = "httpQ''www.desarrolloweb.com'images'iconos'userEgo.png"/ imagen.onload = unction,.7 ctx.draw+mage,imagen! ??0! 1D3./ ; ''a travYs de un "dataQ url" var img = new +mage,./ img.src = -dataQimage'gi /base>F!(0lZ&2lh$w0<0+000000?pn'[iJ3)0E000E0<000000<00s000+Gh0@hAcu&FlmPMindo:5*r+WiZ )U0&w==-/ ctx.draw+mage,img! ?00! 200./ ; document.imagesR1S.src = -dataQimage'gi /base>F!(0lZ&2lh$w0<0+000000?pn'[iJ3)0E000E0<000000<00s000+Gh0@hAcu&FlmPMindo:5*r+WiZ )U0&w==-/ ; <'script> <'head> <bod*> <h2>$anvas 5ue esto* creando con una serie de im8genes<'h2> <canvas id="micanvas" width="300" height="F00"> =u navegador no soporta canvas. <'canvas> <p> <div st*le="displa*Q none/"> <h2>$osas 5ue pongo a5uC para acceder desde Xavascript<'h2> <img src="canvasBhtml3.png" id="im1"> <img src="logoBgrande.1pg"> <p> <canvas id="canvas2" width="130" height="130"> (ecicla tu navegadorLL <'canvas> <'div> <'bod*> <'html>
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.
Artculo por
39
Este m(todo dibu&ar) la ima%en en la posici$n definida por las coordenadas 2pos-, posL4 ' con la anc+ura ' altura dadas en los :ltimos dos par)metros. *s "ue podemos #er un e&emplo de c$di%o escalando la ima%en:
var ctx = carga$ontexto$anvas,-micanvas-./ i ,ctx.7 ''$reo una imagen conun ob1eto +mage de Xavascript var img = new +mage,./ ''indico la G(< de la imagen img.src = -logoBdesarrolloweb.gi -/ ''de ino el evento onload del ob1eto imagen img.onload = unction,.7 ''inclu*o la imagen en el canvas escala mu* pe5ue\a ctx.draw+mage,img! 0! 0! 30 ! 2F./ ''un poco ma*or ctx.draw+mage,img! :0! 10! N0 ! ?N./ ''tama\o natural ctx.draw+mage,img! 1>0! 20./ ; ;
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.
40
Entre los par)metros, "ima%en" si%ue siendo el ob&eto ima%en Ia#ascript "ue "ueremos pintar. Todos los par)metros si%uientes los podemos entender a la #ista de la si%uiente ima%en:
5odemos #er a continuaci$n el c$di%o de un e&emplo "ue reali!a el recorte ' escalado de una ima%en.
var ctx = carga$ontexto$anvas,-micanvas-./ i ,ctx.7 ''$reo una imagen conun ob1eto +mage de Xavascript var img = new +mage,./ ''indico la G(< de la imagen img.src = -sagradaB amilia.1pg-/ ''de ino el evento onload del ob1eto imagen img.onload = unction,.7 ctx.draw+mage,img! 1::! 11! 120 ! 2?F! 10! 10! D0! 1:>./ ''tama\o natural ctx.draw+mage,img! 1>0! 20./ ; ;
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.
Artculo por
41