<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-21556140</id><updated>2011-12-25T19:51:44.914+01:00</updated><category term='asia'/><category term='linux'/><category term='this'/><category term='problemas'/><category term='personal'/><category term='kubuntu'/><category term='php'/><category term='vietnam'/><category term='codeigniter'/><category term='desarrollo'/><category term='ego'/><category term='open source'/><category term='ideas'/><category term='japon'/><category term='ie'/><category term='firefox'/><category term='blogsfera'/><category term='proyectos'/><category term='fushioko'/><category term='negocios'/><category term='tienda'/><category term='ipod'/><category term='amigo invisible'/><category term='estupidez'/><category term='china'/><category term='ebe07'/><category term='json'/><title type='text'>display: NONE</title><subtitle type='html'>Cosas web, quizás útiles, quizás buenas</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>78</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-21556140.post-6937660699701677211</id><published>2008-01-18T11:30:00.000+01:00</published><updated>2008-01-18T11:44:49.926+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Gracias, pero dejad de quererme tanto</title><content type='html'>No suelo contar nada que no sean cosas técnicas, pero esto que me ha pasado ya me tiene un poco mosqueado. En una semana me han llamado 3 veces para regalarme un libro de cocina, dos relojes (señor y señora) y una magnifica plancha, eso sí, todo gratuito. Lo más curioso es que ha sido de tres empresas distintas, lo cual me hace sospechar sobre eso de la Ley de Protección de Datos.&lt;br&gt;&lt;br&gt;
El libro me interesaba, dije que sí, pero nunca llegó a mi casa. Los relojes dije que no y eso que solo me cobraban 12 euros de gastos de envío, ni que el mensajero viniera en taxi, compro cosas por internet y los gastos de envío no llegan a esa cantidad ni de lejos. Y de la plancha, pues paso, tengo un centro de planchado muy majo y que ya forma parte de la familia, sería despreciable de mi parte deshacerme de él después de todo lo que hemos vivido juntos.&lt;br&gt;&lt;br&gt;
Lo que más pena me da son las teleoperadoras, víctimas de contratos de &lt;acronym title="mierda"&gt;@%&amp;#&lt;/acronym&gt; y que tienen que hacer frente a campañas imposibles. Al menos en mí está el tratarlas con toda la educación del mundo aunque tenga ganas de mandarlas a paseo por el latazo que me dan, culpa suya no es.&lt;br&gt;&lt;br&gt;
A ver si en la próxima llamada me regalan un Tom Tom o el &lt;a href="http://www.apple.com/es/macbookair/"&gt;MacBook Air&lt;/a&gt; para poder ir a un StarBucks y flipar de friqui-intelectual, que parece que es lo que está de moda, porque para otra cosa al Air no le veo utilidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-6937660699701677211?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/6937660699701677211/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=6937660699701677211' title='8 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/6937660699701677211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/6937660699701677211'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2008/01/gracias-pero-dejad-de-quererme-tanto.html' title='Gracias, pero dejad de quererme tanto'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-3421819263859967594</id><published>2008-01-11T19:08:00.000+01:00</published><updated>2008-01-11T19:17:20.455+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='proyectos'/><category scheme='http://www.blogger.com/atom/ns#' term='ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='codeigniter'/><title type='text'>No me gusta Gallery</title><content type='html'>No me gusta nada &lt;a href="http://gallery.menalto.com/"&gt;Gallery&lt;/a&gt;, uno de los mejores gestores de imágenes, galería de fotos, etc... que hay. Me recuerda un foro, y tampoco me gustan los foros.&lt;br&gt;&lt;br&gt;
Por ello creo que me voy a poner a hacer una aplicación de galería de fotos cuando tenga un rato, lo cual está difícil, porque tiempo, lo que se dice tiempo... pues no me sobra mucho.&lt;br&gt;&lt;br&gt;
Lo voy a hacer con &lt;a href="http://codeigniter.com"&gt;Code Igniter&lt;/a&gt; que es un framework de PHP que me encanta. Y si me queda bien y no me avergüenzo mucho de mi trabajo, pues lo pondré open source, que ya es hora que otros se aprovechen de mi trabajo, como yo lo hago a diario con el trabajo de otros.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-3421819263859967594?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/3421819263859967594/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=3421819263859967594' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/3421819263859967594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/3421819263859967594'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2008/01/no-me-gusta-gallery.html' title='No me gusta Gallery'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-271700621244543946</id><published>2007-11-04T19:46:00.000+01:00</published><updated>2007-11-04T20:24:05.479+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>Linux 3 - Yo 2</title><content type='html'>Me ha dado por instalar Linux en un portatil, compartiendolo con Vista, total nada. Siempre he tocado Linux de lejos, algunos proyectos lo usaban, algún Live CD y una instalación en el VMWare.&lt;br /&gt;&lt;br /&gt;
Ahora voy en serio, quiero meterme en Linux y pasar más de Windows, aunque siendo sincero, me está costando. Empezando por hacer el dual boot entre Vista y Kubuntu, que ni sé que he hecho porque inicialmente arranco con la partición de Vista, me aparece Kubuntu gracias al EasyBCD, pero cuando accedo al Kubuntu me aparece otra vez Vista debido al Grub, vamos, que me puedo saltar de una a otra durante horas sin realmente acceder a ningún sistema operativo.&lt;br /&gt;&lt;br /&gt;
¿Por qué Kubuntu? porque Ubuntu es más sencillito para los novatos y porque me han recomendado KDE. El primer problema que me encontré eran los drivers del wifi, pero pude instalarlo, después de unas cuantas peleas entre Linux, la otra conexión y la poca capacidad innata que tengo. Una vez superada esta prueba, parecía que iba a ser  coser y cantar, ya que gracias a ello me enteré de cómo se instalaban las cosas en Kubuntu (punto a favor de kubuntu porque me gusta mucho mas que en Windows, y que ni contar que en Vista, con el latazo que da la autorización para instalar cosas).&lt;br /&gt;&lt;br /&gt;
El motivo por el 3-2 es porque el wifi se me desconfigura a todas horas, a ver si le dedico un poco más de tiempo y remonto el partido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-271700621244543946?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/271700621244543946/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=271700621244543946' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/271700621244543946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/271700621244543946'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/11/linux-3-yo-2.html' title='Linux 3 - Yo 2'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-4202254523564250487</id><published>2007-10-05T19:22:00.000+02:00</published><updated>2007-10-17T08:41:14.366+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='desarrollo'/><title type='text'>Sobre caché y otras historias</title><content type='html'>He estado leyendo un artículo de Ricardo Galli sobre &lt;a href="http://mnm.uib.es/gallir/posts/2007/04/13/1050/"&gt;Twitter, escalabilidad y otras cosas varias&lt;/a&gt;, y espero que no moleste lo que voy a decir, lo único que me ha interesado son los comentarios.&lt;br /&gt;&lt;br /&gt;
En estos, Galli, &lt;a href="http://mildiez.net/"&gt;demimismo&lt;/a&gt;, &lt;a href="http://rvr.typepad.com/linotipo/"&gt;rvr&lt;/a&gt; y &lt;a href="http://www.furilo.com/"&gt;álvaro&lt;/a&gt; han mantenido un intercambio de ideas sobre si es mejor PHP o &lt;acronym title="Ruby on Rails"&gt;RoR&lt;/acronym&gt;, que si el caché por aquí o las bases de datos master-slave por allá y más cosas.&lt;br /&gt;&lt;br /&gt;
Yo no soy un experto en esas cosas y menos aún me las daría de tal, pero me entran algunas dudas sobre algunas cosas que comentan.&lt;br /&gt;&lt;br /&gt;
Galli dice que menéame solo usa un servidor y que no necesita caché... eehhhh... oyee... pues quizás sea cierto. Espero que lo de un único servidor se refiera para web, porque no creo que sea uno para la web y la BD todo junto. Yo no he visto el código de menéame, pero un amiguete que sí que le ha dado por eso (creo que por penitencia de algo), me comentó que es un poco caótico, y caos suele ser poco amigo del señor rendimiento, pero bueno, no dudemos del código.&lt;br /&gt;&lt;br /&gt;
Lo que más me impresiona es que dice que antes de usar caché pues le mete servidores de no sé qué y mil líos de BD (ahora no me acuerdo y paso de leerme otra vez todo eso para buscarlo). A mí el comentario me parece impresionante, es como decir que si te va mal con tu mujer, pues te buscas una amante para que los ratos malos los pases con ella. No, tío, vete a un terapeuta y que arregle tu matrimonio... Pues lo mismo, en vez de meterle una máquina más, mejora el código, que seguro que el código se puede optimizar y añádele caché para que no tire tanto del PHP, RoR o lo que sea que uses para programar. Por cierto, a la BD ni se te ocurra meterle índices o mejorar las queries, total, le metes una bd master-slave, master-master, active-active o un taller ilegal con esclavos que busquen los datos y los envíen a pelo.&lt;br /&gt;&lt;br /&gt;
Otra cosa que me ha dejado un poco mosca es el afán de algunos por relacionar código óptimo con pocas líneas de código. El número de líneas de código no tiene mucho que ver con lo bueno que sea el código, sobre todo porque seguro que en esas 10 líneas de código llaman a alguna función suya que puede estar fatalmente implementada (no digo que lo esté, sino que se puede dar el caso). Me acuerdo una vez que salió la noticia de que alguien había sido capaz de crackear un DVD con 7 líneas de código, el tema es que jamás comentaron que el desarrollador tenía rota la tecla INTRO.&lt;br /&gt;&lt;br /&gt;
Siguiendo con la conversación, otra cosa que no entiendo es el tema del uso de frameworks. Usar un framework no tiene nada malo, lo malo es usar un framework poco óptimo. Está claro que o el framework es muy bueno, o si quiere hacer muchas cosas puede que la aplicación no sea todo lo óptima del mundo. Pero seamos sinceros, todos usamos un "framework", ya sea nuestra capa de BD o la que nos ofrece CodeIgniter (me gusta este framework), pero al final todos usamos librerías para hacer cosas. El que se desarrolle desde cero no implica nada de nada, a no ser que el que lo haya desarrollado sea un buen programador.&lt;br /&gt;&lt;br /&gt;
Después de leer este post me he puesto a leer una presentación sobre &lt;a href="http://www.slideshare.net/furilo/lacocteleracom-y-the-shaker-conferencia-rails-hispana-2006/"&gt;la arquitectura de la coctelera&lt;/a&gt; que es bastante interesante, pero hay una cosa que no comprendo, dicen: "si el usuario está loggeado: el lighttpd sirve la página estática, y con Ajax rellenamos el contenido no cacheable (petición mucho más ligera que un dispatch sirviendo una página entera, aunque sea de caché)". Mi duda es la siguiente, si una página que es dinámica tiene varias zonas que se cargan con Ajax, eso implica que se realizarán varias peticiones http y que se harán varias consultas a BD. ¿De verdad esto es más optimo que tener una página dividida en parte cacheable y parte dinámica y que se junten los dos tipos de contenido en una página?, pues no tengo ni idea, pero a primera vista a mi me parece más óptimo usar caché para partes cacheables y añadirle la parte dinámica, además de poder optimizar las consultas a BD si se hace en una única ejecución.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-4202254523564250487?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/4202254523564250487/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=4202254523564250487' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/4202254523564250487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/4202254523564250487'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/10/sobre-cach-y-otras-historias.html' title='Sobre caché y otras historias'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-8962818808983230059</id><published>2007-08-25T00:47:00.000+02:00</published><updated>2007-08-25T01:02:19.615+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebe07'/><title type='text'>Emprendedores en Evento Blog España 2007</title><content type='html'>La gente de &lt;strong&gt;Evento Blog España&lt;/strong&gt; avisan sobre una mesa de emprendedores para &lt;strong&gt;EBE07&lt;/strong&gt;, esto no es algo que suela contar en este blog, pero merece la pena por el trabajo que realizan los &lt;a href="http://eventoblog.com/info/organizacion"&gt;organizadores&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
El sábado 24 de noviembre en EBE 07, las empresas y emprendedores tendrán nuevamente un escaparate en el que exponer sus &lt;a href="http://eventoblog.com/programa/mesa-de-proyectos"&gt;nuevos proyectos&lt;/a&gt; relacionados de una u otra forma con la blogosfera y la web participativa.&lt;br /&gt;&lt;br /&gt;
Descargar Bases&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Bases para la mesa de emprendedores en EBE 07 (PDF)&lt;/li&gt;&lt;/ul&gt;
EBE 07 da la bienvenida a los amigos sevillanos de &lt;a href="http://www.networkingactivo.com/"&gt;Networking Activo&lt;/a&gt;, sin duda, la empresa que mejor está fomentando las sinergias entre los emprendedores de la red hispana, que colaborará con nosotros en la gestión y devenir de la mesa, teniendo, entre otras responsabilidades, la de maestro de ceremonias en la persona de &lt;a href="http://www.networkingactivo.com/blog/"&gt;Emilio Márquez&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Plazo para la recepción de proyectos&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
Desde hoy, 26 de julio de 2007 hasta el viernes 26 de octubre a las 23:59H, es el plazo para que los emprendedores nos envíen un resumen ejecutivo de su proyecto que deben cumplir 2 requisitos imprescindibles:&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;haberse lanzado públicamente o que al menos se pueda acceder previa invitación y&lt;/li&gt;
&lt;li&gt;que permita la interactividad a través de la publicación de contenidos de los usuarios&lt;/li&gt;&lt;/ul&gt;
&lt;strong&gt;Resumen ejecutivo&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
El resumen no tendrá una extensión superior a una página en tamaño DINA A-4 y debe incluir 4 secciones:&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Descripción del proyecto,&lt;/li&gt;
&lt;li&gt;Valor añadido&lt;/li&gt;
&lt;li&gt;Mercado al que va dirigido e&lt;/li&gt;
&lt;li&gt;Iniciativas similares o Competencia.&lt;/li&gt;&lt;/ul&gt;
El resumen se enviará a los siguientes emails: &lt;strong&gt;info (arroba) eventoblog.com | info (arroba) networkingactivo.com&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
Seleccionaremos a un total de 15 semifinalistas, los cuales deberán rellenar un cuestionario económico-financiero que deberán enviar antes del 31 de octubre, a los emails mencionados. El 1 de noviembre se publicará en nuestra web y en el &lt;a href="http://networkingactivo.com/blog"&gt;blog de Networking Activo&lt;/a&gt; los 10 proyectos (como máximo) finalistas que se presentarán durante la mañana del sábado 24 de noviembre en EBE 07. A partir del 1 de noviembre, los emprendedores tendrán un plazo de 10 días naturales para el envío de las presentaciones en formato .pp o .ppt&lt;br /&gt;&lt;br /&gt;
Para más información puedes &lt;a href="http://eventoblog.com/press/emprendedores-ebe07.pdf"&gt;descargarte las bases completas&lt;/a&gt; o dejad tus dudas a través de los comentarios o en nuestro &lt;a href="http://eventoblog.com/contacto"&gt;formulario de contacto&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-8962818808983230059?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/8962818808983230059/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=8962818808983230059' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/8962818808983230059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/8962818808983230059'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/08/emprendedores-en-evento-blog-espaa-2007.html' title='Emprendedores en Evento Blog España 2007'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-7506040895118978506</id><published>2007-07-19T15:45:00.000+02:00</published><updated>2007-07-19T22:11:00.516+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vietnam'/><category scheme='http://www.blogger.com/atom/ns#' term='tienda'/><category scheme='http://www.blogger.com/atom/ns#' term='japon'/><category scheme='http://www.blogger.com/atom/ns#' term='china'/><category scheme='http://www.blogger.com/atom/ns#' term='asia'/><category scheme='http://www.blogger.com/atom/ns#' term='fushioko'/><title type='text'>Fushioko</title><content type='html'>&lt;a href="http://fushioko.com"&gt;Fushioko&lt;/a&gt; es una cadena de &lt;strong&gt;tiendas que ofrece productos artesanales traídos directamente de Japón, Vietnam, China y otras zonas de Asia&lt;/strong&gt;. Allí nos podemos encontrar desde decoración hasta ropa. Jarrones, juegos de té y "kimonos" vietnamitas resaltan nada más entrar en cualquiera de las tiendas, pero con un segundo vistazo podemos ver más productos que nos llamarán la atención: cuadros, flores de papel y mucho más.&lt;br /&gt;&lt;br /&gt;
¿Por qué hablar de una tienda de productos asiáticos en un blog enfocado en la web?, principalmente porque Fushioko pertenece a unos amigos míos, y por algo bueno que conozco, merece la pena hablar de ello. A parte, porque me gusta la página web que desarrollo mi amigo, que a además de empresario, es informático.&lt;br /&gt;&lt;br /&gt;
&lt;img class="center" src="http://2.bp.blogspot.com/_EX54CONpV8g/Rp-9uZ0z9YI/AAAAAAAAAAM/h9U-LQDs224/s320/fushioko2.png" border="0" alt="Fushioko" /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;a href="http://fushioko.com"&gt;Fushioko.com&lt;/a&gt; está desarrollada en Flash, es multiidioma, y aunque aún está en fase de desarrollo, tiene una gran presentación, con modelos 3D diseñados y desarrollados por ellos mismos. El control de sonido está implementado desde cero (en el cual participé en el testing) y el cambio de imágenes hace que todo parezca muy sencillo y suave.&lt;br /&gt;&lt;br /&gt;
&lt;img src="http://2.bp.blogspot.com/_EX54CONpV8g/Rp--TZ0z9ZI/AAAAAAAAAAU/m5kwOqnXx7s/s320/fushioko3.png" alt="Fushioko" /&gt;&lt;br /&gt;&lt;br /&gt;
El otro día leía en Loogic que cambiaba publicidad por diseño, yo en este caso voy a poner publicidad de los sitios que creo merecen la pena.&lt;br /&gt;&lt;br /&gt;
Para quien le interese, las tiendas se encuentra en Madrid:&lt;br /&gt;&lt;br /&gt;
&lt;p class="code"&gt;C.C. Príncipe Pío, Local G4&lt;br /&gt;
Pso. De la Florida, 2&lt;br /&gt;
Madrid&lt;/p&gt;
&lt;p class="code"&gt;C.C. H2Ocio&lt;br /&gt;
Parque Empresarial Rivas Futura, Local LB24&lt;br /&gt;
C/ Marie Curie, 4&lt;br /&gt;
Rivas Vaciamadrid (Madrid)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-7506040895118978506?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/7506040895118978506/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=7506040895118978506' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/7506040895118978506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/7506040895118978506'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/07/fushioko.html' title='Fushioko'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_EX54CONpV8g/Rp-9uZ0z9YI/AAAAAAAAAAM/h9U-LQDs224/s72-c/fushioko2.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-7114490286030578587</id><published>2007-07-11T15:52:00.000+02:00</published><updated>2007-07-11T16:12:09.419+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogsfera'/><category scheme='http://www.blogger.com/atom/ns#' term='ego'/><category scheme='http://www.blogger.com/atom/ns#' term='estupidez'/><title type='text'>Blogegos</title><content type='html'>Hoy he leído un &lt;a href="http://511.dabomb.com.ar/2007/07/fin/"&gt;post&lt;/a&gt; de Federico de 5.1.1 en el que dice que aunque ya no escribe demasiado, no ha dejado su gran blog de lado, sino que ha estado una época cansado &lt;em&gt;"del ombliguismo de la blogosfera, persiguiendo la última noticia o buscando mostrarse más inteligentes que otros"&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;
Con Federico no tengo ningún trato, a parte de leer su blog y de recibir algún comentario en Sentido Web que siempre ha aportado algo nuevo, corregido alguna cosilla o algo igualmente interesante. Aunque no le conozco, no puedo estar más de acuerdo con él.&lt;br /&gt;&lt;br /&gt;
Muchas veces he comentado con &lt;acronym title="El gran JL :)"&gt;JL&lt;/acronym&gt; que lo menos que me gusta de esta blogosfera son los blog&lt;strong&gt;egos&lt;/strong&gt; que tienen muchos blogeros. Cuando un blog formado por una o varias personas empiezan a &lt;del&gt;ser&lt;/del&gt; creerse estrellas del mundo mundial, yo les quito del Google Reader, cosa que seguro que les trae sin cuidado, pero mira tú por donde, yo me libro de post del tipo soy-guay-molo-mogollón-y-estoy-aquí-para-solucionaros-vuestra-existencia.&lt;br /&gt;&lt;br /&gt;
Al igual que le dije a JL, si algúna vez en display: NONE o en &lt;a href="http://sentidoweb.com" title="Esto no es ego, son enlaces ;)"&gt;Sentido Web&lt;/a&gt; empieza a notarse una falta de humildad, doy permiso a quien quiera a ponerme a parir despiadadamente, y si eso no es suficiente le digo dónde vivo para que me parta las piernas.&lt;br /&gt;&lt;br /&gt;
¿Qué es lo que me ha hecho escribir esto hoy? pues un simpático email &lt;del&gt;exigiéndonos&lt;/del&gt; pidiéndonos en Sentido Web que borremos un artículo que hemos copiado. No voy a decir el post en cuestión porque no me parece correcto decirlo, pero si lo leyerais, veríais que no se trata de DUPLICAR, sino de REFERENCIAR, a parte de que el blog en cuestión tiene licencia &lt;a href="http://creativecommons.org/licenses/by-nc-nd/2.5/es/"&gt;Creative Commons&lt;/a&gt; y si mal no creo no la incumplimos. Como dato, creo que las 105 palabras del post de Sentido Web, no son un duplicado de las 825 de su artículo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-7114490286030578587?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/7114490286030578587/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=7114490286030578587' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/7114490286030578587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/7114490286030578587'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/07/bloge-g-os.html' title='Bloge&lt;strong&gt;g&lt;/strong&gt;os'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-3336258221327381934</id><published>2007-07-04T21:19:00.000+02:00</published><updated>2007-07-05T10:19:10.311+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ipod'/><title type='text'>Paso del iPhone</title><content type='html'>Hoy leo en El Pais que el iPhone &lt;a href="http://www.elpais.com/articulo/internet/iPhone/cuesta/doble/vale/elpeputec/20070704elpepunet_5/Tes"&gt;cuesta el doble de lo que vale&lt;/a&gt;, lo cual hace confirmar lo que ya opinaba antes: muy bonito, ¿y?. &lt;br /&gt;&lt;br /&gt;
Me encanta la tecnología, pero una cosa es esa y otra cosa es gastarse 600$ en algo que no vas a usar ni la mitad de las cosas. Tampoco es que esté demasiado enterado, pero que yo sepa no hay radio... ¡¿y como pretenden que oiga &lt;a href="http://gomaespuma.com"&gt;Gomaespuma&lt;/a&gt;?!, bueno, tampoco es que quede mucho de ese programa. Tampoco hay GPS (repito, que yo sepa), pero sin embargo si se encargan de poner un mapa de un callejero para que la gente se haga una idea falsa, ese mismo mapa es como acceder a Google Maps y ver por donde voy, y los satélites del GPS se sustituyen por los tres viejos sentados en el parque a los que pregunto cómo ir a la calle tal y pascual.&lt;br /&gt;&lt;br /&gt;
De todas formas, si eres friqui cómpratelo, y tira o revende el iPod que también te compraste por friqui, ¿por qué para que quieres el iPod si ya tienes el iPhone?.&lt;br /&gt;&lt;br /&gt;
La gente ahora desea ver su página web en el iPod, la verdad es que me parece una tontería, cambias el tamaño de tu navegador a 320x480 y lo vas a ver más o menos parecido. Yo sin embargo estoy deseando ver &lt;a href="http://sentidoweb.com/2007/07/02/los-500-y-pownce.php"&gt;Pownce&lt;/a&gt; en el iPod, lo mas cool de lo más friqui.&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Actualización:&lt;/strong&gt; hay que ser &lt;a href="http://www.engadget.com/2007/06/29/iphone-multi-city-lineblog/"&gt;gilip...&lt;/a&gt;, pero bueno, viendo la cara de friqui que tiene el primero que compró, se entiende.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-3336258221327381934?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/3336258221327381934/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=3336258221327381934' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/3336258221327381934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/3336258221327381934'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/07/paso-del-iphone.html' title='Paso del iPhone'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-4942934546446202971</id><published>2007-05-14T10:07:00.000+02:00</published><updated>2007-05-23T12:29:37.537+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='negocios'/><title type='text'>Muchas ideas, poco tiempo</title><content type='html'>El otro día hablando con &lt;a href="http://cvander.com"&gt;Christian&lt;/a&gt; me comentaba que en &lt;a href="http://www.firsttuesday.es/"&gt;First Tuesday&lt;/a&gt; (que curiosamente se hizo un jueves) o en el &lt;a href="http://www.iniciador.com/"&gt;Iniciador&lt;/a&gt;, no recuerdo en cual me dijo, había mucha gente que necesitaba &lt;em&gt;nosecuantos&lt;/em&gt; cientos de miles euros para poder iniciar su proyecto web.&lt;br /&gt;&lt;br /&gt;
Quiero sumarme a esa iniciativa. Por favor, alguien a quien le sobre la pasta que invierta en mí, tengo muchas ideas y poco tiempo. ¿Por qué necesito una buena cantidad de dinero?, porque para tener tiempo para desarrollar alguna idea tengo que dejar mi &lt;acronym title="Pufff, en una consultora, arggg..."&gt;trabajo&lt;/acronym&gt;, dedicarme a ello a tiempo &lt;em&gt;casi&lt;/em&gt; completo y tener un buen nivel de vida. Digo &lt;em&gt;casi&lt;/em&gt; porque por supuesto no pienso dejar de lado &lt;a href="http://sentidoweb.com"&gt;Sentido Web&lt;/a&gt;, ya que, entre otras cosas, le estoy muy agradecido a la gente de &lt;a href="http://blogsmedia.com/"&gt;Blogs Media&lt;/a&gt; y &lt;strong&gt;Sentido Web&lt;/strong&gt; es algo que forma parte de mí; y tampoco voy a dejar de lado la cosilla en la que estoy &lt;acronym title="No me seas cotilla que no puedo decir nada"&gt;metido&lt;/acronym&gt; ahora con otra gente.&lt;br /&gt;&lt;br /&gt;
Eso sí, una condición, ni se molesten en pedirme cuentas, si hay beneficios yo encantado de repartirlos, pero si no hay, mala suerte, ¿no sería inversión de riesgo?, pues eso tiene el riesgo, que la puedes pifiar.&lt;br /&gt;&lt;br /&gt;
Es más, mientras escribía esto se me ha ocurrido otra idea... ¡dios! no puedo pararlo.&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Actualización&lt;/strong&gt;: si &lt;a href="http://www.loogic.com/index.php/2007/05/23/necesito-400000-euros/"&gt;él&lt;/a&gt; lo consigue, habrá esperanzas para alguien como yo. Y porque no quiero dejar mal a &lt;acronym title="Esos mismos"&gt;***&lt;/acronym&gt;, que si no, me apunto a formar parte de los desarrolladores, está bien eso de que no quiera mileuristas, no como en todas las  consultoras de todo a 100 (aunque tengan 5000 empleados) que cuanto menos cobres mejor para ellos. Eso sí, yo ni idea de negocios, pero si pide 400.000 euros, ¿va a obtener beneficios suficientes para devolverlos y que los inversores ganen su dinerillo?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-4942934546446202971?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/4942934546446202971/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=4942934546446202971' title='11 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/4942934546446202971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/4942934546446202971'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/05/muchas-ideas-poco-tiempo.html' title='Muchas ideas, poco tiempo'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-661823323349082935</id><published>2007-03-27T14:43:00.000+02:00</published><updated>2007-03-27T15:25:16.559+02:00</updated><title type='text'>Lo bueno de ser blogger</title><content type='html'>Ya hace más de un año que soy blogger. En enero pasado me dio por crear &lt;strong&gt;display: NONE&lt;/strong&gt; con dos intenciones: enseñar lo poco que sé y ganar dinero. Está claro que ni lo uno ni lo otro, sobre todo lo de ganar dinero, porque los 6$ que debe tener la cuenta de Adsense no pagan mis vicios, y eso que son pocos. A ver si un día quito lo de Adsense de aquí, pero con la pereza que me da tocar la plantilla, creo que se va a quedar así una temporada larga.&lt;br /&gt;&lt;br /&gt;
Aunque mi labor didáctica ha sido escasa y el dinero ha sido más escaso aún, al menos he conseguido otras cosas que hacen que ser blogger sea algo positivo. Gracias a &lt;strong&gt;display: NONE&lt;/strong&gt;, JL me propuso colaborar en &lt;a href="http://sentidoweb.com"&gt;Sentido Web&lt;/a&gt;, lo cual ha sido una de las cosas más positivas que me ha pasado últimamente (quitando asuntos personales, claro). Con JL aprendes mucho y de todo, aprendes sobre cómo funciona el mundo de Internet, sobre publicidad, sobre metodología bloggeril y muchas más cosas.&lt;br /&gt;&lt;br /&gt;
JL y &lt;a href="http://nv30.com"&gt;Gabriel&lt;/a&gt; son la parte visible para mí de &lt;a href="http://blogsmedia.com"&gt;Blogs Media&lt;/a&gt;, a parte de unos tíos muy majos, da gusto tratar con ellos, son lo más honrados del mundo, lo cual hace creerte que todo el mundo es así en este mundillo y cuando te encuentras con algún personaje, te llevas una sorpresa gorda.&lt;br /&gt;&lt;br /&gt;
Debido a un artículo de &lt;strong&gt;Sentido Web&lt;/strong&gt; se presentó en mi correo un día &lt;a href="http://cvander.com"&gt;Chris&lt;/a&gt;, el cual también ha sido una gran sorpresa en esto de la blogosfera o internet a secas. Más de lo mismo, te crees que todo el mundo tiene su calidad y te llevas un chasco al comprobar que no siempre es así. Lo único que puedo decir en contra de Chris es que se niega a que haga de &lt;a href="http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&amp;TIPO_BUS=3&amp;LEMA=maletero"&gt;maletero&lt;/a&gt; en alguno de sus viajes, que son pocos.&lt;br /&gt;&lt;br /&gt;
Y la cosa no queda aquí, gracias a JL conozco a otro JL (¿estaba de moda ese nombre en la época de nuestros padres?), llevamos poco juntos, pero mira tú por dónde cumple las dos características anteriores, majo y honrado (tengo ganas de encontrarme con un verdadero &lt;acronym title="Hijo de puta"&gt;@#%$&lt;/acronym&gt;, porque me voy a volver un pardillo a este ritmo.&lt;br /&gt;&lt;br /&gt;
¿Qué conclusiones saco de todo esto?, que me ha servido para conocer gente muy interesante y que me están ayudando a mejorar en esto. ¿Es suficiente?, sí, merece la pena leer tantos feeds a cambio de esto. Y eso que no voy a blogs&amp;beers y eventos varios, soy un tanto asocial cibernético y no me van esos "tinglaos", sino, seguro que esta lista aumentaría considerablemente, aunque seguro que la otra lista dedicada a la chusmilla pasaría del cero actual a un N poco deseado.&lt;br /&gt;&lt;br /&gt;
Pero esto no es todo, bueno, si es que hay algún masoca que le ha dado por seguir leyendo. Una de las cosas más importantes que he sacado de todo esto ha sido estar al día del mundo de la informática. Yo, aunque me pese reconocerlo, usaba tablas, sí, lo sé, me avergüenzo de ello, pero ya me he quitado y no las uso, soy un desarrollador nuevo. Tampoco sabía de Ajax, y ahora aunque sigo igual, al menos hice un par de entradas en Sentido Web que intentaban demostrar lo contrario. Tampoco sabía de WordPress y me dio por hacer una extensión (que al menos tuvieron la decencia de mejorarla), e incluso me dio por hacer una extensión de Firefox. E incluso las entradas tipo &lt;em&gt;Vía / ...&lt;/em&gt; que tanto se suelen criticar en la blogosfera me sirven para aprender, porque si las pongo es porque a mi me resultan interesantes y espero que lo sean para otros. Total, y resumiendo, que si no fuera por Sentido Web seguiría con mis tablas y sus similares.&lt;br /&gt;&lt;br /&gt;
Dentro de otro año, otro artículo en el que diga que al menos sé un poco de lo que hablo.&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;(&lt;acronym title="El primero de todos, no el segundo"&gt;JL&lt;/acronym&gt;, esta vez no he dicho quien eras directamente, que luego se te suben los colores)&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-661823323349082935?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/661823323349082935/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=661823323349082935' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/661823323349082935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/661823323349082935'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/03/lo-bueno-de-ser-blogger.html' title='Lo bueno de ser blogger'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-7203220198210426736</id><published>2007-02-21T12:03:00.000+01:00</published><updated>2007-02-21T12:09:29.690+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='problemas'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='this'/><title type='text'>Problemas con JSON y this</title><content type='html'>El otro día comentaba con &lt;a href="http://mcuadros.es"&gt;Máximo&lt;/a&gt; algo que a los dos nos pasaba y no entendemos por qué. Se trata de cuando se usa JSON y se hacen referencias al objeto dentro de sí mismo.&lt;br&gt;&lt;br&gt;
&lt;pre class="code"&gt;var obj = {
  valor : "",
  funcion : function() {
    this.valor = ... ;
  }
}&lt;/pre&gt;
&lt;br&gt;Cuando usamos &lt;em&gt;this&lt;/em&gt; para hacer referencia a algo del objeto a veces no parece funcionar y para que tenga el comportamiento que queremos, es necesario usar el nombre del objeto (&lt;em&gt;obj&lt;/em&gt;) para que funcione correctamente.&lt;br&gt;&lt;br&gt;
Mi pregunta: ¿por qué?&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-7203220198210426736?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/7203220198210426736/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=7203220198210426736' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/7203220198210426736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/7203220198210426736'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/02/problemas-con-json-y-this.html' title='Problemas con JSON y this'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-9036762204744433695</id><published>2007-01-25T14:24:00.000+01:00</published><updated>2007-01-25T14:33:27.024+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><title type='text'>Señores desarrolladores de extensiones de Firefox</title><content type='html'>Yo soy el primero que comete errores programando, puede que no programe todo lo limpio que debería. Con esto quiero dejar claro que no me las quiero dar de super-desarrollador con capa y ropa interior por encima de los pantalones, pero eso sí, quiero hacer un llamamiento (que no va a oir nadie) para que los que realicen extensiones para Firefox corrijan sus errores de Javascript, ya que en mi Firebug me salen errores suyos a cada rato. 
&lt;br&gt;&lt;br&gt;
¿Alguien sabe a dónde ha ido a parar la opción de Firebug que hacía que no se te mostrasen los errores de Chrome? en la nueva versión no encuentro esta opción. Y aunque la encontrara, la necesito activa para una extensión que estoy haciendo (que por cierto, intentaré que no muestre los errores que critico).

Estoy cansado del "toolbar.js" y de otro que ahora no recuerdo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-9036762204744433695?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/9036762204744433695/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=9036762204744433695' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/9036762204744433695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/9036762204744433695'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/01/seores-desarrolladores-de-extensiones.html' title='Señores desarrolladores de extensiones de Firefox'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-7688352243096998088</id><published>2007-01-11T16:12:00.000+01:00</published><updated>2007-01-11T16:22:00.125+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='ie'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><title type='text'>Problemillas con JSON</title><content type='html'>Ahora que aparece por todas partes el &lt;a href="http://ajaxian.com/archives/json-vs-xml-the-debate"&gt;debate entre JSON y XML&lt;/a&gt;, a mi me ha dado un pequeño problema, que me ha vuelto loco ya que es de esas cosas que no ves a simple vista, bueno, a mi corta simple vista.&lt;br&gt;&lt;br&gt;
Se trata de cuando creas un array de propiedades:&lt;br&gt;&lt;br&gt;
&lt;pre class="code"&gt;var objeto = {
"param1" : valor1,
"param2" : valor2,
...
"paramn" : valorn&lt;strong&gt;,&lt;/strong&gt;
}&lt;/pre&gt;
Si no se ve claramente, en el &lt;em&gt;paramn&lt;/em&gt; al final hay una coma, cuando supuestamente no debería haberla. El Firefox se la traga pero no crea un elemento extra, el IE tambié se la traga pero crea un elemento extra &lt;em&gt;undefined&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
¿Cuál de los dos está mal?, pues yo creo que ambos, no deberían aceptar que hubiera una coma (o al menos eso es lo que se indica en &lt;a href="http://json.org"&gt;JSON.org&lt;/a&gt;, Firefox no crea elemento cuando encuentra la coma, pero lo lógico es que creara un elemento, eso sí, no lo crea para que no nos de error de Javascript. IE se lo crea y crea un elemento &lt;em&gt;undefined&lt;/em&gt; que tiene cierta lógica, pero al igual que Firefox, no tiene lógica que cree algún elemento.&lt;br&gt;&lt;br&gt;
Pues eso, que la tontería hace que me vuelva loco buscando por qué no se comporta un script igual en Firefox o en IE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-7688352243096998088?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/7688352243096998088/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=7688352243096998088' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/7688352243096998088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/7688352243096998088'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2007/01/problemillas-con-json.html' title='Problemillas con JSON'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-4289261356077260842</id><published>2006-12-14T14:17:00.000+01:00</published><updated>2006-12-14T14:36:03.739+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='amigo invisible'/><title type='text'>AmigoInvisible.php</title><content type='html'>Bueno, este no es el gran post de desarrollo web, pero quizás a alguien le pueda ser de utilidad. Se trata de un script en PHP que hace el sorteo del amigo invisible, cada persona tiene que seleccionarse y así le sale la persona a quien le toca regalar.
&lt;br /&gt;&lt;br /&gt;
Cuando digo que no es la gran cosa, pues es que no lo es. Ha surgido por una amiga que me pidió el favor para hacerlo ella para la familia. Consta del script, y de dos ficheros de texto, que deben ser iguales y que tienen que tener a las personas que participan en el amigo invisible (&lt;em&gt;familia.txt&lt;/em&gt; y &lt;em&gt;afortunados.txt&lt;/em&gt;). Según se va usando, se va creando un dichero llamado &lt;em&gt;relaciones.txt&lt;/em&gt;, que guarda las relaciones por si luego se necesitan comprobar.
&lt;br /&gt;&lt;br /&gt;
Os dejo el &lt;a href="http://rapidshare.com/files/7450102/amigoinvisible.zip.html"&gt;script&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-4289261356077260842?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/4289261356077260842/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=4289261356077260842' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/4289261356077260842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/4289261356077260842'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/12/amigoinvisiblephp.html' title='AmigoInvisible.php'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-116367748890329914</id><published>2006-11-16T12:38:00.000+01:00</published><updated>2006-11-16T12:46:10.990+01:00</updated><title type='text'>Suerte para EBE06</title><content type='html'>Mañana viernes empieza &lt;a href="http://eventoblog.com"&gt;EBE06&lt;/a&gt; y me gustaría desear suerte a lo organizadores por todo el curro que sé que están haciendo (bueno, al menos uno de ellos que es al que conozco).&lt;br&gt;&lt;br&gt;
Una pena no poder estar allí, espero que esté muy bien y que los que no podamos acudir, nos enteremos de todo lo que pasa por allí.&lt;br&gt;&lt;br&gt;
&lt;img src="http://photos1.blogger.com/blogger/1418/2181/320/eventoblog.png" alt="Event Blog España 06"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-116367748890329914?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/116367748890329914/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=116367748890329914' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116367748890329914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116367748890329914'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/11/suerte-para-ebe06.html' title='Suerte para EBE06'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-116256669202949887</id><published>2006-11-03T15:40:00.000+01:00</published><updated>2006-11-03T16:21:53.626+01:00</updated><title type='text'>XHTML: presentación y contenido... ¿separados?</title><content type='html'>Hoy me voy a poner un poco filosófico, o quizás no voy a decir más que tonterías, pero bueno, sea lo que sea, quizás sirva para algo.&lt;br&gt;&lt;br&gt;
Cuando empecé en esto del desarrollo web, creo que el IE acababa de salir y estaba el Netscape como amo absoluto, cuando realizabas una página web, poco podías hacer por la presentación, se abusaba de los backgrounds y de los gifs animados y la etiqueta &lt;em&gt;font&lt;/em&gt; era lo mejor del mundo porque te permitía cambiar el color de la letra.&lt;br&gt;&lt;br&gt;
De ese pasado remoto, hemos llegado al hecho de que la complejidad de las CSS son superiores al contenido del HTML, si antes hacíamos tablas rebuscadas para presentar la página según el diseño que habíamos ideado, ahora el HTML es de lo más "sencillo", mientras que las CSS son lo más tiempo nos puede llevar (ejemplos increibles se pueden ver en &lt;a href="http://www.cssplay.co.uk/"&gt;CSSPlay&lt;/a&gt;), todo esto abanderado por la idea de separar la capa de presentación (CSS) y la de contenido (HTML). 
Así, si queremos cambiar el aspecto de nuestra página solo deberemos modificar el CSS, como hace por ejemplo &lt;a href="http://dizque.lacalabaza.net/"&gt;Dizque&lt;/a&gt; en su blog.&lt;br&gt;&lt;br&gt;
Hasta aquí todo perfecto, la verdad es que da gusto trabajar siguiendo esta filosofía, pero... ¿es exacta esta teoría?. A mi entender, no. Si lo puede ser en la mayoría de los casos, o al menos en bastante de ellos, pero con todo esto de la web 2.0, cada vez esta teoría falla más amenudo. Me explico, ¿cuantas veces has incluido un &lt;em&gt;div&lt;/em&gt; o un &lt;em&gt;span&lt;/em&gt; cuando su única utilidad es ayudarnos a cuadrar todo el estilo?. Al menos a mí me ha pasado, por ejemplo cuando he creado pestañas para un menú, a la hora de que cuando se quede seleccionada no sea un enlace, he necesitado una etiqueta cuya utilidad dentro del contenido ha sido totalmente nula.&lt;br&gt;&lt;br&gt;
Un ejemplo de lo que digo se puede ver en CSSPlay, se trata de uno de sus impresionantes ejemplos, &lt;a href="http://www.cssplay.co.uk/menus/snazzymenu.html"&gt;A snazzy border menu&lt;/a&gt;, si vemos el código de cómo lo ha hecho (solo verlo, no tocarlo, que tiene copyright), observamos que cada una de las opciones tiene las siguientes etiquetas:&lt;br&gt;&lt;br&gt;
&lt;pre class="code"&gt;&amp;lt;li&amp;gt;
&amp;lt;a class="xmenu2" href="#nogo"&amp;gt;&amp;lt;b class="xsnazzy"&amp;gt;&amp;lt;b class="xtop"&amp;gt;&amp;lt;b class="xb1"&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class="xb2"&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class="xb3"&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class="xb4"&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;span class="xboxcontent"&amp;gt;
Paul&amp;lt;br /&amp;gt;Cezanne&amp;lt;/span&amp;gt;
&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/li&amp;gt;&lt;/pre&gt;
No estoy muy seguro, pero creo que hay exceso de etiquetas &lt;em&gt;b&lt;/em&gt;, y si le quitamos el estilo a la página, pues no se va a ver nada de nada, entre otras cosas porque estas etiquetas no tienen contenido.&lt;br&gt;&lt;br&gt;
Si el autor no usara este número de etiquetas, sería imposible hacer lo que ha hecho. Pero claro, esto realmente no es separación de capas, es más, si usaramos las etiquetas justas para el contenido, nos ahorraríamos unos cuantos megas en el uso de ancho de bando al día.&lt;br&gt;&lt;br&gt;
Conclusión: veo muchas veces a algún extremista en este tipo de teorías, pero siendo puristas, quizás la gente solo se fija en si aparece el atributo &lt;em&gt;style&lt;/em&gt; y no si realmente se ha separado totalmente la capa de presentación de la capa de contenido.&lt;br&gt;&lt;br&gt;
Conclusión 2: me da igual si no existe esta separación, está claro que el trabajo de CSSPlay es digno de admiración, y si tengo que añadir un style para no complicarme la vida durante 1 semana para conseguir la susodicha separación de capas, no me cortaré lo más mínimo e incluiré la etiqueta (es más, la escribiré en mayúsculas para que no valide el XTHML).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-116256669202949887?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/116256669202949887/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=116256669202949887' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116256669202949887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116256669202949887'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/11/xhtml-presentacin-y-contenido.html' title='XHTML: presentación y contenido... ¿separados?'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-116178646496229881</id><published>2006-10-25T16:21:00.000+02:00</published><updated>2006-10-25T16:27:44.986+02:00</updated><title type='text'>IE7, me esperaba de todo menos esto</title><content type='html'>Hoy me ha dado por instalar IE7 en el ordenador del trabajo (que no se enteren que seguro que no les hace mucha gracia), pero he instalado la versión que no machaca a la versión 6.
&lt;br&gt;&lt;br&gt;
Lo primero que he hecho ha sido mirar si la página que estoy desarrollando daba errores en IE7, ya que en IE6 estaba teniendo mis quebraderos de cabeza, como ya he contado.
&lt;br&gt;&lt;br&gt;
Me esperaba lo peor, y lo que me he encontrado es lo más curioso, la virgulilla de la Ñ no sale si escribo la &lt;a href="http://www.w3.org/TR/html401/sgml/entities.html#h-24.2.1"&gt;entidad&lt;/a&gt; &amp;amp;sim;. No sé si no sale porque algo falla o porque como me he instalado algo no oficial, tiene sus fallos. Aún así, es algo muy raro, sobre todo cuando las entidades HTML es algo definico por la W3C y que además sale en IE6.&lt;br&gt;&lt;br&gt;
Total, que si alguien usa IE7 y ve este caracter bien (&amp;sim;), que me lo diga por no preocuparme (como si me preocupara que no saliera en IE7).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-116178646496229881?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/116178646496229881/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=116178646496229881' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116178646496229881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116178646496229881'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/10/ie7-me-esperaba-de-todo-menos-esto.html' title='IE7, me esperaba de todo menos esto'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-116161374711238309</id><published>2006-10-23T16:02:00.000+02:00</published><updated>2006-10-23T23:08:22.310+02:00</updated><title type='text'>Me estresa el IE</title><content type='html'>&lt;img style="float:right;" src="http://photos1.blogger.com/blogger/1418/2181/320/ie_pirata.png" border="0" alt="" /&gt;Estoy desarrollando una aplicación y como siempre uso Firefox, y luego compruebo que salga igual en Opera y en IE. Opera sin problemas, para variar. IE no da más que problemas, para variar.&lt;br&gt;&lt;br&gt;
Me ha pasado de todo, solo faltaba que me salieran &lt;a href="http://www.lo-inexplicable.com.ar/fantasmas/lascaras_debelmez.htm"&gt;las caras de Bélmez&lt;/a&gt;, primero un recuardo que se pintaba parte si parte no, y si movía el scroll se desdibujaba lo que estaba oculto, solucionado usando un &lt;em&gt;"position: relative"&lt;/em&gt;, claro, que ni idea de por qué se soluciona así, pero siguiendo la máxima de la programación, si funciona, no lo toques. &lt;br&gt;&lt;br&gt;
Luego unas leyendas de unos thumbnails salían desplazados unos 200px a la derecha, y ni idea de la causa, ni había posicionamiento, ni márgenes, ni desplazamientos, ni nada de nada. Lo único que había era un "float: left" en el padre... pero ¡narices! es el padre, ¿por que el resto de los elementos contenidos en el padre no se iban de paseo como el párrafo de la leyenda?. ¿Solución?, ni me acuerdo, pero creo que puse otro &lt;em&gt;"position: relative"&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
Luego aparecieron los problemas con el posicionamiento absoluto, que en FF y en Opera lo hacían como se suponía y en IE hacía lo que le venía en gana. ¿Solución?, pues buscarse la vida, porque aquí no podía usar &lt;em&gt;"position: relative"&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
Bueno, ya lo decía Einstein (o cualquiero otro), que todo es "relativo". Menos mal que no tengo instalado el IE7, porque entonces sí que me corto las venas. Bueno, como encuentre "como puedo instalar IE7", pues entraré en crisis.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Actualización&lt;/strong&gt;: Otra más, ahora un enlace con &lt;em&gt;"border: 1px solid #000000"&lt;/em&gt; que está en un span con &lt;em&gt;"float: left"&lt;/em&gt;, no me muestra los border superior e inferior. Peeeeeeero, si le pongo al span &lt;em&gt;"padding: 10px"&lt;/em&gt;, entonces se ven los bordes a la perfección. Si queréis una explicación detallada escribir un email al &lt;a href="mailto:bill_tio_tas_pasao_con_el_ie@microsoft.com"&gt;Servicio Técnico de IE&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-116161374711238309?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/116161374711238309/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=116161374711238309' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116161374711238309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116161374711238309'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/10/me-estresa-el-ie.html' title='Me estresa el IE'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-116138024773969171</id><published>2006-10-20T23:31:00.000+02:00</published><updated>2006-10-20T23:37:27.763+02:00</updated><title type='text'>RudeWorks</title><content type='html'>Una de las cosas que más me gusta es conocer nuevos sitios gracias a los comentarios y a la gente que referencia tanto &lt;strong&gt;display: NONE&lt;/strong&gt; como &lt;strong&gt;Sentido Web&lt;/strong&gt;. Por ello he conocido un blogger con un trabajo gráfico que me ha gustado mucho (¡quién pudiera!).&lt;br&gt;&lt;br&gt;
Pues nada, si alguno me hace el honor de escribirme un comentario, por favor que ponga su sitio web, yo encantado de visitarlo.&lt;br&gt;&lt;br&gt;
&lt;a href="http://rudeworks.com/rudeworks/designworks"&gt;RudeWorks&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-116138024773969171?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/116138024773969171/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=116138024773969171' title='8 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116138024773969171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116138024773969171'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/10/rudeworks.html' title='RudeWorks'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-116007785249367213</id><published>2006-10-05T21:21:00.000+02:00</published><updated>2006-10-05T21:50:52.556+02:00</updated><title type='text'>J2EE y web services no es lo mismo</title><content type='html'>Lo que hay que aguantar.&lt;br&gt;&lt;br&gt;
Hoy me viene el jefe del cliente y me pregunta que si se algo de &lt;a href="http://en.wikipedia.org/wiki/J2ee"&gt;J2EE&lt;/a&gt; y le contesto que sí, que llevo 6 años trabajando en eso. Es más, le tendría que haber dicho que el trabajo que hago para él es todo con J2EE, pero bueno, me pilló de sorpresa y solo me dio por bromear y decir que si no sabía nada de J2EE después de 6 años, era para cortarme las venas.&lt;br&gt;&lt;br&gt;
Total, que el hombre insiste en informarse sobre mis conocimientos y ya al rato me dice que le había dicho a un interno (que se cree el más listo), que me pasara una cosa que implicaba hacer un &lt;a href="http://en.wikipedia.org/wiki/Webservices"&gt;web service&lt;/a&gt;, y el colega le dice que no, porque yo no sé J2EE.&lt;br&gt;&lt;br&gt;
¿Cómo?, ¿que yo no sé J2EE?, ¿pero que tiene que ver el J2EE con los web services?, vale, el J2EE tiene un &lt;a href="http://java.sun.com/webservices/"&gt;API&lt;/a&gt; para los web services, pero también el &lt;a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnwebsrv/html/wsmsplatform.asp"&gt;.NET&lt;/a&gt; y muchos otros. Yo sí he dicho que nunca he hecho un web service, pero tampoco sabía nada de &lt;a href="http://www.oracle.com/technology/products/integration/workflow/workflow_fov.html"&gt;Oracle Workflow&lt;/a&gt;, de &lt;a href="http://sentidoweb.com/temas/desarrollo-web/php/"&gt;PHP&lt;/a&gt;, de &lt;a href="http://sentidoweb.com/temas/desarrollo-web/ajax/"&gt;AJAX&lt;/a&gt; y muchas otras  cosas que he aprendido solito y que las uso a diario. Pero que no pasa nada, que busco en Google y se hace un web service en tres patadas.&lt;br&gt;&lt;br&gt;
Lo peor de todo es que la persona que dice que no sé J2EE es la que me preguntó como podía coger un array de chars y dividirlo en trozos de 100 en 100... eehhhh, uffff, puessss... ¿con un &lt;em&gt;for&lt;/em&gt;?.&lt;br&gt;&lt;br&gt;
Vamos, que lo que tengo que aguantar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-116007785249367213?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/116007785249367213/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=116007785249367213' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116007785249367213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/116007785249367213'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/10/j2ee-y-web-services-no-es-lo-mismo.html' title='J2EE y web services no es lo mismo'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-115979915749633378</id><published>2006-10-02T16:09:00.000+02:00</published><updated>2006-10-02T16:31:21.003+02:00</updated><title type='text'>Evento Blog España</title><content type='html'>Mis blogo-familia de &lt;a href="http://blogsmedia.com"&gt;BlogsMedia&lt;/a&gt; y en especial &lt;a href="http://ideasapiens.blogsmedia.com/blogs/is/"&gt;Jose Luis Antunez&lt;/a&gt;, el "alma" de &lt;a href="http://sentidoweb.com"&gt;Sentido Web&lt;/a&gt;, se han metido en la organización de un evento muy importante para la blogosfera española: &lt;a href="http://eventoblog.com"&gt;Evento Blog&lt;/a&gt;. Junto a otras &lt;a href="http://eventoblog.com/info/organizacion"&gt;personalidades&lt;/a&gt; y grandes &lt;a href="http://www.eventoblog.com/intervinientes"&gt;conferenciantes&lt;/a&gt;, en especial &lt;a href="http://www.eventoblog.com/intervinientes/#matt"&gt;Matt Mullenweg&lt;/a&gt; (total, na').&lt;br&gt;&lt;br&gt;
&lt;img src="http://photos1.blogger.com/blogger/1418/2181/320/eventoblog.png" border="0" alt="" /&gt;
&lt;br&gt;&lt;br&gt;
&lt;blockquote&gt;Evento Blog España (EBE06), será la primera cita de alcance nacional en la que se analizará, desde distintos puntos de vista, la evolución del fenómeno blog en nuestro país, aunque sin perder de vista lo que ocurre en la blogosfera en general y en el mundo hispano, en particular.&lt;/blockquote&gt;
&lt;br&gt;&lt;br&gt;
Suerte a los organizadores.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-115979915749633378?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/115979915749633378/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=115979915749633378' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115979915749633378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115979915749633378'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/10/evento-blog-espaa.html' title='Evento Blog España'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-115796828550308092</id><published>2006-09-11T11:35:00.000+02:00</published><updated>2006-09-11T11:58:27.236+02:00</updated><title type='text'>Viva el autobombo en Menéame</title><content type='html'>Supongo que habrá muchos que no estén de acuerdo con mi opinión, pero bueno, cada cual es cada cual y 6 media docena. Suelo mirar una vez al día &lt;a href="http://meneame.net"&gt;Menéame&lt;/a&gt; para buscar noticias interesantes que poner en &lt;a href="http://sentidoweb.com"&gt;Sentido Web&lt;/a&gt; y ya de paso ver algunas cosas curiosas que pone la gente.&lt;br&gt;&lt;br&gt;
Muchas de estas veces encuentro artículos que me gustan, aunque no los ponga en Sentido Web y que al ver los comentarios de la gente (que si me permitís la critica, hay un poquillo de &lt;em&gt;mafia&lt;/em&gt;), leo que muchas veces la gente lo define como spam, autobombo, etc, etc.&lt;br&gt;&lt;br&gt;
Una de las cosas que más me gusta de cuando alguien me escribe un comentario, es poder meterme en su blog y echarle un vistazo. Por ejemplo así descubrí a &lt;a href="http://ktzar.com/2006/sonrojo-bloguero"&gt;ktzar&lt;/a&gt;, si mal no recuerdo escribió un comentario suyo o aquí o en Sentido Web (juraría que aquí) y la verdad es que gracias a ello disfruto de su blog.&lt;br&gt;&lt;br&gt;
Yo cuando empecé con &lt;strong&gt;display: NONE&lt;/strong&gt;, me meneé a mi mismo (llamalo spam o como te de la gana), entre otras cosas para darme a conocer y porque no tenía muy claro que no gustaba mucho el autobombo por allí.&lt;br&gt;&lt;br&gt;
Pues que queréis que os diga, me gusta el autobombo, gracias a ello me entero de &lt;a href="http://meneame.net/story/novedades-en-java-7-dolphin"&gt;muy buenas noticias&lt;/a&gt; y no solo de cosas sobre el &lt;a href="http://meneame.net/?search=canon"&gt;canon&lt;/a&gt;, &lt;a href="http://meneame.net/?search=zapatero"&gt;ZP&lt;/a&gt;, el &lt;a href="http://meneame.net/?search=rajoy"&gt;PP&lt;/a&gt; o &lt;a href="http://meneame.net/?search=ramoncin"&gt;Ramoncín&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
Supongo que el problema se encuentra en el mismo FAQ:
&lt;blockquote&gt;Lo que no debes hacer es autobombo o spam, es decir enviar &lt;strong&gt;demasiados&lt;/strong&gt; enlaces con el objetivo de promocionar tu propio blog (o el de tus amigos), envía historias que puedan ser interesantes para muchos.&lt;/blockquote&gt;&lt;br&gt;&lt;br&gt;
Vamos, que está claro que si una persona se pasa poniendo todo el tiempo sus entradas, pues puede resultar cansino, pero si la entrada (aunque haya puesto mil suyas), es interesante, ¿por que decir que es autobombo?, pues aunque lo sea, me parece perfecto que lo haya hecho. Mi meneo para &lt;a href="http://meneame.net/user.php?login=anodino&amp;view=history"&gt;anodino&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
¡Ah! y otra cosa que no me parece muy bien, es que llegue alguien y en los comentarios ponga la URL original de la noticia. Pues me parece un poco feo, porque si no llega a ser por la persona que ha estado buscando y ha encontrado la noticia que nos ha interesado, quizás no nos hubieramos enterado de su existencia. Hay que darle mérito al blogger que ha referenciado la noticia. ¿Por qué no se pone la URL original si se trata de &lt;a href="http://microsiervos.com"&gt;Microsiervos&lt;/a&gt;, &lt;a href="http://genbeta.com"&gt;GenBeta&lt;/a&gt; o de algún otro famoso?.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-115796828550308092?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/115796828550308092/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=115796828550308092' title='10 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115796828550308092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115796828550308092'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/09/viva-el-autobombo-en-mename.html' title='Viva el autobombo en Menéame'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-115712982375853889</id><published>2006-09-01T18:39:00.000+02:00</published><updated>2006-09-01T18:57:04.523+02:00</updated><title type='text'>Multilenguaje mediante XHTML</title><content type='html'>Esto realmente es una pregunta al aire (¿hay alguien que aún me lea?, jeje). Pensando en aplicaciones multilenguaje en las que he trabajado, siempre se nos presenta la duda de cómo hacer el multilenguaje. Hay gente que prefiere los ficheros de properties, los hay que prefieren la base de datos, incluso quienes prefieren variables estaticas (¡dios mio!).
&lt;br&gt;&lt;br&gt;
A mí se me ha ocurrido lo siguiente, lo he intentado varias veces, pero por la falta de tiempo no he podido sacarlo o saber si se puede hacer o realmente es un imposible. XHTML es un XML, un XML está definido por una DTD, en la cabecera del XHTML se define cual es la DTD que valida el documento (xhtml1-transitional.dtd). Ahora bien, si yo me creo una DTD que incluya la DTD del XHTML, podré definirme mis propias entidades y usarlas en un XHTML, por ejemplo, si tengo una palabra en castellano "Inicio" y quiero que si se elige el idioma en inglés se escriba "Home", me podré definir una entidad "&amp;INICIO;" que la traduzca por una u otra según el idioma que se ha seleccionado.
&lt;br&gt;&lt;br&gt;
Problemas, tan solo uno: no soy capaz de hacerlo. Mis conocimientos de XML creo que son los de la mayoría, en todas las aplicaciones que he necesitado usar XML no ha sido necesario hacer grandes alardes de conocimiento, con lo justo bastaba. Pero aún así sé que se puede hacer lo que pretendo, porque por ejemplo la DTD &lt;a href="http://www.w3.org/TR/MathML2/"&gt;MathML&lt;/a&gt; creo que incluye la de XHTML.
&lt;br&gt;&lt;br&gt;
Otro problema que se me plantearía, cuando resolviera lo de que me sacara las entidades, sería lo de mostrar un valor u otro según un idioma seleccionado. No sé si se puede elegir una DTD u otra dependiendo de un parámetro. De todas formas, se podría hacer mediante PHP, claro, que sería mucho más elegante usar unicamente XHTML.
&lt;br&gt;&lt;br&gt;
Mientras escrito todo esto, caigo en la cuenta de que creo que no he probado que me muestre las entidades haciendo que el navegador trate el documento como un XHTML y no simplemente &lt;a href="http://sentidoweb.com/2006/08/02/cuidado-con-el-xhtml.php"&gt;crearlo como XHTML y que luego lo trate como HTML&lt;/a&gt;.
&lt;br&gt;&lt;br&gt;
Si alguien consigue sacarlo, por favor, que me lo diga. A partir de ese momento le consideraré la máquina de la güeb, si es que no lo hago ya ahora, claro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-115712982375853889?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/115712982375853889/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=115712982375853889' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115712982375853889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115712982375853889'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/09/multilenguaje-mediante-xhtml.html' title='Multilenguaje mediante XHTML'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-115686060403385043</id><published>2006-08-29T15:53:00.000+02:00</published><updated>2006-08-29T16:13:23.693+02:00</updated><title type='text'>Mi amigo el IE</title><content type='html'>Acabo de leer esta entrada de &lt;a href="http://www.anieto2k.com/2006/08/28/lista-de-cambios-en-el-css-de-ie-7/"&gt;aNiego2K&lt;/a&gt; sobre los cambios que trae la nueva versión de Internet Explorer y me he ha venido a la mente que ayer mismo tuve malos pensamientos sobre la familia de Bill Gates (no, no hay mente sucia en esto).&lt;br&gt;&lt;br&gt;
El hecho es que ayer en un página en la que estoy trabajando, tenía que modificar el contenido de una capa que contenía el típico calendario popup, y cuando pulsaba para ir al siguiente mes usaba la propiedad &lt;em&gt;innerHTML&lt;/em&gt; para modificar su contenido. La capa contenedora, estaba creada mediante DOM (supongo que por aquí venía el problema) y luego su contenido lo actualizaba mediante &lt;em&gt;innerHTML&lt;/em&gt; (pasaba de estar creando objetos como un loco mediante DOM). La primera vez que actualizaba el contenido me lo hacía a la perfección, la siguiente vez me daba un precioso mensaje de error ("no está permitida esa operación" o algo así) justo cuando modificaba el valor de &lt;em&gt;innerHTML&lt;/em&gt;. ¿Por? ni idea, supongo que podría ser por crear el objeto usando DOM, pero no tenía tiempo para investigar, ni hacer un estudio, ni nada de nada, tenía cosas más importantes que hacer (hacer la cena y ver la tele). Por lo que después de muchos intentos, lo único que me funcionó fue lo siguiente:&lt;br&gt;&lt;br&gt;
&lt;p class="code"&gt;
function modificaCalendario(fecha1, fecha2, id) {
  &lt;span class="code-comment"&gt;/* INCREIBLE EL IE ME OBLIGA A ESCRIBIR ESTO */&lt;/span&gt;
 document.getElementById(id).removeChild(document.getElementById(id).firstChild);
  var capa = document.createElement("DIV");
  capa.innerHTML = creaCalendario(fecha1, fecha2, id);
  &lt;span class="code-comment"&gt;/* FIN DE MI ODIO A IE */&lt;/span&gt;
  document.getElementById(id).appendChild(capa); 
}&lt;/p&gt;
Gracias Bill por hacerme pasar horas delante del ordenador comiendome la cabeza y así evitando que la tele tonta me fría el cerebro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-115686060403385043?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/115686060403385043/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=115686060403385043' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115686060403385043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115686060403385043'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/08/mi-amigo-el-ie.html' title='Mi amigo el IE'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-115313909406803057</id><published>2006-07-17T14:16:00.000+02:00</published><updated>2006-07-17T14:40:17.026+02:00</updated><title type='text'>¿Spam en Technorati?</title><content type='html'>Supongo que como la mayoría de los bloggers, me gusta mirar de vez en cuando Technorati por si hay alguien que nos enlaza (en este caso a &lt;a href="http://sentidoweb.com"&gt;Sentido Web&lt;/a&gt;, y cual es mi sorpresa cuando veo que aparece que nos enlaza una compañía de seguros (en inglés), ¿¿¿como???.&lt;br/&gt;&lt;br/&gt;
Bueno, os dejo la captura, porque o soy muy nuevo en esto, o a mi me suena a spam (bueno, no es spam, spam, que digamos, pero si en vez de Technorati hubiera sido GMail, ya lo estaría mandando a la papelera).&lt;br /&gt;&lt;br /&gt;
&lt;a href="http://photos1.blogger.com/blogger/1418/2181/1600/technorati-spam.png"&gt;&lt;img src="http://photos1.blogger.com/blogger/1418/2181/320/technorati-spam.png" border="0" alt="Technorati spam" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Actualización&lt;/strong&gt;: Ya no aparece, son rápidos estos de Technorati.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-115313909406803057?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/115313909406803057/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=115313909406803057' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115313909406803057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115313909406803057'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/07/spam-en-technorati.html' title='¿Spam en Technorati?'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-115130185702283807</id><published>2006-06-26T07:43:00.000+02:00</published><updated>2006-06-26T08:04:17.053+02:00</updated><title type='text'>Nueva versión de Inkscape</title><content type='html'>Ha salido la versión 0.44 de Inkscape, un editor SVG gratuito, el cual yo uso para mis diseños, y que aunque no está a la altura de otros comerciales, la verdad es que le falta poco. En esta nueva versión tenemos como novedades: un diálogo de capas, exportar a PDF (que para mi gusto no lo hace muy bien, si le metes TTF creo que lo pasa a vectores y no lo deja muy bien, al menos la prueba que yo he hecho), clipping y máscaras, configuración de shortcuts, node sculping (que lo que permite es moldear varios nodos, pero solo moviendo uno, el resto se desplazan de forma proporcional) y &lt;a href="http://wiki.inkscape.org/wiki/index.php/ReleaseNotes044"&gt;varios cambios más&lt;/a&gt;.
&lt;br&gt;&lt;br&gt;
&lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-115130185702283807?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/115130185702283807/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=115130185702283807' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115130185702283807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/115130185702283807'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/06/nueva-versin-de-inkscape.html' title='Nueva versión de Inkscape'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114683581481714090</id><published>2006-05-05T15:26:00.000+02:00</published><updated>2006-05-05T15:30:14.840+02:00</updated><title type='text'>Manuales con licencia Creative Commons</title><content type='html'>Debido a un problema que he tenido con Oracle y el que no implementen &lt;em&gt;ON UPDATE CASCADE&lt;/em&gt;, he conocido un sitio con varios manuales realizados por el autor con licencia Creative Commons (gracias &lt;a href="http://labuenaletra.blogspot.com/"&gt;Belcha&lt;/a&gt;): Oracle, MySQL, Javascript, HTML, CSS1, ... muy buenos para aquellos que vayan empezando en todo esto (y para el resto).

&lt;a href="http://www.jorgesanchez.net"&gt;Manuales Creative Commons de Jorge Sánchez&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114683581481714090?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114683581481714090/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114683581481714090' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114683581481714090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114683581481714090'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/05/manuales-con-licencia-creative-commons.html' title='Manuales con licencia Creative Commons'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114554235336085851</id><published>2006-04-20T15:58:00.000+02:00</published><updated>2006-04-20T16:16:06.830+02:00</updated><title type='text'>Trabajando con Netscape 4.7</title><content type='html'>En un mundo en el que la gente habla de AJAX, de Web 2.0, de Firefox, de la nueva versión de Internet Explorer, a mí me toca hablar de Netscape 4.7. Para aquellos que lo desconozcan, Netscape fué uno de los pioneros en el desarrollo de navegadores... vale, si, todo el mundo conoce el Netscape, pero que levanten el ratón aquellos que han llegado a usar el Netscape 4.7, y ahora que levanten el ratón aquellos que usan el Netscape 4.7 AHORA. Vaya, parece que me quedo solo (bueno, y mis dos compañeros).&lt;br&gt;&lt;br&gt;
Hay algunos que se &lt;a href="http://www.sofanaranja.com/2006/04/10/un-nuevo-tag-xhtml-cwt/"&gt;quejan&lt;/a&gt; de que el cliente les obliga a crear código HTML que no valida XHTML o que simplemente no es código limpio. Que se sientan afortunados, a mí me obligan a usar Netscape 4.7 en el proyecto en el que estoy metido, y es algo imposible de cambiar, el cliente (mejor no digo cual para que no se rian de él) sigue usando Netscape 4.7 y pagaron mucho dinero para que apareciera el logo de la empresa en el Netscape 4.7, y, claro, no pueden ahora decir que no se usa el Netscape 4.7. ¡Dios mío!, ¿pero esto hasta cuando?.&lt;br&gt;&lt;br&gt;
Cierto, lo antiguo se pone de moda, pero yo siempre creí que se refería a los pantalones campana, las gafas de sol enormes, las patillas y la serie "Cuéntame", pero por favor, usar Netscape 4.7 no es tan "cool" como las patillas.&lt;br&gt;&lt;br&gt;
Por cierto, si algún friki patológico aún guarda algún manual de Javascript para Netscape 4.7, por favor, que me lo envie, cada día te llevas una sorpresa nueva al comprobar que comandos de Javascript que para tí son de uso normal no existen para Netscape 4.7.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114554235336085851?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114554235336085851/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114554235336085851' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114554235336085851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114554235336085851'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/04/trabajando-con-netscape-47.html' title='Trabajando con Netscape 4.7'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114554112168245612</id><published>2006-04-20T15:47:00.000+02:00</published><updated>2006-04-20T15:52:01.710+02:00</updated><title type='text'>Technorati, ¿y cuándo no?</title><content type='html'>Hace mucho que no escribo, pero hoy he podido sacar un poco de tiempo para quejarme, pues esto. Technorati, ¿y cuándo no?:&lt;br&gt;&lt;br&gt;
&lt;blockquote&gt;Sorry, we couldn't complete your search because we're experiencing a high volume of requests right now. Please try again in a minute or add this search to your watchlist to track conversation.&lt;/blockquote&gt;&lt;br&gt;&lt;br&gt;
Estaría bien que Google soltara un mensaje parecido:&lt;br&gt;&lt;br&gt;
&lt;blockquote&gt;Ahora tenemos mucha gente buscando cosas, te aconsejemos que uses Yahoo!, MSN o lo que te plazca. Venga, bonito, deja de molestar y no le des al F5 que no vas a conseguir nada.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114554112168245612?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114554112168245612/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114554112168245612' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114554112168245612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114554112168245612'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/04/technorati-y-cundo-no.html' title='Technorati, ¿y cuándo no?'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114435175255773812</id><published>2006-04-06T20:55:00.000+02:00</published><updated>2006-04-07T00:06:49.336+02:00</updated><title type='text'>Generador de castigos para Bart</title><content type='html'>Leyendo la entrada sobre el &lt;a href="http://www.microsiervos.com/archivo/juegos-y-diversion/generador-for-dummies.html"&gt;Generador de Portadas: For Dummies&lt;/a&gt;, se me ha ocurrido hacer la mía propia y lógicamente explicar cómo funciona.&lt;br&gt;&lt;br&gt;
&lt;input type="text" id="texto"&gt;&amp;nbsp;&amp;nbsp;&lt;input type="button" value="Ver texto" onclick="document.getElementById('vtn').src = 'http://displaynone.awardspace.com/bart/bart.php?texto='+document.getElementById('texto').value;"&gt;
&lt;iframe id="vtn" src="http://displaynone.awardspace.com/bart/bart.php" style="width: 500px; height: 320px" frameborder="0"&gt;&lt;/iframe&gt;
&lt;div id="40boton"&gt;&lt;a href="javascript:mostrar('40')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id="40texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('40')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
Tan solo necesitamos 4 cosas: una imagen de fondo, una imagen que se pondrá encima del la anterior y del texto (para evitar en este caso que se escriba encima de la cabeza de Bart), una fuente True Type y un script PHP, que abrirá la imagen de fondo, escribirá encima, colocará sobre el texto la otra imagen y devolverá la imagen final.&lt;br&gt;&lt;br&gt;
Como ya hemos dicho, necesitamos dos imagenes, en este caso tienen que ser dos, porque nos podemos encontrar en el caso de que se escriba sobre la cabeza de Bart. Por eso, una de las imagenes es en la que se escribe y la otra es la que se usa para "proteger" la imagen (tiene que ser igual que la imagen del fondo, salvo que la zona de la pizarra tiene que ser una zona transparente).&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src="http://download-v5.streamload.com/cd053037-6e78-459f-b673-a1bce488e35b/displaynone/Hosted/imagenes_bart.png"&gt;&lt;/center&gt;
&lt;br&gt;
El script PHP debe abrir ambas imágenes, escribir el texto en la pizarra (calculando cuantas líneas admite y cuantas frases entran en una línea) y luego devolver la imagen.
&lt;p class="code"&gt;&amp;lt;?php
&lt;span class="code-comment"&gt;// Obtengo el texto&lt;/span&gt;
$texto = isset($_GET["texto"])? $_GET["texto"]: "Visitaré display: NONE a diario.";
$texto .= " ";

$ancho_caja = 395;
$alto_caja = 180;

&lt;span class="code-comment"&gt;// Establecer el tipo de contenido&lt;/span&gt;
header("Content-type: image/png");

&lt;span class="code-comment"&gt;// Abro las imagenes&lt;/span&gt;
$im = imagecreatefrompng('bart1.png');
$im2 = imagecreatefrompng('bart2.png');

&lt;span class="code-comment"&gt;// Creo el color del texto&lt;/span&gt;
$blanco = imagecolorallocate($im, 255, 255, 255);

&lt;span class="code-comment"&gt;// Obtengo la fuente&lt;/span&gt;
$fuente = './ALPHMA__.TTF';

&lt;span class="code-comment"&gt;// Calculo el numero de lineas que entran&lt;/span&gt;
$caja_texto = imagettfbbox(18, 0, $fuente , $texto);
$alto_linea = abs($caja_texto[7]-$caja_texto[1]);
$num_lineas = intval($alto_caja / $alto_linea);

&lt;span class="code-comment"&gt;// Calculo cuantas frases entran en el ancho de la pizarra&lt;/span&gt;
$texto_linea = "";
$caja_texto = imagettfbbox(18, 0, $fuente , $texto_linea.substr($texto, $pos, 1));
while (abs($caja_texto[2]-$caja_texto[0]) &amp;lt; $ancho_caja) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$texto_linea .= substr($texto, $pos, 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$caja_texto = imagettfbbox(18, 0, $fuente , $texto_linea.substr($texto, $pos, 1));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$pos = ($pos+1) % strlen($texto);
}
$texto_linea = str_repeat($texto, intval(strlen($texto_linea)/strlen($texto)));

&lt;span class="code-comment"&gt;// Escribo las lineas&lt;/span&gt;
$pos = 0;
for ($i = 0; $i&amp;lt;$num_lineas; $i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagettftext($im, 18, 0, 20, 33+$alto_linea*$i, $blanco, $fuente , $texto_linea);
}

&lt;span class="code-comment"&gt;// Dibujo la imagen&lt;/span&gt;
imagealphablending($im, 1);
imagealphablending($im2, 1);
imagecopy($im, $im2, 0, 0, 0, 0, imagesx($im), imagesy($im));
imagepng($im);
imagedestroy($im);
imagedestroy($im2);
?&amp;gt; &lt;/p&gt;

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114435175255773812?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114435175255773812/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114435175255773812' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114435175255773812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114435175255773812'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/04/generador-de-castigos-para-bart.html' title='Generador de castigos para Bart'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114393211178677275</id><published>2006-04-02T00:48:00.000+02:00</published><updated>2006-04-02T00:55:11.940+02:00</updated><title type='text'>Scrolling usando thumbnail</title><content type='html'>Uno de los mayores problemas a los que me enfrento ahora es decidir dónde publico, si aquí o en &lt;a href="http://sentidoweb.com"&gt;Sentido Web&lt;/a&gt;. Y esto mismo me pasó con un script que realicé, hacer scrolling de un texto usando una miniatura de este. Al final ganó la "competencia" y lo publiqué en Sentido Web. Quizás sea por la cantidad de post que hemos publicado, lo que ha hecho que la gente pase de verse todos, pero lo que si es cierto que creo que no mucha gente ha visto este script, y me da un poco de pena, porque a mi me pareció interesante.
&lt;br&gt;&lt;br&gt;
&lt;a href="http://sentidoweb.com/2006/03/28/scrolling-usando-thumbnail.php"&gt;&lt;img src="http://sentidoweb.com/img/2006/03/scrolling.png" border="0"&gt;&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
Vía / &lt;a href="http://sentidoweb.com/2006/03/28/scrolling-usando-thumbnail.php"&gt;Sentido Web&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114393211178677275?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114393211178677275/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114393211178677275' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114393211178677275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114393211178677275'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/04/scrolling-usando-thumbnail.html' title='Scrolling usando thumbnail'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114370555727121404</id><published>2006-03-30T09:51:00.000+02:00</published><updated>2006-03-30T16:21:26.616+02:00</updated><title type='text'>Sentido Web, nuevo blog para desarrolladores web</title><content type='html'>Uno de los motivos por los que no he podido actualizar &lt;b&gt;display: NONE&lt;/b&gt; con tanta frecuencia como me gustaría, a parte del desarrollo de una extensión para Firefox, es que me han invitado a formar parte del nuevo blog &lt;a href="http://sentidoweb.com"&gt;Sentido Web&lt;/a&gt;, un nuevo blog de la gente de &lt;a href="http://blogsmedia.com/"&gt;Blogs Media&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://photos1.blogger.com/blogger/1418/2181/400/sw.jpg" border="0" alt="Sentido Web" /&gt;&lt;br&gt;
Como se indica en la entrada de presentación:&lt;br&gt;&lt;br&gt;
&lt;blockquote&gt;Sentido Web es la nueva publicación creada por Blogs Media dirigida a los desarrolladores web e internautas apasionados por la programación, diseño, negocios y todo lo que ocurre en Internet.&lt;br&gt;&lt;br&gt;
Considéranos la revista que siempre has deseado comprar en el kiosko con la diferencia de que somos gratuitos y de publicación diaria.&lt;/blockquote&gt;&lt;br&gt;
Mi intención es seguir con ambos blogs, espero poder con ello.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114370555727121404?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114370555727121404/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114370555727121404' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114370555727121404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114370555727121404'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/sentido-web-nuevo-blog-para.html' title='Sentido Web, nuevo blog para desarrolladores web'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114346344882973880</id><published>2006-03-27T14:35:00.000+02:00</published><updated>2006-03-27T14:44:08.850+02:00</updated><title type='text'>Convertir PDF a SVG</title><content type='html'>Leo en &lt;a href="http://svg.org/story/2006/3/23/14251/5858"&gt;SVG.org&lt;/a&gt; que han sacado una nueva versión de &lt;a href="http://www.pdftron.com/pdf2svg/"&gt;PDF2SVG&lt;/a&gt;, un programa que se ejecuta mediante línea de comandos, que convierte un PDF a SVG. Entre las características que ofrece se encuentra:&lt;br&gt;&lt;br&gt;
&lt;ul class="list"&gt;
&lt;li class="list"&gt;Gran cualidad al convertir los PDF, mantiene el diseño de capas, enlaces, colores, ...&lt;/li&gt;
&lt;li class="list"&gt;Compresión y optimización de los archivos SVG&lt;/li&gt;
&lt;li class="list"&gt;Ficheros SVG independientes&lt;/li&gt;
&lt;li class="list"&gt;Miniaturas&lt;/li&gt;
&lt;li class="list"&gt;Uso de Unicode&lt;/li&gt;
&lt;li class="list"&gt;Incrustación de las fuentes y posibilidad de sustitución&lt;/li&gt;
&lt;li class="list"&gt;...&lt;/li&gt;
&lt;/ul&gt;&lt;br&gt;
Es curioso que siendo un programa de evaluación, lo que te haga sea incluir un texto que ocupa casi todo el espacio diciendo que estás usando el programa en cuestión. El SVG es editable, solo es necesario borrar el nodo en cuestión y ya está. En Firefox se ve bastante mal, en IE con el pluggin de Adobe se ve correctamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114346344882973880?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114346344882973880/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114346344882973880' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114346344882973880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114346344882973880'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/convertir-pdf-svg.html' title='Convertir PDF a SVG'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114294995343425842</id><published>2006-03-21T15:05:00.000+01:00</published><updated>2006-03-21T15:18:51.263+01:00</updated><title type='text'>Presentación de imágenes mediante scrolling</title><content type='html'>Las posibles formas de presentar un grupo de imágenes son numerosas, algunas sencillas, otras más complejas. Podría estar todos los días (o al menos unos cuantos) realizando distintas presentaciones, aunque no quiero ser pesado ya que hice &lt;a href="http://displaynone.blogspot.com/2006/01/presentacin-dinmica-de-imgenes.html"&gt;una&lt;/a&gt; en una de las primeras entradas.&lt;br&gt;&lt;br&gt;
 En este caso, se van a mostrar las imágenes dentro de un contenedor que solo mostrará un espacio, no la totalidad, y se irán desplazando hacia la izquierda o derecha, según la posición del ratón dentro del contenedor. Cuando una imagen desaparece del contenedor irá a la parte final de la lista de imágenes.&lt;br&gt;&lt;br&gt;
 
 &lt;center&gt;&lt;iframe src="http://mediamax.streamload.com/displaynone/Hosted/scroll-imagenes.html" frameborder="0" style="width: 450px; height: 250px;"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br&gt;
&lt;b&gt;Actualización&lt;/b&gt;
Me he dado cuenta de que al subirlo el scroll se vuelve loco, esto sería fácil de solucionar si el scrolling lo meto en un &lt;i&gt;iframe&lt;/i&gt; con &lt;i&gt;overflow: hidden&lt;/i&gt; y las acciones realizarlas en el documento &lt;i&gt;parent&lt;/i&gt;. No veo otra solución porque al tener las imágenes &lt;i&gt;position: absolute&lt;/i&gt;, da igual si se le hace clipping al contenedor, porque a la hora del scroll cuenta como si las imágenes estuvieran visibles. Perdonad que no lo cambie, pero con esto de ir de barato (o sea Blogger), me quita mucho tiempo estar haciendo cambios y subiendo archivos a los servidores (baratos, también).&lt;br&gt;&lt;br&gt;
 &lt;div id="33boton"&gt;&lt;a href="javascript:mostrar('33')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="33texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('33')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 La estructura del HTML consta de tres espacios, una capa contenedora, una capa que se encarga del scrolling y una capa para cada imagen.&lt;br&gt;&lt;br&gt;
 &lt;p class="code"&gt;
 div.contenedor {
  position: relative;
  left: 50%;
  width: 402px;
  height: 156px;
  margin-left: -200px;
  border: 1px solid #315C7C;
  padding: 0px;
  color: #315C7C;
  font-family: Arial;
  font-weight: bold;
  cursor: hand;
  cursor: pointer;
 }

 div.scrolling {
  position: absolute;
  width: 400px;
  height: 150px;
  clip: rect(0px 400px auto 0px); 
 }

 div.foto {
  position: absolute;
  width: 150px;
  height: 150px;
  top: 0px;
  margin: 2px;
  border: 1px solid #000000;
 }

 div.dif {
  z-index: 100;
  position: absolute;
  top: 0px;
  width: 1px;
  height: 100%;
 }
 
 div.pantalla {
  background: url(sp.gif);
  width: 100%;
  height: 100%;
  z-index: 1000;
  position: absolute;
  top: 0px;
  left: 0px;
 }
 &lt;/p&gt;
 Las variables globales son las siguientes:&lt;br&gt;&lt;br&gt;
 &lt;p class="code"&gt;
  var _IE_ = navigator.userAgent.indexOf("MSIE") != -1 
    &amp;&amp; navigator.userAgent.indexOf("Opera") == -1; &lt;span class="code-comment"&gt;// Si es IE&lt;/span&gt;
  var velocidad = 100;
  var incremento = 20;
  var ultima = null; &lt;span class="code-comment"&gt;// posicion de la ultima imagen&lt;/span&gt;
  var primera = null; &lt;span class="code-comment"&gt;// posicion de la primera imagen&lt;/span&gt;
  var anchoImagen = 150;
  var anchoContenedor = 400;
  var id = 0; &lt;span class="code-comment"&gt;// El indice del primero que muevo&lt;/span&gt;
  var bloqueo = false; &lt;span class="code-comment"&gt;// Para bloquear el método&lt;/span&gt;
 &lt;/p&gt;
 Los métodos necesarios para este efecto son cinco:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Obtener valores de los estilos de un objeto, es un método de apoyo.&lt;/li&gt;
 &lt;li class="list"&gt;Dibujar las capas necesarias para contener las imágenes.&lt;/li&gt;
 &lt;li class="list"&gt;Controlar el movimiento de las imágenes, para ello primero desplaza las imagenes que ya no se ven en el contenedor al final de la cola y luego las desplaza hacia la izquierda o derecha, según sea.&lt;/li&gt;
 &lt;li class="list"&gt;Controlar el sentido y la velocidad del desplazamiento según sea la posición del ratón en la capa contenedora.&lt;/li&gt;
 &lt;li class="list"&gt;Mostrar la imagen seleccionada según el evento onclick en el contendor.&lt;/li&gt;&lt;/ul&gt;
 &lt;p class="code"&gt;
  &lt;span class="code-comment"&gt;// El vector de imagenes contiene:&lt;/span&gt;
  &lt;span class="code-comment"&gt;//   La imagen en miniatura&lt;/span&gt;
  &lt;span class="code-comment"&gt;//   La imagen real&lt;/span&gt;
  &lt;span class="code-comment"&gt;//   La explicacion de la imagen, en este caso el copyright&lt;/span&gt;
  var imagenes = new Array();
  imagenes[0] = new Array(new Image(), new Image(),
    '[descripción]');
  imagenes[0][0].src = '[url imagen miniatura]';
  imagenes[0][1].src = '[url imagen original]';

  &lt;span class="code-comment"&gt;// Devuelve el valor numerico de una propiedad de los estilos (elimina el px)&lt;/span&gt;
  function valorCSS(obj, tipo) {
    var aux = eval("parseFloat(obj.style."+tipo+".substring(0,obj.style."+tipo+".length-2))");
    return aux;
  }
  
  &lt;span class="code-comment"&gt;// Crea las capas necesarias que contienen las imagenes&lt;/span&gt;
  function escribeFotos() {
    var cont = document.getElementById("scrolling");
    
    &lt;span class="code-comment"&gt;// Incluyo las imagenes&lt;/span&gt;
    var html = "";
    for (var i=0; i&amp;lt;imagenes.length; i++) {
      html += '&amp;lt;div id="foto'+i+'" class="foto"&amp;gt;&amp;lt;img src="'+imagenes[i][0].src+'" id="img'+i+'" /&amp;gt;&amp;lt;/div&amp;gt;';
    }
    
    cont.innerHTML = html;

    var cont = document.getElementById("contenedor");
    
    html = '';

    &lt;span class="code-comment"&gt;// Incluyo el degradado&lt;/span&gt;
    if (!_IE_) {
      html +=  '&amp;lt;div class="dif" style="left: 0px;"&amp;gt;&amp;lt;img src="difizq.png" /&amp;gt;&amp;lt;/div&amp;gt;';
      html +=  '&amp;lt;div class="dif" style="left: '+(anchoContenedor-20)+'px;"&amp;gt;&amp;lt;img src="difder.png" /&amp;gt;&amp;lt;/div&amp;gt;';
      cont.innerHTML += html;
    }
    
    &lt;span class="code-comment"&gt;// Posicionamiento de las capas de las imagenes&lt;/span&gt;
    for (var i=0; i&amp;lt;imagenes.length; i++) {
      var div = document.getElementById("foto"+i);
      div.style.left = ((anchoImagen+4)*i)+"px";
      if (i==0) primera = div;
      ultima = div;
    }
      
    movimiento();
  }
  
  &lt;span class="code-comment"&gt;// Se encarga del movimiento de las imágenes&lt;/span&gt;
  function movimiento() {
    if (!bloqueo) {
      bloqueo = true;
        
      var cont = document.getElementById("scrolling");
      
      var _id = id;
      
      &lt;span class="code-comment"&gt;// Primero se desplazan las imagenes que están fuera del contenedor&lt;/span&gt;
      &lt;span class="code-comment"&gt;// al principio de la cola. Se hace si el movimiento es hacia la izquierda&lt;/span&gt;
      &lt;span class="code-comment"&gt;// y despues si el movimiento es hacia la derecha&lt;/span&gt;
      
      &lt;span class="code-comment"&gt;// Si se mueve hacia la izquierda&lt;/span&gt;
      if (incremento &amp;gt; 0) {
        for (var i=0; i&amp;lt;imagenes.length; i++) {
          &lt;span class="code-comment"&gt;// Se cogen las imagenes segun el orden por el que se mueven&lt;/span&gt;
          var foto = document.getElementById("foto"+((i+id) % imagenes.length));
          if ((valorCSS(foto, "left")-incremento) &amp;lt; -(anchoImagen+4)) { 
            &lt;span class="code-comment"&gt;// Si la imagen está fuera por la izquierda y el &lt;/span&gt;
            &lt;span class="code-comment"&gt;// movimiento es hacia la izquierda, la muevo al final&lt;/span&gt;
            foto.style.left = (valorCSS(ultima, "left")+(anchoImagen+4))+"px";
            ultima = foto; 
            primera = document.getElementById("foto"+((i+id+1) % imagenes.length));
            _id = (i+id+1) % imagenes.length;
          }
        }
      }
      
      if (incremento &amp;lt; 0) {
        for (var i=imagenes.length-1; i&amp;gt;=0; i--) {
          &lt;span class="code-comment"&gt;// Empiezo a mover el que se encuentra primero&lt;/span&gt;
          var foto = document.getElementById("foto"+((i+id) % imagenes.length));
          if (valorCSS(foto, "left") &amp;gt; (anchoContenedor+20)) { 
            &lt;span class="code-comment"&gt;// Si la imagen esta fuera por la derecha y el &lt;/span&gt;
            &lt;span class="code-comment"&gt;// movimiento es hacia la derecha, la muevo al principio&lt;/span&gt;
            foto.style.left = (valorCSS(primera, "left")-((anchoImagen+4)))+"px";
            primera = foto; 
            ultima = document.getElementById("foto"+(((i+id) % imagenes.length)==0? 
              imagenes.length-1: ((i+id) % imagenes.length)-1));
            _id = (((i+id) % imagenes.length)==0? 
              imagenes.length-1: ((i+id) % imagenes.length)-1);
          }
        }
      }
      
      id = _id;
      
      &lt;span class="code-comment"&gt;// Movimiento de las imagenes&lt;/span&gt;
      for (var i=0; i&amp;lt;imagenes.length; i++) {
        &lt;span class="code-comment"&gt;// Empiezo a mover el que se encuentra primero&lt;/span&gt;
        var foto = document.getElementById("foto"+((i+id) % imagenes.length));
  
        &lt;span class="code-comment"&gt;// Muevo las capas&lt;/span&gt;
        try {
          foto.style.left = (valorCSS(foto, "left")-incremento)+"px";
        } catch (e) {}
      }
      
      setTimeout("movimiento()", velocidad);
      
      bloqueo = false;
    }
  }
  
  &lt;span class="code-comment"&gt;// Controla la velocidad del movimiento segun &lt;/span&gt;
  &lt;span class="code-comment"&gt;// la posicion del ratón en la capa&lt;/span&gt;
  function controlarMovimiento(e) {
    var x = parseInt(e.offsetX? e.offsetX : e.layerX);
    var porc = x-(anchoContenedor/2);
    incremento = parseInt(-porc * 20 / (anchoContenedor/2));

  }
  
  
  &lt;span class="code-comment"&gt;// Muestra la imagen en pantalla&lt;/span&gt;
  function verImagen(e) {
    &lt;span class="code-comment"&gt;// Como hay una capa por encima, no se puede hacer click en las imagenes&lt;/span&gt;
    &lt;span class="code-comment"&gt;// Por eso se calcula que imagen está en la zona donde se hace click&lt;/span&gt;
    var x = parseInt(e.offsetX? e.offsetX : e.layerX);
    for (var i=0; i&amp;lt;imagenes.length; i++) {
      var foto = document.getElementById("foto"+i);
      if (x &amp;gt; valorCSS(foto, "left") &amp;&amp; x &amp;lt; valorCSS(foto, "left")+anchoImagen) {
        var obj = document.getElementById("imagen");
        var html = '&amp;lt;br&amp;gt;'+imagenes[i][2]+'&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;img src="'+imagenes[i][1].src+'"&amp;gt;';
        obj.innerHTML = html;
      }
    }
  }
&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114294995343425842?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114294995343425842/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114294995343425842' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114294995343425842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114294995343425842'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/presentacin-de-imgenes-mediante.html' title='Presentación de imágenes mediante scrolling'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114277712347216920</id><published>2006-03-19T15:00:00.000+01:00</published><updated>2006-03-19T15:07:10.310+01:00</updated><title type='text'>Problemas con WordPress</title><content type='html'>&lt;b&gt;display: NONE&lt;/b&gt; ha estado unos días caidos (o no sé cuanto porque no he tenido acceso al ordenador) debido a que me instalé WordPress en mi ordenador y cuando quise importar este blog desde la herramienta que ofrece WP, pues le dio por modificarme la página de inicio de Blogger.&lt;br&gt;
&lt;br&gt;
Está genial, yo le digo importar y el hace lo que le da la gana, cuando se importa algo, no se debe modificar el original.&lt;br&gt;
&lt;br&gt;
Según la RAE:&lt;br&gt;
&lt;blockquote&gt;
 importar.&lt;br&gt;
 (Del lat. importāre, traer).&lt;br&gt;
 1. tr. Dicho de una mercancía: Valer o llegar a cierta cantidad.&lt;br&gt;
 2. tr. Introducir en un país géneros, artículos o costumbres extranjeros.&lt;br&gt;
 &lt;b&gt;3. tr. Llevar consigo. Importar necesidad, violencia.&lt;/b&gt;&lt;br&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
 estropear.&lt;br&gt;
 (Del it. stroppiare).&lt;br&gt;
 1. tr. Maltratar a alguien, dejándolo lisiado. U. t. c. prnl.&lt;br&gt;
 2. tr. Maltratar, deteriorar o afear algo. Esas casas tan altas estropean el paisaje. U. t. c. prnl.&lt;br&gt;
 &lt;b&gt;3. tr. Echar a perder, malograr cualquier asunto o proyecto.&lt;/b&gt;&lt;br&gt;
&lt;/blockquote&gt;
Espero que WordPress comprenda la diferencia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114277712347216920?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114277712347216920/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114277712347216920' title='9 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114277712347216920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114277712347216920'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/problemas-con-wordpress.html' title='Problemas con WordPress'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114259315313313274</id><published>2006-03-17T11:51:00.000+01:00</published><updated>2006-03-17T11:59:13.153+01:00</updated><title type='text'>Firefox 2.0 con problemillas con el SVG</title><content type='html'>Mientras me pego con un script, el XUL y otras cosas varias, no he podido perder la oportunidad de mencionar que Firefox está teniendo &lt;a href="http://weblogs.mozillazine.org/tor/archives/2006/03/textpath_for_firefox_2.html"&gt;problemas&lt;/a&gt; para integrar la etiqueta &lt;a href="http://www.w3.org/TR/SVG/text.html#TextOnAPath"&gt;&amp;lt;svg:textPath&amp;gt;&lt;/a&gt;, la cual se usa para escribir texto siguiendo un recorrido.

Esperemos que la gente de Firefox vuelva a sorprendernos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114259315313313274?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114259315313313274/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114259315313313274' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114259315313313274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114259315313313274'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/firefox-20-con-problemillas-con-el-svg.html' title='Firefox 2.0 con problemillas con el SVG'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114226352284604836</id><published>2006-03-13T16:13:00.000+01:00</published><updated>2006-03-19T15:00:19.320+01:00</updated><title type='text'>Cosas sobre CSS</title><content type='html'>Al menos en Firefox, me encuentro:
&lt;ul class="list"&gt;&lt;li class="list"&gt;Si en una capa con &lt;i&gt;position: relative&lt;/i&gt; escribo dentro unicamente una capa con &lt;i&gt;position: absolute&lt;/i&gt;, el alto de la capa contenedora es cero. Para mí no tiene mucha lógica, porque lo que estás haciendo es "posicionar" la capa dentro de la otra, vale, está posicionada, pero sigue dentro de ella, y ¿cómo puede estar dentro de ella si la capa contenedora tiene tamaño cero?. Es como si me meto el monedero en el bolsillo, no puedo "posicionarlo" fuera del bolsillo.

&lt;span style="border: 1px solid #315C7C; position: relative;"&gt;Aquí dentro va una capa, sí, la que está fuera.&lt;div  style="position: absolute; top: 20px; border: 1px solid #315C7C"&gt;¿Por qué esta capa está fuera de la contenedora si realmente está dentro?&lt;/div&gt;&lt;/span&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;




&lt;p class="code"&gt;&amp;lt;span style="border: 1px solid #315C7C; 
&amp;nbsp;&amp;nbsp;position: relative;"&amp;gt;
&amp;nbsp;&amp;nbsp;Aquí dentro va una capa, sí, la que está fuera.
&amp;nbsp;&amp;nbsp;&amp;lt;div  style="position: absolute; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top: 20px; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border: 1px solid #315C7C"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;¿Por qué esta capa está fuera de la contenedora si realmente está dentro?
&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;
&amp;lt;/span&amp;gt;
&lt;/p&gt;&lt;/li&gt;&lt;li class="list"&gt;Si una capa tiene un &lt;i&gt;width&lt;/i&gt; y un &lt;i&gt;height&lt;/i&gt; fijos, si yo modifico el valor del &lt;i&gt;padding&lt;/i&gt;, la capa aumenta el valor del padding en su tamaño. No tiene lógica, porque el padding es la distancia entre el borde y el contenido. Pues si el tamaño de la caja es 100px y el padding izquierdo es de 10px, quiere decir que empiezo a escribir en el pixel 10, pero no que el tamaño tiene que ser de 110px.&lt;/li&gt;&lt;/ul&gt;

Bueno, quizás son cosas erróneas las que escribo, yo creo que a mí me ocurren. ¿Alguien sabe si esto tiene que ocurrir así?

&lt;b&gt;Actualización&lt;/b&gt;
&lt;a href="http://511.dabomb.com.ar/"&gt;Federico&lt;/a&gt; me comenta que es debido a que al posicionarlo como absolute se sale del "normal flow", podéis ver su explicación en los comentarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114226352284604836?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114226352284604836/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114226352284604836' title='7 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114226352284604836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114226352284604836'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/cosas-sobre-css.html' title='Cosas sobre CSS'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114226187343472433</id><published>2006-03-13T15:52:00.000+01:00</published><updated>2006-03-13T15:58:04.086+01:00</updated><title type='text'>Buscando blogs afines en del.icio.us</title><content type='html'>Una forma de aprender es leer y para ellos los blogs son para mí una gran fuente de sabiduría (o de copy/paste, según quieras verlo). Algunas veces me meto en &lt;a href="http://technorati.com/"&gt;Technorati&lt;/a&gt;, que es dónde normalmente la gente se pone a buscar blogs, pero no siempre encuentro lo que quiero. ¿Y dónde lo encuentro? en &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt;. Todo empezó por curiosdad, algo de ego, ilusión por ver que tu blog va funcionando... y otras mil cosas más. El hecho es que me dió por buscar quienes tenían a &lt;b&gt;display: NONE&lt;/b&gt; dentro de sus favoritos, y digo yo, si les interesa lo que escribo, lo más seguro es que me interese lo que ellos escriben. Muy pocas personas tienen blog o lo han puesto dentro de su perfil de del.icio.us, pero dentro de esos pocos he encontrado cosas muy interesantes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114226187343472433?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114226187343472433/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114226187343472433' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114226187343472433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114226187343472433'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/buscando-blogs-afines-en-delicious.html' title='Buscando blogs afines en del.icio.us'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114223848656167947</id><published>2006-03-13T09:17:00.000+01:00</published><updated>2006-03-13T09:28:06.573+01:00</updated><title type='text'>Cómo incluir SVG en tus aplicaciones Java</title><content type='html'>Aunque las librerías más populares de SVG en Java son las de &lt;a href="http://xmlgraphics.apache.org/batik/"&gt;Batik&lt;/a&gt;, mirando en &lt;a href="http://svg.org/story/2006/3/11/12377/7431"&gt;SVG.org&lt;/a&gt; he visto que hay otras librerías para incluir Tiny SVG llamadas &lt;a href="http://www.tinyline.com/"&gt;TinyLine&lt;/a&gt;, las cuales tienen muy buena pinta.

Ejemplos:
&lt;a href="http://www.tinyline.com/svgt/samples/samples/retro4.html"&gt;retro4.svg&lt;/a&gt;
&lt;a href="http://www.tinyline.com/svgt/samples/samples/bass2.html"&gt;bass2.svg&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114223848656167947?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114223848656167947/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114223848656167947' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114223848656167947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114223848656167947'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/cmo-incluir-svg-en-tus-aplicaciones.html' title='Cómo incluir SVG en tus aplicaciones Java'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114219572049854157</id><published>2006-03-12T21:24:00.000+01:00</published><updated>2006-03-12T21:35:20.510+01:00</updated><title type='text'>Mis primeros usos en las expresiones regulares</title><content type='html'>Leyendo la entrada de alidhaey sobre &lt;a href="http://alidhaey.blogspot.com/2006/03/mis-amigas-las-expresiones-regulares.html"&gt;expresiones regulares&lt;/a&gt;, me ha hecho recordar que la primera vez que me pegué con ellas fue porque teníamos que filtrar un fichero de logs en UNIX y mi compañero, que es una máquina en UNIX me dijo que usara el &lt;a href="http://www.hmug.org/man/1/grep.php"&gt;grep&lt;/a&gt;. Si eres de los que no usas UNIX o Linux, no te quedes sin probarlo, ya que cuando tu aplicación suelta gran cantidad de trazas, lo mejor son las herramientas que hay en UNIX:
&lt;a href="http://unxutils.sourceforge.net/"&gt;GNU utilities for Win32&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114219572049854157?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114219572049854157/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114219572049854157' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114219572049854157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114219572049854157'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/mis-primeros-usos-en-las-expresiones.html' title='Mis primeros usos en las expresiones regulares'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114200435467566830</id><published>2006-03-10T15:58:00.000+01:00</published><updated>2006-03-10T18:53:28.696+01:00</updated><title type='text'>Pasar de fotografía a dibujo mediante Inkscape</title><content type='html'>Ya he hablado de las cosas que se pueden hacer con &lt;a href="http://displaynone.blogspot.com/2006/02/svg-ese-gran-desconocido.html"&gt;SVG&lt;/a&gt; y quizás otro ejemplo de su uso pueda hacer que os enganchéis un poco más. En varios sitios he visto como hacer pseudo-caricaturas mediante Photoshop, lo que voy a explicar es similar, pero en vez de crear una imágen, será creando un gráfico vectorial. Una ventaja sobre el Photoshop es que al hacerlo vectorial, se puede crear del tamaño que se quiera sin perder resolución.&lt;br&gt;
&lt;center&gt;&lt;img src="http://perso.wanadoo.es/displaynone/groucho.jpg"&gt;&lt;img src="http://perso.wanadoo.es/displaynone/groucho.png"&gt;&lt;/center&gt;
&lt;a href="http://inkscape.org/"&gt;Inkscape&lt;/a&gt; es un editor de gráficos vectoriales (SVG) de código abierto. Yo es el que siempre uso cuando diseño algo en SVG, que es como suelo diseñar. Es un programa sencillo y que tiene bastante funcionalidades.&lt;br&gt;
Para realizar esta transformación tenemos que pasar de un &lt;a href="http://es.wikipedia.org/wiki/Bitmap"&gt;mapa de bits&lt;/a&gt; a un &lt;a href="http://es.wikipedia.org/wiki/Gr%C3%A1fico_vectorial"&gt;gráfico vectorial&lt;/a&gt; (&lt;a href="http://es.wikipedia.org/wiki/Trazador_de_im%C3%A1genes"&gt;raster&lt;/a&gt;). Lo primero es importar la imágen (&lt;i&gt;ARCHIVO &amp;gt; IMPORTAR...&lt;/i&gt;), despues la seleccionaremos y después convertiremos la imagen en vectores (&lt;i&gt;TRAZO &amp;gt; VECTORIZAR UN MAPA DE BITS&lt;/i&gt;).&lt;br&gt;
De todas las opciones usaremos la &lt;i&gt;Luminosidad de la imagen&lt;/i&gt;, aunque podéis probar con las otras. Esta opción nos crea una imagen de dos colores según sea el grado de luminosidad de la imagen, cuanto esté cerca de 0 mostrará los colores mas oscuros y cuanto esté cerca de 1 mostrará a partir de los mas claros.&lt;br&gt;
&lt;center&gt;&lt;img src="http://perso.wanadoo.es/displaynone/inkscape.png"&gt;&lt;/center&gt;
Lo realizaremos en dos fases, primero con un valor cercano a 0.5 y le daremos un color negro y luego con un valor cercano a 0.6 y le daremos un color gris. Con el primer valor conseguimos obtener la silueta y con el segundo color obtenemos también parte de las sombras. Las superponemos y obtenemos la imagen final.&lt;br&gt;
&lt;center&gt;&lt;img src="http://perso.wanadoo.es/displaynone/proceso.png"&gt;&lt;/center&gt;
Por último podemos exportar el gráfico a una imagen PNG para poder usarla.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114200435467566830?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114200435467566830/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114200435467566830' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114200435467566830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114200435467566830'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/pasar-de-fotografa-dibujo-mediante.html' title='Pasar de fotografía a dibujo mediante Inkscape'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114189722721578290</id><published>2006-03-09T10:39:00.000+01:00</published><updated>2006-03-09T10:40:27.230+01:00</updated><title type='text'>XUL: el mundo de Firefox</title><content type='html'>Me ha dado por intentar enterarme de cómo se crean las extensiones para &lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox&lt;/a&gt;, quizás por ello últimamente no escribo tanto como me gustaría. Lo poco que he visto me gusta, no hay demasiada información al respecto, pero se pueden ir averiguando las cosas poco a poco y pegándote con ellas.&lt;br&gt;
 Lo más importante es conocer XUL (XML-based User-interface Language), que es el lenguaje para crear interfaces de usuario de &lt;a href="http://www.mozilla.com/"&gt;Mozilla&lt;/a&gt;, permite incluir hojas de estilo, javascript, ... &lt;br&gt;
 Crear extensiones simples es fácil, no tiene mucha dificultad, lo que sí es más complejo es realizar las acciones que más nos interesan: acceso a ficheros, eventos, listeners, ... Hay poca información en internet, si comparamos con otros lenguajes (PHP, Java, ...), debido a ello, una de las formas que estoy usando para enterarme de como hacer las cosas es destripando las extensiones de otra gente. No, no es un copy/paste en plan salvaje, es más bien &lt;a href="http://es.wikipedia.org/wiki/Ingenier%C3%ADa_inversa"&gt;ingeniería inversa&lt;/a&gt;. Para ello en vez de instalar una extensión, te la bajas a tu disco duro, la renombras como zip y la descomprimes, podrás ver toda la estructura de archivos y cómo funciona.&lt;br&gt;
 Estoy haciendo una extensión, a ver que tal, y cuando la acabe iré escribiendo como la realicé. Si te quieres meter en este mundillo, te recomiendo estos enlaces:&lt;br&gt;
 &lt;ul class="list"&gt;&lt;li class="list"&gt;&lt;a href="http://es.wikibooks.org/wiki/XUL"&gt;http://es.wikibooks.org/wiki/XUL&lt;/a&gt;, es poco, pero está en español y no está mal para ir empezando.&lt;/li&gt;&lt;li class="list"&gt;&lt;a href="http://www.mozilla.org/xpfe/xulref/"&gt;http://www.mozilla.org/xpfe/xulref&lt;/a&gt;, la refencia para programadores de Mozilla.&lt;/li&gt;&lt;li class="list"&gt;&lt;li class="list"&gt;&lt;a href="http://www.xulplanet.com/"&gt;http://www.xulplanet.com&lt;/a&gt;, todo sobre XUL.&lt;/li&gt;&lt;li class="list"&gt;&lt;a href="http://mundogeek.net/etiqueta/xul"&gt;http://mundogeek.net/etiqueta/xul&lt;/a&gt;, Raúl de Mundo geek ya se ha pegado con ello y creo que va ganando el asalto, ;-).&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114189722721578290?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114189722721578290/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114189722721578290' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114189722721578290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114189722721578290'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/xul-el-mundo-de-firefox.html' title='XUL: el mundo de Firefox'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114172924800930730</id><published>2006-03-07T11:56:00.000+01:00</published><updated>2006-03-07T12:00:48.036+01:00</updated><title type='text'>Ejemplos de diseños con estilos</title><content type='html'>El método correcto de realizar un diseño web es mediante estilos (CSS) y no usando tablas (aunque reconozco que a veces las uso en ejemplos por vagancia). Claro, que a veces no es sencillo saber utilizarlos. He encontrado una página que tiene gran variedad de ellos, y más que usarlos simplemente, yo recomendaría que se les echara un vistazo por dentro para saber cómo funcionan:&lt;br /&gt;
&lt;a href="http://blog.html.it/layoutgala/"&gt;Layout Gala&lt;/a&gt;&lt;br /&gt;
Visto en &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114172924800930730?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114172924800930730/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114172924800930730' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114172924800930730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114172924800930730'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/ejemplos-de-diseos-con-estilos.html' title='Ejemplos de diseños con estilos'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114164458816721841</id><published>2006-03-06T12:28:00.000+01:00</published><updated>2006-03-06T21:43:10.276+01:00</updated><title type='text'>Animaciones en SVG</title><content type='html'>SVG tiene una serie de &lt;a href="http://www.w3.org/TR/SVG11/animate.html"&gt;etiquetas&lt;/a&gt; para realizar animaciones, las cuales son admitidas por el visor de Adobe, pero que &lt;a href="http://developer.mozilla.org/en/docs/SVG_in_Firefox_1.5#Animation"&gt;no están implementadas&lt;/a&gt; por el visor nativo de Firefox. Ahora viene el problema, si queremos que nuestra animación se vea en ambos navegadores IE (con el pluggin de Adobe) y Firefox, tendremos que realizar la animación de forma dinámica. Existen dos formas de realizar la animación, mediante Javascript en la página que contiene el SVG o mediante &lt;a href="http://es.wikipedia.org/wiki/ECMAScript"&gt;ECMAScript&lt;/a&gt;.&lt;br&gt;
 &lt;table style="height: 160px"&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;iframe frameborder="0" src="http://mediamax.streamload.com/displaynone/Hosted/animaciones-svg.html" style="width: 150px; height: 150px;"&gt;&lt;/iframe&gt;&lt;br&gt;&lt;br&gt;Javascript&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;embed type="image/svg+xml" id="svg" SRC="http://mediamax.streamload.com/displaynone/Hosted/texto2.svg" width="150" height="150" frameborder="0" style="display: block" &gt;&lt;/embed&gt;ECMAScript&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
 &lt;br&gt;
&lt;b&gt;En IE tiene que estar instalado la versión 6 del Adobe SVG Viewer&lt;/b&gt;
 &lt;div id="29boton"&gt;&lt;a href="javascript:mostrar('29')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="29texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('29')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 En ambos casos el funcionamiento es el mismo, tenemos un SVG, que contiene un elemento texto, accedemos a este mediante el id y modificamos el atributo &lt;a href="http://www.w3.org/TR/SVG11/coords.html#TransformAttribute"&gt;transform&lt;/a&gt; (la rotación se hace mediante &lt;i&gt;rotate&lt;/i&gt;).&lt;br&gt;
 El SVG será el mismo (salvo el código ECMAScript que se añade en uno de los ejemplos):
 &lt;div style="width: 500px; overflow: auto"&gt;
 &lt;p class="code"&gt;
 &amp;lt;?xml version="1.0" encoding="utf-8" standalone="no"?&amp;gt;
&amp;lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN" "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd"&amp;gt;
&amp;lt;svg version="1.1" width="100%" height="100%"
preserveAspectRatio="xMinYMin"
xmlns="http://www.w3.org/2000/svg"
&amp;gt;
&amp;lt;g
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="grafica"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- BARRA DE COORDENADAS --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;circle cx="62" cy="62" r="55" style="stroke:#315C7C; fill: #FFF3C9"/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="font-size:10pt;fill:#315C7C; font-family:Arial;text-anchor: middle"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x = "52"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y = "62"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="texto"&amp;gt;display: NONE&amp;lt;/text&amp;gt;
   &amp;lt;/g&amp;gt;
&amp;lt;/svg&amp;gt;
&lt;/p&gt;
&lt;/div&gt;&lt;br&gt;
 La animación mediante Javascript se hará con el siguiente código:
 &lt;div style="width: 500px; overflow: auto"&gt;
 &lt;p class="code"&gt; 
var svgns = "http://www.w3.org/2000/svg";
var ang = 0;
var velocidad = 140;
var grado = 15;

&lt;span class="code-comment"&gt;// Anima el texto&lt;/span&gt;
function animar() {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Obtenemos el documento SVG&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var svgDocument = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById('svg').getSVGDocument();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Obtenemos el elemento de texto&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var texto = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;svgDocument.getElementById("texto"); 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Modificamos la rotacion&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto.setAttribute("transform", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"rotate("+ang+" 62 62)");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ang = (ang+grado)%360;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Animamos la rotacion&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("animar()", velocidad);
}
&lt;/p&gt;
&lt;/div&gt;&lt;br&gt;
 Habrá que incluir este código si se quiere realizar mediante ECMAScript. Fíjate que hay una cosa un tanto extraña, en el &lt;i&gt;setTimeout&lt;/i&gt; se llama a &lt;i&gt;window.Animar()&lt;/i&gt;, cuando &lt;i&gt;window.Animar = animar&lt;/i&gt;, esto es debido a que  es necesario para que el pluggin de Adobe reconzca la función animar() dentro del setTimeout.
 &lt;div style="width: 500px; overflow: auto"&gt;
 &lt;p class="code"&gt;
&amp;lt;script type="text/ecmascript"&amp;gt; &amp;lt;![CDATA[
var ang = 0;
var velocidad = 140;
var grado = 15;

    function animar() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var documento = null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;documento = (svgDocument)? svgDocument: document;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch (e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;documento = document;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var texto = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;documento.getElementById("texto"); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto.setAttribute("transform", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"rotate("+ang+" 62 62)");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ang = (ang+grado)%360;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("window.Animar()", 100);
    }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.Animar = animar;

  ]]&amp;gt;
&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114164458816721841?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114164458816721841/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114164458816721841' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114164458816721841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114164458816721841'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/animaciones-en-svg.html' title='Animaciones en SVG'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114138497861022548</id><published>2006-03-03T12:22:00.000+01:00</published><updated>2006-03-03T12:22:58.623+01:00</updated><title type='text'>Autenticación en iframes</title><content type='html'>Normalmente suelo visitar una página para hacer copias de seguridad de las peliculas que tengo y así no preocuparme de si las extravio, se degradan, etc... El tema es que a esta páginas solo tenemos acceso una serie de privilegiados (todo aquel que se registre, vamos) y para bajarnos la copia de seguridad tenemos que autenticarnos. Ahora me encuentro con una página que quiero visitar y que me va a mostrar información capada cuando acceda a ella por no estar "logueado". Necesito meter mi usuario y contraseña en el formulario y darle a enviar. Por ahora todo está bien, el problema viene en que se me recarga toda la página y que va a la página principal, en vez de a la página en la que me encontraba, por lo que me toca volver a la página que yo quería. ¿Cómo se puede solucionar?, pues se me ocurren dos formas, o bien una vez "logueado" me vuelve a la página en la que me encontraba, o bien el formulario lo pongo en un iframe para así no tocar la página.&lt;br&gt;
 ¿Cuál de las dos soluciones es la mejor?, no sabría decirlo. La primera solución me permite que si la página que estaba visitando tenía contenidos capados, al actualizarse la página estos contenidos se me muestren, pero también tiene la desventaja de que recargar la página puede llevar tiempo, cosa que no puede apetecer mucho (está página a la que me refiero suele estar un poco colapsada debido a la cantidad de gente preocupada por las copias de seguridad de su colección de películas). La segunda opción a mi es la que más me gusta, porque te autenticas y la información se guarda en la sesión sin tener que cargar pesadas páginas, claro que no se actualiza los datos de la página actual.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114138497861022548?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114138497861022548/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114138497861022548' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114138497861022548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114138497861022548'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/autenticacin-en-iframes.html' title='Autenticación en iframes'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114131000345026771</id><published>2006-03-02T15:31:00.000+01:00</published><updated>2006-03-05T19:36:12.006+01:00</updated><title type='text'>Tablas con cabecera estática</title><content type='html'>Algo que considero bastante importante a la hora de mostrar datos, es que las tablas no ocupen toda la página. Normalmente cuando se consulta la información, a no ser que sea un estudio profundo, no se suelen ver más que las primeras filas. Entonces, ¿por qué mostrar todos los datos?, no se trata de solo mostrar los primeros registros (que se podría hacer mediante paginación), sino de usar el scroll para poder ver el resto de los datos si es que nos interesan.&lt;br&gt;
 &lt;div style="width: 100%; position: relative; height: 250px;"&gt;&lt;div style="left: 50%; top: 0px; margin-left:-200px; position: absolute;"&gt;&lt;iframe src="http://perso.wanadoo.es/displaynone/tablas-cabecera-estatica.html" style="width: 450px; height: 250px;" frameborder="0" &gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;
 Por supuesto que la mejor forma que he visto para realizar esto es en: &lt;a href="http://www.imaputz.com/cssStuff/bigFourVersion.html"&gt;Pure CSS Scrollable Table with Fixed Header&lt;/a&gt;, pero debido a las diferencias entre navegadores, la CSS no está muy clara. Como no todo el mundo (y yo el primero) tiene la facilidad para hacer la tabla cuando quiera sin tener que ver como lo hacen en la página anterior, voy a intentar explicar una forma un poco más sencilla (aunque menos limpia) de hacerlo.
 &lt;div id="27boton"&gt;&lt;a href="javascript:mostrar('27')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="27texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('27')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 La forma de hacerlo es sencilla, vamos a crear dos tablas, una con la cabecera y otra con el cuerpo de lo que sería la tabla original. Ambas tablas tienen que tener las columnas con un ancho fijo (para eso usaremos &lt;a href="http://www.w3.org/TR/html4/struct/tables.html#h-11.2.4.2"&gt;COL&lt;/a&gt; o &lt;a href="http://www.w3.org/TR/html4/struct/tables.html#h-11.2.4.1"&gt;COLGROUP&lt;/a&gt;, indicaremos el ancho de todas las columnas menos la de la última para que se adapte al ancho), lo cual puede ser un inconveniente si una de las celdas ocupa más que el ancho prefijado. Además, irán metidas en una capa contenedora con un ancho fijo y las tablas deberán tener el ancho al 100%. Solo nos falta meter la tabla del cuerpo en otra capa, indicar mediante estilos el height y el &lt;a href="http://www.w3.org/TR/css3-box/#overflow"&gt;overflow=auto&lt;/a&gt;, para que ocupe cierto tamaño y el resto se pueda ver mediante el uso del scroll.&lt;br&gt;
 Podéis bajaros un ejemplo aquí: &lt;a href="http://perso.wanadoo.es/displaynone/tablas-cabecera-estatica.html"&gt;ARCHIVO&lt;/a&gt;
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114131000345026771?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114131000345026771/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114131000345026771' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114131000345026771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114131000345026771'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/tablas-con-cabecera-esttica.html' title='Tablas con cabecera estática'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114122321635741056</id><published>2006-03-01T15:19:00.000+01:00</published><updated>2006-03-01T15:27:29.673+01:00</updated><title type='text'>Problemas resueltos, más o menos</title><content type='html'>Ya he solucionado el tema del servidor donde subía los archivos que usaba para los ejemplos. Después de usar unos cuantos, todos me daban problemas, o no me bajaba los archivos directamente (era necesario una página intermedia) o los archivos HTML no me los devolvía correctamente y salía la ventana de "Guardar como..." u otras mil cosas más. Total, que me he olvidado de los supersitios con Ajax, capacidad infinita, ancho de banda inmenso y demás gaitas y me he ido a la típica pagina personal que te ofrece un portal (si, un portal no es muy Web 2.0 pero siguen existiendo) y con los miseros 50Mb que me ofrencen estoy muy contento, ¿que me quedo corto? pues me creo otra cuenta.&lt;br&gt;
Ahora solo me falta ir corrigiendo todas las entradas, eso me llevará un poco de tiempo.&lt;br&gt;
La verdad es que &lt;b&gt;display: NONE&lt;/b&gt; se parece a &lt;a href="http://www.cea-online.es/imagenes/e-cea/plano_madrid.gif"&gt;Madrid&lt;/a&gt; (afortunados los que no vivís allí).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114122321635741056?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114122321635741056/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114122321635741056' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114122321635741056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114122321635741056'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/problemas-resueltos-ms-o-menos.html' title='Problemas resueltos, más o menos'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114120658554810262</id><published>2006-03-01T10:38:00.000+01:00</published><updated>2006-03-01T10:49:45.566+01:00</updated><title type='text'>Autómata para expresiones regulares</title><content type='html'>Aunque estoy bastante liado cambiando los archivos de un lado a otro debido al &lt;a href="http://displaynone.blogspot.com/2006/03/problemillas-con-el-servidor-de.html"&gt;problemilla&lt;/a&gt; con los archivos para los ejemplos, no puedo pasar la oportunidad de poneros un enlace a una página que realiza autómatas para expresiones regulares que me ha enviado Gerardo: &lt;a href="http://osteele.com/tools/reanimator/"&gt;reAnimator: Regular Expression FSA Visualizer&lt;/a&gt;.&lt;br&gt;
Yo miraría estos ejemplos (no escribáis la barra inicial y final en la página):
&lt;ul class="list"&gt;&lt;li class="list"&gt;Comprobar si es fecha (DD/MM/YYYY): /\d\d\/\d\d\/\d\d\d\d/, ya que no admite /\d{2}\/\d{2}\/\d{4}/&lt;/li&gt;&lt;li class="list"&gt;La búsquedas necesarias para hacer un trim: /(^\s*)|(\s*$)/&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114120658554810262?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114120658554810262/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114120658554810262' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114120658554810262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114120658554810262'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/autmata-para-expresiones-regulares.html' title='Autómata para expresiones regulares'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114120398024040048</id><published>2006-03-01T09:58:00.000+01:00</published><updated>2006-03-01T10:06:20.263+01:00</updated><title type='text'>Problemillas con el servidor de almacenamiento gratuito</title><content type='html'>Claro, si es que es gratuito y no se le puede pedir mucho. Espero poder pasarlos todos a otro sitio y que vuelva a estar funcionando en breve.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114120398024040048?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114120398024040048/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114120398024040048' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114120398024040048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114120398024040048'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/03/problemillas-con-el-servidor-de.html' title='Problemillas con el servidor de almacenamiento gratuito'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114111926948917654</id><published>2006-02-28T10:32:00.000+01:00</published><updated>2006-02-28T10:34:29.503+01:00</updated><title type='text'>Más sobre SVG</title><content type='html'>Uno de los problemas que le veo al SVG es que se desconoce, normalmente no es algo de lo que se suela hablar, y menos aún que se suela usar. Buscando más sobre este formato gráfico vectorial, he encontrado tres cosas, que aunque puedan ser antiguas, me han gustado (no tengo demasiado tiempo para dedicarle al SVG y hoy ha sido bastante fructífero para mí). Allá van:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Una &lt;a href="http://svg.org/special/svg_phones"&gt;lista&lt;/a&gt; de teléfonos móviles (o celulares, para quien los llame así) que admiten SVG Tiny 1.1, sacada de &lt;a href="http://svg.org"&gt;SVG.org&lt;/a&gt;:
 Nokia (7370, 6282), Sony Ericsson (K610, M600, W950 ), NEC (V703N), ...&lt;/li&gt;&lt;li class="list"&gt;Un &lt;a href="http://www.dlsc.com/products/svg/svg.html"&gt;pluggin&lt;/a&gt; para &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; que sirve para mostrar y trabajar con SVG, basado en &lt;a href="http://xml.apache.org/batik"&gt;Batik&lt;/a&gt;&lt;/li&gt;&lt;li class="list"&gt;Un &lt;a href="http://www.ipd.uka.de/~hauma/svg-import/"&gt;filtro&lt;/a&gt; para importar SVG en documentos dentro de la suite &lt;a href="http://es.openoffice.org/"&gt;OpenOffice&lt;/a&gt; (yo es el que uso en casa, ¡me libré del MS Office!)&lt;/li&gt;&lt;/ul&gt;
 Espero que vayáis cogiéndole el gusto al SVG.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114111926948917654?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114111926948917654/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114111926948917654' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114111926948917654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114111926948917654'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/ms-sobre-svg.html' title='Más sobre SVG'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114104912499880581</id><published>2006-02-27T15:04:00.000+01:00</published><updated>2006-03-01T15:05:38.330+01:00</updated><title type='text'>Zoom automático para imágenes</title><content type='html'>Realizar un zoom en las imágenes es algo que puede sernos de utilidad, ya sea porque no tenemos demasiado espacio en la página y aún así queremos ponerla a gran resolución, o simplemente para poder apreciar mejor los detalles de la foto. Lo que vamos a hacer es modificar todas las imágenes que queramos (distinguiéndolas por un parámetro) para que aparezca un icono de una lupa, que al pulsarlo hará que la imagen se vea más grande y permitiendo movernos por ella según el movimiento del ratón.
 &lt;center&gt;&lt;iframe src="http://perso.wanadoo.es/displaynone/zoom.html" frameborder="0" style="width: 550px; height: 320px; overflow: hidden"&gt;&lt;/iframe&gt;&lt;/center&gt; &lt;div id="25boton"&gt;&lt;a href="javascript:mostrar('25')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="25texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('25')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 Hay dos formas de realizar la ampliación de la imágen: la primera es mostrar la misma imágen duplicando su tamaño mediante estilos. La segunda forma es usando otra imagen que tenga el doble de tamaño y mejor resolución. Para ver como funciona una u otra forma hay que seleccionar el checkbox y pinchar en la lupa.&lt;br&gt;
 Sea el método que se usa, la forma de ampliarlo es la siguiente: cuando se cargue la página, obtenemos todas los elementos imágenes del documento, comprobamos que es una de las que queremos y la modificamos. La modificación es sencilla, se crea una capa, la añadimos antes del elemento previo a la imagen (usando &lt;a href="http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1950641247"&gt;nextSibling&lt;/a&gt;), dentro de esta capa incluimos un botón con la lupa y una capa que estará oculta y que tiene como imagen de fondo un gif transparente (así podemos actuar sobre ella y no se ve) y por último se incluye la misma imagen.&lt;br&gt;
 Cuando se pulsa en la lupa, o bien se duplica el tamaño de la imagen o bien se cambia por otra imagen (tambien se podría usar una imagen con mejor resolución y mostrarla inicialmente a la mitad del tamaño, pero no creo que sea correcto, porque en el caso de que el usuario no quiera hacer zoom sobre la imagen, tendrá que esperar de todas formas a que cargue la imagen con mayor solución y mayor tamaño). También se mostrará la capa transparente, la cual tiene capturado el evento &lt;a href="http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.3"&gt;onmousemove&lt;/a&gt; para realizar el movimiento de la imagen.&lt;br&gt;
 El movimiento de la imagen ampliada se hace mediante clipping y desplazamiento. El clipping recorta la zona visible de la imagen a un recuadro, pero si movemos la imagen hacia un lado, el clipping también se movería, por ello hay que mover la zona visible en sentido contrario al movimiento de la imagen. Así se obtiene el efecto deseado.&lt;br&gt;
 &lt;center&gt;&lt;img src="http://perso.wanadoo.es/displaynone/clipping.png"&gt;&lt;/center&gt;
 El codigo es el siguiente:
&lt;div style="width: 500px; height: 500px;overflow: auto"&gt; 
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var idProceso = null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Devuelve el valor numerico de una propiedad de los estilos (elimina el px)&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function valorCSS(obj, tipo) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var aux = eval("parseFloat(obj.style."+tipo+".substring(0,obj.style."+tipo+".length-2))");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return aux;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Acción que se ejecuta cuando se pulsa el boton de la lupa&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si estaba pulsada se restaura la foto&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si no estaba pulsada, se cambia el tamaño de la imagen (x2) o se cambia la imagen&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function iniciaZoom(n) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var div = document.getElementById("div"+n);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// No está pulsado&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (div.getAttribute("zoom") == "0") {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se amplia el tamaño de la imagen&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var img = document.getElementById("img"+n);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var ancho = valorCSS(img, "width")*2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var alto = valorCSS(img, "height")*2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se recorta la imagen y almacenamos estos datos &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// en un atributo para trabajar con ellos más facilmente&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.clip = "rect(0 "+(ancho/2)+" "+(alto/2)+" 0)";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.setAttribute("clip", "0,"+(ancho/2)+","+(alto/2)+",0");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se cambia de imagen si se ha seleccionado mayor resolución&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (document.getElementById("resolucion").checked) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.src="http://static.flickr.com/41/105217662_743a75eb84_o.jpg";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.width = ancho+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.height = alto+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.position = "absolute";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.top = "0px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.left = "0px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se muestra la tapadera, la capa que tiene &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// la accion de mover la capa&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var tapadera = document.getElementById("tap"+n);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.style.display = "block";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.setAttribute("zoom", "1");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Está pulsado&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se restaura la imagen&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var img = document.getElementById("img"+n);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var ancho = valorCSS(img, "width")/2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var alto = valorCSS(img, "height")/2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.src = "http://static.flickr.com/41/105217661_deaf3476b8_o.jpg";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.clip = "rect(auto auto auto auto)";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.width = ancho+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.height = alto+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.position = "absolute";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.top = "0px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.style.left = "0px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se oculta la tapadera&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var tapadera = document.getElementById("tap"+n);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.style.display = "none";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.setAttribute("zoom", "0");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Mueve la capa hacia la derecha, izquierda, arriba o abajo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Según la posición en la que se encuentre el raton dentro&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// de la tapadera&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function moverCapa(obj, x, y) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var ok = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var ancho = valorCSS(obj, "width")/2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var alto = valorCSS(obj, "height")/2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se mueve hacia la izquierda&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (x &amp;gt; 0 &amp;&amp; x &amp;lt;ancho/4 &amp;&amp; valorCSS(obj, "left") &amp;lt; 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.left = (valorCSS(obj, "left")+1)+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var clipant = obj.getAttribute("clip").split(",");

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.clip = "rect("+clipant[0]+" "+(parseInt(clipant[1])-1)+" "+clipant[2]+" "+(parseInt(clipant[3])-1)+")";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setAttribute("clip", clipant[0]+","+(parseInt(clipant[1])-1)+","+clipant[2]+","+(parseInt(clipant[3])-1));

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ok = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se mueve hacia la derecha&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (x &amp;gt; ancho*3/4 &amp;&amp; x &amp;lt;ancho &amp;&amp; valorCSS(obj, "left") &amp;gt; -ancho+20) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.left = (valorCSS(obj, "left")-1)+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var clipant = obj.getAttribute("clip").split(",");

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.clip = "rect("+clipant[0]+" "+(parseInt(clipant[1])+1)+" "+clipant[2]+" "+(parseInt(clipant[3])+1)+")";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setAttribute("clip", clipant[0]+","+(parseInt(clipant[1])+1)+","+clipant[2]+","+(parseInt(clipant[3])+1));

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ok = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se mueve hacia abajo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (y &amp;gt; 0 &amp;&amp; y &amp;lt;alto/4 &amp;&amp; valorCSS(obj, "top") &amp;lt; 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.top = (valorCSS(obj, "top")+1)+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var clipant = obj.getAttribute("clip").split(",");

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.clip = "rect("+(parseInt(clipant[0])-1)+" "+clipant[1]+" "+(parseInt(clipant[2])-1)+" "+clipant[3]+")";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setAttribute("clip", (parseInt(clipant[0])-1)+","+clipant[1]+","+(parseInt(clipant[2])-1)+","+clipant[3]);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ok = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se mueve hacia arriba&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (y &amp;gt; alto*3/4 &amp;&amp; y &amp;lt;alto &amp;&amp; valorCSS(obj, "top") &amp;gt; -alto+20) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.top = (valorCSS(obj, "top")-1)+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var clipant = obj.getAttribute("clip").split(",");

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.clip = "rect("+(parseInt(clipant[0])+1)+" "+clipant[1]+" "+(parseInt(clipant[2])+1)+" "+clipant[3]+")";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setAttribute("clip", (parseInt(clipant[0])+1)+","+clipant[1]+","+(parseInt(clipant[2])+1)+","+clipant[3]);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ok = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si ha habido movimiento se continua el proceso&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (ok) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idProceso = setTimeout('moverCapa(document.getElementById("'+obj.id+'"), '+x+', '+y+')', 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cuando se mueve el raton por la tapadera&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// se llama al movimiento de la imagen&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function movimiento(evt) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (idProceso != null) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clearTimeout(idProceso);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idProceso = null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;evt = evt? evt: window.event;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var posX = evt.offsetX? evt.offsetX : evt.layerX;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var posY = evt.offsetY? evt.offsetY : evt.layerY;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var destino = evt.target? evt.target : evt.srcElement;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idProceso = setTimeout('moverCapa(document.getElementById("'+"img"+destino.id.substring(3)+'"), '+posX+', '+posY+')', 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Para el movimiento del ratón&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function paraMovimiento() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (idProceso != null) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clearTimeout(idProceso);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idProceso = null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Modifica las imágenes añadiéndoles&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// la lupa y el efecto zoom&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function cambiarImagenes() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var _imgs = document.getElementsByTagName("IMG");

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var imgs = new Array();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Creo una copia de la lista, porque como se va a modificar&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// la lista de imagenes, se pierden las referencias&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;_imgs.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imgs[i] = _imgs[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var len = imgs.length;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;len; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (imgs[i].getAttribute("permiteZoom")) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var padre = imgs[i].parentNode;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imgs[i].id = "img"+i;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Capa contenedora&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var div = document.createElement("DIV");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.width = imgs[i].style.width;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.height = imgs[i].style.height;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.position = "relative";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.id="div"+i;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.setAttribute("zoom", "0");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se inserta la capa contenedora&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padre.insertBefore(div, imgs[i].nextSibling);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.appendChild(imgs[i]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imgs[i].style.width = imgs[i].style.width;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imgs[i].style.height = imgs[i].style.height;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se crea la tapadera&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var tapadera = document.createElement("DIV");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.style.position = "absolute";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.style.display = "none";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.style.top = "0px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.style.left = "0px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.style.width = "100%";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.style.height = "100%";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.style.background = "url(sp.gif)";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.id = "tap"+i;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.onmousemove = movimiento;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tapadera.onmouseout = paraMovimiento;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.appendChild(tapadera);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se crea la capa que contiene la lupa&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var divlupa = document.createElement("DIV");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divlupa.style.width = "14px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divlupa.style.height = "14px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divlupa.style.position = "absolute";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divlupa.style.top = "2px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divlupa.style.left = "2px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divlupa.id = "cont"+i;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se crea el enlace de la lupa&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var enlacelupa = document.createElement("A");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlacelupa.href="javascript: iniciaZoom("+i+")";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se crea la imagen de la lupa&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var lupa = document.createElement("IMG");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lupa.src = "lupa.png";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lupa.style.border = "0px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lupa.style.width = "14px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lupa.style.height = "14px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se insertan los elementos creados&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlacelupa.appendChild(lupa);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divlupa.appendChild(enlacelupa);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.appendChild(divlupa);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&lt;/p&gt;
&lt;/div&gt; 
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114104912499880581?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114104912499880581/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114104912499880581' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114104912499880581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114104912499880581'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/zoom-automtico-para-imgenes.html' title='Zoom automático para imágenes'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114077968585320931</id><published>2006-02-24T12:09:00.000+01:00</published><updated>2006-03-01T15:07:44.130+01:00</updated><title type='text'>Diseño con ventanas de una página web</title><content type='html'>Muchas veces el diseño de una página web suele regirse por una serie de modelos prefijados que no siempre suele ser lo que más le conviene a nuestro desarrollo. En esta entrada voy a proponer un modelo con ventanas que puede ser apropiado en algunos casos (por ejemplo, en la promoción de un negocio que contiene poca información), pero que puede ser incorrecto usarlo en otras situaciones (por ejemplo, un blog).&lt;br&gt;
 La página principal muestra una zona de tamaño fijo que contendrá las ventanas (cuatro en este caso) que serán las que muestren la información. El número de ventanas debe estar limitado y deben ser pocas para que no sobrecarguen la página, por eso he comentado al principio que este modelo puede ser válido para sitios con poco contenido. Las ventanas van a disponer de alguna funcionalidad, lo que da dinamismo y cierta espectacularidad (espero que guste) al diseño, se podrán mover, maximizar y minimizar (creando un efecto &lt;a href="http://en.wikipedia.org/wiki/Thumbnail"&gt;thumbnails&lt;/a&gt;), efecto imán entre ventanas, etc... No he intentado ver si funciona en Opera debido a que los iframes no admiten el estilo z-index.&lt;br&gt;
 &lt;center&gt;&lt;a target="ventanas" href="http://perso.wanadoo.es/displaynone/ventanas.zip"&gt;&lt;img src="http://perso.wanadoo.es/displaynone//ventanas.png"&gt;&lt;/a&gt; &lt;/center&gt;
 Me gustaría poder poner la página directamente, pero me da problemas el sitio donde alojo los archivos y no quiero que cause mala impresión, lo malo es que no se puede apreciar del todo en la imagen, por lo que te recomiendo que te bajes el zip y lo pruebes en tu máquina.
 &lt;div id="24boton"&gt;&lt;a href="javascript:mostrar('24')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="24texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('24')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 Vamos a ir paso a paso explicando todas las características, pero esta vez daré una explicación más funcional, si pongo el código se hará una entrada muy larga. De todas formas, el código se puede ver en el zip y guiarse por los comentarios y si hay dudas, mandadme un email.&lt;br&gt;
 &lt;ul class="list"&gt;&lt;li class="list"&gt;&lt;b&gt;Contenedor&lt;/b&gt;: Es la capa dónde se van a incluir las ventanas. Es la que controla el movimiento de las ventanas, se captura el evento de movimiento del ratón (&lt;a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mouseevents"&gt;onmousemove&lt;/a&gt;) y mueve la ventana seleccionada (cuando se pincha en la ventana &lt;a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mouseevents"&gt;onmousedown&lt;/a&gt;) mientras se mueve el ratón por su superficie. A parte, contendrá cuatro capas que simulan la aparición de las ventanas, esto es solo adorno y se ejecutan al principio nada más.&lt;/li&gt;&lt;li class="list"&gt;&lt;b&gt;Ventanas&lt;/b&gt;: Se crea un objeto mediante Javascript que representará la ventana, almacenando las características (posición, tamaño, ...) y los métodos (dibujar, maximizar, minimizar, ...). No he creado funciones para acceder a las propiedades por vagancia y porque en Javascript se puede acceder a ellas de todas formas. La capa que se dibuja cuando se crea la ventana contiene una barra con el título (que al pulsarla se activa el movimiento y al soltarla se desactiva el movimiento) y una botonera, que permite cerrar (realmente ocultar) y maximizar/minimizar la ventana. También habrá un iframe que muestra la página web correspondiente, hay que controlar cuando se carga la página para poder mostrarla, si se mostrara antes, como las ventanas empiezan estando minimizadas, se vería como están en tamaño grande y luego pequeño, algo que no es muy agradable visualmente. Habrá una capa que ocupa toda la ventana, y que tiene una imagen transparente, que estará visible cuando la ventana está minimizada para así evitar que se acceda al contenido de la página.&lt;/li&gt;&lt;li class="list"&gt;&lt;b&gt;Movimiento&lt;/b&gt;: Como ya he dicho anteriormente, el movimiento lo controla el evento onmousemove de la capa contenedora, este evento mueve la ventana que se haye seleccionada según el movimiento del ratón. Una ventana se selecciona cuando se pincha sobre su barra con el ratón (onmousedown) y se deselecciona cuando se suelta el botón del ratón (onmouseup). Se controla que la ventana no se salga del contenedor y el efecto imán entre ventanas.&lt;/li&gt;&lt;li class="list"&gt;&lt;b&gt;Efecto imán&lt;/b&gt;: Es pegar una ventana a la otra cuando se hayan a una cierta distancia. Para ello se comprueba si la ventana que se está moviendo está cerca por arriba, abajo, izquierda o derecha de alguna de las otras ventanas, en ese caso, se mueve la ventana hasta la posición más cercana, dejando un margen de un pixel por estética.&lt;/li&gt;&lt;li class="list"&gt;&lt;b&gt;Minimizar&lt;/b&gt;: A parte de cambiar progresivamente el tamaño de la ventana, de lo que se trata realmente es de transformar la ventana en un thumbnail de si misma. Para ello transformaremos todos los elementos HTML de la página, teniendo en cuenta que según el tipo de elemento, se realizará una acción: los elementos que contengan texto se les modificará el estilo (&lt;a href="http://www.w3.org/TR/2000/WD-DOM-Level-2-HTML-20001113/html.html#ID-58190037"&gt;className&lt;/a&gt;) por otro con el mismo nombre pero seguido de "_min", la diferencia entre ambos estilos será el tamaño de la letra (&lt;a href="http://www.w3.org/TR/REC-CSS2/fonts.html#font-size-props"&gt;font-size&lt;/a&gt;) que deberá ser más pequeño, los márgenes (&lt;a href="http://www.w3.org/TR/REC-CSS2/box.html#margin-properties"&gt;margin&lt;/a&gt;) y los espacio de relleno (&lt;a href="http://www.w3.org/TR/REC-CSS2/box.html#padding-properties"&gt;padding&lt;/a&gt;) que deberán ser cero. Los elementos que tengan un tamaño (imágenes, cajas de texto, ...) deberán ser reducidas mediante estilos, para ello el &lt;a href="http://www.w3.org/TR/REC-CSS2/visudet.html#the-width-property"&gt;width&lt;/a&gt; y el &lt;a href="http://www.w3.org/TR/REC-CSS2/visudet.html#the-height-property"&gt;height&lt;/a&gt; deberá ser especificado en cada elemento. A las tablas se les debe quitar el &lt;a href="http://www.w3.org/TR/html4/struct/tables.html#adef-cellpadding"&gt;cellpadding&lt;/a&gt; y el &lt;a href="http://www.w3.org/TR/html4/struct/tables.html#adef-cellspacing"&gt;cellspacing&lt;/a&gt;. Y también se podrá hacer desaparecer ciertos elementos sobre los que no podremos actuar, por ejemplo un DIV que contenga la publicidad de AdSense, ya que no podemos modificar los estilos de la publicidad al no tener acceso. En cada elemento que se modifica hay que incluir un atributo con el valor modificado para que cuando se tenga que maximizar se pueda recuperar.&lt;/li&gt;&lt;li class="list"&gt;&lt;b&gt;Maximizar&lt;/b&gt;: Es recuperar la apariencia normal de la ventana. Todos los cambios que hemos realizado en el proceso de minimización deberán ser deshechos. Una cosa curiosa que me ha ocurrido es que el IE (¡viva él!) no redimensionaba al tamaño inicial las imágenes, si escribía un &lt;a href="http://www.javascript-page.com/alert.html"&gt;alert&lt;/a&gt; cuando recuperaba el tamaño, si me lo hacía correctamente, o si lo hacía normalmente y luego miraba las propiedades de la imagen, me cambiaba el tamaño cuando salía de la ventana de propiedades, total, que vete a saber por qué, el IE no hacía lo que tenía que hacer, la solución una chapuza, me &lt;a href="http://www.w3.org/2003/01/dom2-javadoc/org/w3c/dom/Node.html#cloneNode_boolean_"&gt;clono&lt;/a&gt; el elemento HTML y lo sustituyo por sí mismo.&lt;/li&gt;&lt;li class="list"&gt;&lt;b&gt;Botones&lt;/b&gt;: Son las imágenes que se encuentran debajo del contenedor de ventanas, cada botón representa a una ventana y efectúa acciones sobre ella: si la ventana está cerrada la muestra maximizada, si está maximizada la minimiza y si está minimizada la maximiza.&lt;/li&gt;&lt;li class="list"&gt;Otras cosas a tener en cuenta son: hay un array con índice el id de la ventana (para poder acceder a ellas fácilmente), hay otro array con índice un número consecutivo (para poder acceder a todas las ventanas), cuando se maximiza una ventana, se minimiza la que estaba maximizada anteriormente, etc...&lt;/li&gt;&lt;/ul&gt;
 Espero que os guste y que os sea útil. Se pueden ir haciendo mejoras y ampliando funcionalidades, aunque tampoco hay que pasarse para evitar que sea un código muy complejo.&lt;br&gt;
 Te puedes bajar el código aquí: &lt;a href="http://perso.wanadoo.es/displaynone//ventanas.zip"&gt;ARCHIVO&lt;/a&gt;
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114077968585320931?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114077968585320931/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114077968585320931' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114077968585320931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114077968585320931'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/diseo-con-ventanas-de-una-pgina-web.html' title='Diseño con ventanas de una página web'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114061562126206575</id><published>2006-02-22T14:38:00.000+01:00</published><updated>2006-02-22T14:40:21.280+01:00</updated><title type='text'>Críticas a los navegadores</title><content type='html'>No soy un gurú de los navegadores, y no creo que mi opinión vaya a causar una depresión a los responsables del desarrollo de estas aplicaciones, aún así voy a dar mi modesta opinión, eso sí, solo las cosas que no me gustan. Una opinión creada por su utilización, no sacada de lo que he leido sobre ellos, es más, es posible que en algunas cosas esté muy equivocado (si es así ponedme un comentario).&lt;br&gt;
 Solo voy a hablar de &lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt;, &lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox&lt;/a&gt;, &lt;a href="http://www.microsoft.com/windows/ie_intl/es/default.mspx"&gt;Internet Explorer&lt;/a&gt; (todos bajo Windows), que son los que uso.&lt;br&gt;
 Empecemos por Opera. Sólo lo uso para comprobar que lo que desarrollo funciona, para navegar uso el Firefox y cuando no queda más remedio el IE, por eso estos comentarios pueden ser un poco inexactos. &lt;br&gt;
 &lt;ul class="list"&gt;&lt;li class="list"&gt;El SVG va fatal, pero... ¿a quien le importa?, pues a unos pocos como yo a los que nos gusta el SVG, es una pena. El pluggin de Adobe no funciona a las mil maravillas y el SVG nativo solo soporta SVG Tiny. Eso sí, al menos soporta SVG, cosa que el IE ni se molesta en hacer.&lt;/li&gt;&lt;li class="list"&gt;En el trabajo tenemos una URL para configuración automática de proxy (no sé si pasa lo mismo con una dirección proxy normal) y cuando pongo el Opera intenta conectarse a internet (supongo que por el tema de actualizaciones) y hasta que no sale la ventanita de autenticación no puedo hacer nada de nada, ni ver páginas locales, y puede llegar a tardar dos minutos en aparecer la ventanita (en los otros navegadores es automático).&lt;/li&gt;&lt;li class="list"&gt;Se identifica por defecto como si fuera el Internet Explorer, lo cual está bien si el proxy al que te conectas capa el acceso según el programa que se conecta, aunque creo que eso está un poco anticuado y ya no lo suelen hacer. De todas formas, cuando tienes que detectar el navegador mediante Javascript es un poco lio.&lt;br&gt;
  &lt;span class="code-comment"&gt;appCodeName: Mozilla 
  appName: Microsoft Internet Explorer 
  appVersion: 4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) 
  userAgent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.51 
  &lt;/span&gt;&lt;/li&gt;&lt;li class="list"&gt;Como me &lt;a href="http://displaynone.blogspot.com/2006/02/caja-de-texto-con-autocompletado.html"&gt;hizo ver&lt;/a&gt; un lector de &lt;b&gt;display: NONE&lt;/b&gt;, fallaba el scrolling de las capas cuando se modificaba la propiedad &lt;a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/scrolltop.asp"&gt;scrollTop&lt;/a&gt;, moviendo todo el documento y no unicamente la capa.&lt;/li&gt;&lt;li class="list"&gt;Los iframes permanecen siempre encima de los demás objetos del HTML, aunque se modifique el &lt;a href="http://www.w3.org/TR/REC-CSS2/visuren.html#z-index"&gt;z-index&lt;/a&gt; (esto me fastidia un script que estoy haciendo para incluir en &lt;b&gt;display: NONE&lt;/b&gt;).&lt;/li&gt;&lt;li class="list"&gt;Cuando un objeto tiene el estilo display = "none", no puedo realizar ciertas operaciones sobre él.&lt;/li&gt;&lt;/ul&gt;
 El siguiente es el Firefox, la verdad es que tengo pocas quejas de él, es el que siempre uso y cada vez me gusta más, pero si que hay alguna cosilla que no me gusta del todo.&lt;br&gt;
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Cuando quiero duplicar una pestaña, tengo que crearme una nueva y luego copiar la dirección. Esto creo que lo comentaba también el diseñador de IE y la verdad es que eso si me gusta de IE. No estoy seguro, pero creo que hay una extensión que te permite eso.&lt;/li&gt;&lt;li class="list"&gt;El firefox tiene la misma sesión para todas las pestañas/ventanas abiertas, lo cual está muy bien, pero por ejemplo, en mi caso, tengo una dirección de correo de GMail para uso personal y otra para el blog, y si quiero ver las dos a la vez no puedo, tengo que cerrar sesiones todo el tiempo, con el IE se puede hacer creando dos instancias de iexplorer.exe, pero con Firefox no, ya que si lo vuelvo a llamar me usa la misma instancia (si se puede hacer, no lo sé). Si me gustaría que en una pestaña pudiera decir, aquí una sesión distinta. El tema de las cuentas de GMail he sido capaz de resolverlo con la extensión &lt;a href="http://ietab.mozdev.org/"&gt;IE Tab&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
 Y por último el IE.&lt;br&gt;
 &lt;div id="23boton"&gt;&lt;a href="javascript:mostrar('23')"&gt;Mostrar lista &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="23texto" style="display: none"&gt;&lt;br&gt;
 &lt;center&gt;&lt;img src="http://mediamax.streamload.com/displaynone/Hosted/descargas.png"&gt;&lt;/center&gt;
 Si es que son tantas... ;-)
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114061562126206575?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114061562126206575/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114061562126206575' title='10 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114061562126206575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114061562126206575'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/crticas-los-navegadores.html' title='Críticas a los navegadores'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114052310434743739</id><published>2006-02-21T12:57:00.000+01:00</published><updated>2006-03-01T15:13:37.813+01:00</updated><title type='text'>Centrado de capas</title><content type='html'>Una forma de presentar páginas que me gusta bastante, es crear una capa de un tamaño fijo y colocarla en medio de la pantalla y allí mostrar la información. Debo reconocer que lo copié descaradamente (él sabe quién es) y desde entonces lo uso alguna que otra vez. Para realizarlo se usa un div centrado horizontal y verticalmente, hay varias formas de hacerlo, la menos moderna y la que a veces uso por pereza (pero nunca en algo serio) es usar tablas con width 100% y height 100% y centrando el contenido de la única celda que tiene la tabla, vertical y horizontalmente.&lt;br&gt;
 La forma limpia es usando estilos, y para ser sinceros, la más rápida (entonces, ¿por qué me da por usar aún lo de las tablas?, supongo que por malas costumbres). Para ello tenemos que tener en cuenta que el ancho y el alto de la capa debe ser fijo. Lo primero que hacemos es colocar la esquina superior izquierda en el centro de la pantalla (top: 50%; left: 50%) y luego mover la capa la mitad del ancho de la capa en pixels hacia la izquierda y la mitad del alto de la capa en pixels hacia arriba (margin-left: -&lt;i&gt;x&lt;/i&gt;px; margin-top: -&lt;i&gt;y&lt;/i&gt;px). Y ya está, con esto tenemos la capa centrada perfectamente y seguirá igual cuando se modifique el tamaño de la ventana.&lt;br&gt;
 &lt;center&gt;&lt;iframe src="http://perso.wanadoo.es/displaynone/centrado.html" frameborder="0" style="width: 450px; height: 300px; border: 1px solid black;"&gt;&lt;/iframe&gt;&lt;/center&gt;
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.contenedor {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width: 700px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height: 500px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position:absolute;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;left:50%;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top:50%;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left:-350px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-top:-250px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114052310434743739?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114052310434743739/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114052310434743739' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114052310434743739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114052310434743739'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/centrado-de-capas.html' title='Centrado de capas'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114042950950650845</id><published>2006-02-20T10:57:00.000+01:00</published><updated>2006-03-01T15:18:53.980+01:00</updated><title type='text'>Modificar el texto del botón de un input="file"</title><content type='html'>Cuando he estado trabajando en proyectos multi-lenguaje, normalmente piden que el botón del &lt;a href="http://www.w3.org/TR/html4/interact/forms.html#file-select"&gt;input file&lt;/a&gt; tenga el texto que ellos quieren, normalmente traducido al idioma correspondiente y no en inglés. Mi respuesta sería que el texto del botón no se puede modificar y si te viene en inglés es porque quizás el resto del navegador también está en inglés. El tema es que te dicen que el mismo navegador puede ser usado por personas que usan distintos idiomas. ¿Mi respuesta?: "mala suerte, es lo que hay".&lt;br&gt;
 A parte de ser un tanto &lt;a href="http://www.jergasdehablahispana.org/espana.htm#B"&gt;borde&lt;/a&gt;, el motivo real es no complicarse la vida. El texto no se puede cambiar y lo único que se puede hacer es simularlo. En &lt;a href="http://www.quirksmode.org/dom/inputfile.html"&gt;Quirksmode&lt;/a&gt; se explica una forma de hacerlo que para mí es impresionante, como el resto de su página, que te recomiendo que leas.&lt;br&gt;
 &lt;center&gt;&lt;img src="http://perso.wanadoo.es/displaynone/file-type.png"&gt;&lt;/center&gt;
 El método que usa es el siguiente, escribe una caja de texto y al lado un botón (por ejemplo una imagen con el texto que queremos), y encima de ello, tapándolo, escribe el input="file". Por ahora no se consigue nada, porque se sigue viendo el input file y el texto sigue siendo el mismo. Lo que hace a continuación es volver transparente (&lt;a href="http://www.w3.org/TR/css3-color/#transparency"&gt;opacity: 0&lt;/a&gt;) el input file, por lo que ya se vería el input file que nosotros hemos diseñado y no el original. ¿Por qué transparente?, porque si se hace invisible (&lt;a href="http://www.w3.org/TR/REC-CSS2/visufx.html#visibility"&gt;visibility: hidden&lt;/a&gt;) o simplemente no se muestra (&lt;a href="http://www.w3.org/TR/REC-CSS2/visuren.html#display-prop"&gt;display: none&lt;/a&gt;), no se tiene acceso a él mediante el ratón, por lo que no se podría hacer click en el botón y que nos mostraría la ventana de selección del archivo (en IE si se puede abrir esa ventana con el evento click(), pero en Firefox no se puede por razones de seguridad). Cuando un objeto es transparente, podemos usarlo (hacer click, ...), mientras que en los otros dos casos no se puede.&lt;br&gt;
 El resultado final es que vemos un input file que nosotros hemos diseñado, y cuando pinchamos en él, lo que realmente hacemos es pinchar en el original que no vemos porque está transparente. La única pega que le veo es que la propiedad opacity no lo admiten todos los navegadores, e incluso hay que usar distintos estilos según sea el navegador.&lt;br&gt;
 Visto en: &lt;a href="http://www.quirksmode.org/dom/inputfile.html"&gt;Quirksmode&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114042950950650845?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114042950950650845/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114042950950650845' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114042950950650845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114042950950650845'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/modificar-el-texto-del-botn-de-un.html' title='Modificar el texto del botón de un input=&quot;file&quot;'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114029922973840793</id><published>2006-02-18T22:46:00.000+01:00</published><updated>2006-02-18T22:47:09.756+01:00</updated><title type='text'>Crear gráficas mediante SVG y sin PHP</title><content type='html'>Ya &lt;a href="http://displaynone.blogspot.com/2006/02/crear-grficas-mediante-svg.html"&gt;vimos&lt;/a&gt; como crear una gráfica con los datos que obteníamos mediante una consulta a la BD, mientras que la tabla si se reordenaba mediante Javascript, era necesario realizar llamadas al servidor para actualizar los datos. ¿Problemas?, que la llamada puede tardar en responder (dependiendo del servidor y muchas otras cosas) y que se pueden llegar a hacer muchas llamadas al servidor, lo cual tampoco puede llegar a ser muy bueno para el rendimiento de este.&lt;br&gt;
 Por ello vamos a realizar la gráfica SVG dinámicamente mediante Javascript, se ahorra uso del servidor, ya que la acción la realiza el navegador (si es Firefox, mejor que mejor), eso sí, sin saturarlo porque las acciones que hace no son muy complejas (dependiendo del tamaño de la tabla). Está claro que este modo de trabajo no se puede usar cuando los datos se actualizan con mucha frecuencia, casi contínuamente, porque entonces la creación de la tabla y de la gráfica debería ser siempre en el servidor (accediendo a los datos actualizados).
&lt;center&gt;&lt;a href="http://mediamax.streamload.com/displaynone/Hosted/tablas-y-svg.html"&gt;&lt;img src="http://mediamax.streamload.com/displaynone/Hosted/grafica-svg2.gif"&gt;&lt;/a&gt;&lt;/center&gt; 
 &lt;div id="20boton"&gt;&lt;a href="javascript:mostrar('20')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="20texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('20')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 Ahora he cambiado el uso de un iframe para el SVG, por el de un objeto embed para poder acceder a él correctamente. Realmente accedía correctamente usando el iframe y el Firefox, pero cuando probé si funcionaba en IE, me daba fallos (para variar). En Opera tampoco funciona, creo que porque ellos soportan &lt;a href="http://www.w3.org/TR/2005/WD-SVGMobile12-20050413/intro.html"&gt;SVG Tiny&lt;/a&gt;, tendré que informarme más sobre ello.
 &lt;p class="code"&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;embed id="svg" SRC="datos.svg" 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width="500" height="400" frameborder="0"&amp;gt;
 &lt;/p&gt;
 Lo único destacable que hay que explicar es la parte que se encarga de la creación de las barras dentro de la imagen SVG (resaltado en negrita), también decir que el SVG solo debe tener los ejes de coordenadas y una etiqueta G que agrupe los resultados y que será el que se vacíe y rellene cada vez.
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se encarga de dibujar la tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// y la gráfica&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function dibujarTabla() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var html = "&amp;lt;table&amp;gt;";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Obtenemos el documento SVG&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var svgDocument = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'svg').getSVGDocument();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var contenedor = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;svgDocument.getElementById("contenedor"); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cabecera&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// En cada celda de la cabecera&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// se le añade un evento para que&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// cuando se pulse en ella se cambien&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// el criterio de orden y tambien una&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// imagen que indica el orden de cada &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// columna&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;tr&amp;gt;&amp;lt;th onclick="cambiar(0)"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += 'Comunidad/Ciudad Autónoma&amp;nbsp;&amp;lt;img src="';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += ((orden == 0)? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(ascendente? 'ord-asc.gif':'ord-des.gif'):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'ord-no.gif');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '"&amp;gt;&amp;lt;/th&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;th onclick="cambiar(1)"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += 'Habitantes (2000)&amp;nbsp;&amp;lt;img src="';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += ((orden == 1)? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(ascendente? 'ord-asc.gif':'ord-des.gif'):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'ord-no.gif');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '"&amp;gt;&amp;lt;/th&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;th onclick="cambiar(2)"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += 'Habitantes (2005)&amp;nbsp;&amp;lt;img src="';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += ((orden == 2)? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(ascendente? 'ord-asc.gif':'ord-des.gif'):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'ord-no.gif');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '"&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se ordena la tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datos.sort(organizar);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Borramos los datos del contenedor&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (contenedor.hasChildNodes()) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contenedor.removeChild(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contenedor.firstChild);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Por cada fila se escribe&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// el codigo HTML necesario&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;datos.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Parte HTML&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'+datos[i][0]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'+datos[i][1]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'+datos[i][2]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Parte SVG&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Creamos las barras&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var shape = svgDocument.createElementNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;svgns, "rect");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "x", 105+15*i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "y", 15+190 - 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parseInt(190*parseInt(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datos[i][2])/8000000));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "width",  10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "height", parseInt(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;190*datos[i][2]/8000000));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "height", parseInt(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;190*datos[i][2]/8000000));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "style", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"fill:#fff3c9;stroke:#315c7c;"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"stroke-width:1.5000000;");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contenedor.appendChild(shape);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Creamos el texto&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape = svgDocument.createElementNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;svgns, "text");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "x", -220);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "y", 115+15*i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "width",  10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "style", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"font-size:7pt;fill:#000000;"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"font-family:Arial;text-anchor: end;");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "transform", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"matrix(0,-1.000000,1.000000,"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"0,0.000000,0.000000)");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.appendChild(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;svgDocument.createTextNode(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datos[i][0]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contenedor.appendChild(shape);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Creamos la cifra&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape = svgDocument.createElementNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;svgns, "text");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "x", -195);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "y", 114+15*i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "width",  10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "style", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"font-size:7pt;fill:#000000;"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"font-family:Arial;");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.setAttributeNS(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, "transform", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"matrix(0,-1.000000,1.000000,"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"0,0.000000,0.000000)");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shape.appendChild(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;svgDocument.createTextNode(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datos[i][1]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contenedor.appendChild(shape);
&lt;/b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;/table&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Necesita un DIV con id=tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("tabla").innerHTML = html;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 &lt;/p&gt;
 Te puedes bajar un ejemplo aquí: &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/tablas-svg.zip"&gt;ARCHIVO&lt;/a&gt;
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114029922973840793?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114029922973840793/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114029922973840793' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114029922973840793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114029922973840793'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/crear-grficas-mediante-svg-y-sin-php.html' title='Crear gráficas mediante SVG y sin PHP'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114022426509521905</id><published>2006-02-18T01:38:00.000+01:00</published><updated>2006-02-18T18:15:49.243+01:00</updated><title type='text'>¿Usará Google Maps SVG?</title><content type='html'>Bueno, tanto como usar, lo que se dice usar, no está muy claro, hay el rumor de que es posible que lo usen. Todo esto viene porque en un hilo de una &lt;a href="http://groups.google.co.uk/group/Google-Maps-API/browse_frm/thread/68ab5b4c1f8f236c/049ae08499ba4715?lnk=raot#049ae08499ba4715"&gt;discusión &lt;/a&gt; de los grupos de Google, se han metido en la API de Google Maps y han visto que hay dos variables que hacen referencia a SVG, aunque luego más tarde dicen que la versión que están investigando tiene fallos. Ya nos enteraremos de qué es lo que pasa realmente, y si Google Maps admite SVG o no. La verdad es que solo se me ocurriría que quisieran usarlo para cambiar algo de la funcionalidad, porque por lo poco que sé de cómo funciona Google Maps, a mí siempre me ha parecido que usan una BD de imágenes estáticas y no se calcula dinámicamente la imágen que se quiere mostrar como suelen hacer las aplicaciones &lt;a href="http://es.wikipedia.org/wiki/SIG"&gt;GIS&lt;/a&gt; (como por ejemplo uno de los que ofrece &lt;a href="http://www2.demis.nl/quakes/"&gt;Demis&lt;/a&gt;).&lt;br&gt;
Visto en &lt;a href="http://blog.codedread.com/archives/2006/02/10/google-maps-v2-to-use-svg/"&gt;Something Witty Goes Here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114022426509521905?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114022426509521905/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114022426509521905' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114022426509521905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114022426509521905'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/usar-google-maps-svg.html' title='¿Usará Google Maps SVG?'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114016940892336179</id><published>2006-02-17T10:42:00.000+01:00</published><updated>2006-02-17T10:45:25.170+01:00</updated><title type='text'>Historial de Microsiervos [19/07/2001 a 17/02/2006]</title><content type='html'>El otro día comentaba con un amigo, al que le estaba mostrando &lt;b&gt;display: NONE&lt;/b&gt; y que no sabe nada de la &lt;a href="http://es.wikipedia.org/wiki/Blogosfera"&gt;blogosfera&lt;/a&gt; ni de lo que cuento en mis entradas, que era bastante importante aparecer enlazado en otro blog para que la gente te conozca. Le comentaba el caso de &lt;a href="http://www.microsiervos.com"&gt;Microsiervos&lt;/a&gt;, &lt;a href="http://www.error500.net"&gt;Error 500&lt;/a&gt; y &lt;a href="http://www.uberbin.net/"&gt;Denken Über&lt;/a&gt;, que me habían enlazado y que en las estadísticas se veía bastante reflejado.&lt;br&gt;
 Esta conversación derivó en el tema de las &lt;a href="http://displaynone.blogspot.com/2006/02/mis-amigas-las-expresiones-regulares.html"&gt;expresiones regulares&lt;/a&gt;, qué eran, para qué servían, etc... El caso es que intentando explicárselo con un ejemplo, fuimos al buscador de Microsiervos... ¿resultado?, &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/microsiervos.zip?action=save"&gt;todas las entradas&lt;/a&gt; de Microsiervos desde su inicio (19 de julio de 2001) hasta la actualidad (17 de febrero de 2006).&lt;br&gt;
 Lógicamente, no voy a decir cómo lo hicimos, aunque tampoco es muy complicado. Eso sí, quisiera pedir perdón a Microsiervos por si he saturado un poco su servidor (aunque no parecía que diera muchos problemas), voy a ver si les aviso de alguna forma, y para los curiosos os pongo un ZIP con todo lo que me bajé. Como consejillo, perdón otra vez por la arrogancia ;-), les diría que limitaran el número de resultados o que pusieran paginación.&lt;br&gt;
 El historial de Microsiervos os lo podéis bajar aquí: &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/microsiervos.zip?action=save"&gt;ARCHIVO&lt;/a&gt;, no me seáis #@%;! y no hagáis nada que vaya en perjuicio de Microsiervos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114016940892336179?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114016940892336179/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114016940892336179' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114016940892336179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114016940892336179'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/historial-de-microsiervos-19072001.html' title='Historial de Microsiervos [19/07/2001 a 17/02/2006]'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114011449262013779</id><published>2006-02-16T19:26:00.000+01:00</published><updated>2006-02-16T19:48:31.820+01:00</updated><title type='text'>Crear gráficas mediante SVG</title><content type='html'>Continuando con SVG, vamos a realizar un ejemplo que nos puede ser de utilidad y para que no todo se quede en &lt;a href="http://displaynone.blogspot.com/2006/02/svg-ese-gran-desconocido.html"&gt;teoría&lt;/a&gt;. Para ello vamos a usar la &lt;a href="http://displaynone.blogspot.com/2006/02/ordenar-tablas-mediante-javascript.html"&gt;tabla&lt;/a&gt; ordenada mediante Javascript y le vamos a añadir un documento SVG que muestre los habitantes del 2005 en una gráfica de barras. Aunque se podría hacer todo de forma estática, ya que el SVG permite interactuar con la página, lo haremos mediante PHP para que se entienda con mayor claridad.&lt;br&gt;
 &lt;center&gt;&lt;img src="http://mediamax.streamload.com/displaynone/Hosted/grafica-svg.gif"&gt;&lt;/center&gt;
 &lt;div id="18boton"&gt;&lt;a href="javascript:mostrar('18')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="18texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('18')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 Antes de nada tengo que avisar de una pequeño detalle, el SVG es un poco caótico a la hora de ser usado, pero solo en lo referente a los navegadores. A diferencia del Flash, que pertenece a una empresa y que es esta la que se encarga de crear un visor de los archivos swf, el SVG no pertecene a ninguna empresa y por ello no hay un visor universal para los archivos svg. Adobe (ahora también propietaria del Flash) es una de las empresas más involucradas en el proyecto SVG y creó un &lt;a href="http://www.adobe.com/svg/viewer/install/main.html"&gt;pluggin&lt;/a&gt; para ver los archivos svg. Aunque para mí es el más completo, tiene el inconveniente de que está pensado para IE, y que en Firefox funciona peor, y en Opera peor aún. Afortunadamente, &lt;a href="http://www.mozilla.org/projects/svg/"&gt;Firefox&lt;/a&gt; y &lt;a href="http://www.opera.com/features/svg/"&gt;Opera&lt;/a&gt; visualizan SVG de forma nativa, pero no tienen toda la funcionalidad del pluggin de Adobe (el ejemplo que voy a mostrar ahora no funciona correctamente con Opera porque no rota el texto).&lt;br&gt;
 Vamos a transformar la página estática que usamos para las tablas que se ordenan mediante Javascript, en una página PHP dinámica, aunque tan solo vamos a simular la obtención de datos (para que luego vosotros la modifiquéis si obtenéis los datos mediante una consulta a la BD). También le vamos a añadir un iframe que llama a la página PHP que crea el SVG, que también será llamado cuando se reordenan las columnas.&lt;br&gt;
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Array con los datos &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$datos[0] = array('Andalucía ', 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7340052, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7849799);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$datos[1] = array('Aragón ', 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1189909, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1269027);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$datos[2] = array('Principado de Asturias ', 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1076567, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1076635);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;html&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;head&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Datos de la tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var datos = new Array();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;?
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cont=0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach ($datos as $dato) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Creamos el array javascript&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datos[&amp;lt;? echo $cont++; ?&amp;gt;] = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new Array('&amp;lt;? echo $dato[0]; ?&amp;gt;', 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;? echo $dato[1]; ?&amp;gt;', 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;? echo $dato[2]; ?&amp;gt;');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function cambiar(ind) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Llama al SVG&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("svg").src = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"svg.php?orden=" + orden + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;ascendente=" + ascendente;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;body&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;iframe id="svg" SRC="svg.php" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width="500" height="400" frameborder="0"/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/body&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/html&amp;gt;
&lt;/p&gt; 
 Lo siguiente que viene puede parecer lo más complicado, la creación del archivo SVG, pero es realmente sencillo porque para ello vamos a usar el programa &lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt;, un editor de SVG que es sencillo de usar. En el Inkscape dibujaremos la estructura de lo que será la gráfica, los ejes de coordenadas y un ejemplo de barra. Limpiaremos un poco el xml de propiedades innecesarias (aunque no es necesario) y diferenciaremos cada parte, fijándonos en las que forman cada barra, para luego repetirla en el PHP.&lt;br&gt;
 &lt;center&gt;&lt;img src="http://mediamax.streamload.com/displaynone/Hosted/previo-svg.gif"&gt;&lt;/center&gt;
 El SVG que nos quedaría sería algo parecido a esto:
 &lt;div style="width: 560px;"&gt;
 &lt;p class="code" style="overflow: auto;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- Cabecera --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;svg version="1.1" width="100%" height="100%"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns="http://www.w3.org/2000/svg"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- Agrupamos --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;g id="grafica"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- BARRA DE COORDENADAS --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;path
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="fill: none;stroke:#000000;stroke-width:1.5000000"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d="M 100,10 L 100,210 L 400,210"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="path1306" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- MARCA DE LOS 8 MILLONES --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;path
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="fill:none;stroke:#000000;stroke-width:1.5000000;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d="M 90,15 L 100,15"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="marca8mill" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- MARCA DE LOS 4 MILLONES --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;path
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="fill:none;stroke:#000000;stroke-width:1.5000000;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d="M 90,110 L 100,110"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="marca4mill" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- TEXTO DE LOS 8 MILLONES --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="font-size:10pt;fill:#000000font-family:Arial;text-anchor: end"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="85"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="20"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="texto8mill"&amp;gt;8 millones&amp;lt;/text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- TEXTO DE LOS 4 MILLONES --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="font-size:10pt;fill:#000000font-family:Arial;text-anchor: end"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="85"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="115"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="texto4mill"&amp;gt;4 millones&amp;lt;/text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- TEXTO COMUNIDAD AUTONOMA --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="font-size:7pt;fill:#000000font-family:Arial;text-anchor:end"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="-220"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="115"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="text1"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform="matrix(0,-1.000000,1.000000,0,0.000000,0.000000)"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;COMUNIDAD&amp;lt;/text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- RECTANGULO DE LA COMUNIDAD --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;rect
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="fill:#fff3c9;stroke:#315c7c;stroke-width:1.5000000;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="rect1"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width="10"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height="190"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="105"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="15"/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- VALOR DE LA COMUNIDAD --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="font-size:10px;fill:#315c7c;stroke:none;font-family:Arial"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="-195"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="114"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="valor1"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform="matrix(0.000000,-1.000000,1.000000,0.000000,0.000000,0.000000)"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8000000&amp;lt;/text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/g&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/svg&amp;gt;
 &lt;/p&gt;
 &lt;/div&gt; 
 Como vemos, las partes &lt;i&gt;barra de coordenadas&lt;/i&gt;, &lt;i&gt;marca de los 8 millones&lt;/i&gt;, &lt;i&gt;marca de los 4 millones&lt;/i&gt;, &lt;i&gt;texto de los 8 millones&lt;/i&gt; y &lt;i&gt;texto de los 4 millones&lt;/i&gt; son fijos y no se deben tocar. Los otros tres que quedan son los que se deben crear dinámicamente según los valores obtenidos en el PHP. El código necesario sería el siguiente:
 &lt;div style="width: 560px;"&gt;
 &lt;p class="code" style="overflow: auto;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// El Content-type del SVG, para&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// que el navegador sepa de que tipo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// de archivo se trata&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;header("Content-type: image/svg+xml");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Obtenemos el orden o lo ponemos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// por defecto&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$orden = $_GET["orden"];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$orden = (!isset($orden)? 0 : $orden);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Obtenemos si es ascendente&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// o lo ponemos por defecto&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ascendente = $_GET["ascendente"];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ascendente = (!isset($ascendente)? true : 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ascendente == "true");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$datos[0] = array('Andalucía ', 7340052, 7849799);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$datos[1] = array('Aragón', 1189909, 1269027);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$datos[2] = array('Asturias ', 1076567, 1076635);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$datos[3] = array('Islas Baleares ', 845630, 983131);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Función que se encarga&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// de ordenar los datos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// es igual que la de Javascript&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function ordenar($a, $b) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GLOBAL $ascendente, $orden;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$signo = $ascendente? 1:-1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (is_numeric($a[$orden])) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return ($a[$orden]+0 &amp;gt; $b[$orden]+0) ? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$signo : -$signo;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return ($a[$orden] &amp;gt; $b[$orden]) ? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$signo : -$signo;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Ordenamos los datos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;usort($datos, "ordenar");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cabecera SVG&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo '&amp;lt;?xml version="1.0" encoding="utf-8" '+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'standalone="no"?&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo '&amp;lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN"  '+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;svg version="1.1" width="100%" height="100%"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;preserveAspectRatio="xMinYMin"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns="http://www.w3.org/2000/svg"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;g
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="grafica"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- BARRA DE COORDENADAS --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;path
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="fill:none;stroke:#000000;stroke-width:1.5000000"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d="M 100,10 L 100,210 L 400,210"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="path1306" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- MARCA DE LOS 8 MILLONES --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;path
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="fill:none;stroke:#000000;stroke-width:1.5000000;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d="M 90,15 L 100,15"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="marca8mill" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- MARCA DE LOS 4 MILLONES --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;path
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="fill:none;stroke:#000000;stroke-width:1.5000000;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d="M 90,110 L 100,110"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="marca4mill" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- TEXTO DE LOS 8 MILLONES --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="font-size:10pt;fill:#000000font-family:Arial;text-anchor:end"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="85"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="20"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="texto8mill"&amp;gt;8 millones&amp;lt;/text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- TEXTO DE LOS 4 MILLONES --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="font-size:10pt;fill:#000000font-family:Arial;text-anchor:end"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="85"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="115"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="texto4mill"&amp;gt;4 millones&amp;lt;/text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;?
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cont=0;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Por cada dato creamos una barra&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach($datos as $dato) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- TEXTO COMUNIDAD AUTONOMA --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="font-size:7pt;fill:#000000font-family:Arial;text-anchor: end"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="-220"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="&amp;lt;? echo 115+15*$cont; ?&amp;gt;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="text&amp;lt;? echo $cont; ?&amp;gt;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform="matrix(0,-1.000000,1.000000,0,0.000000,0.000000)"&amp;gt;&amp;lt;? echo $dato[0]; ?&amp;gt;&amp;lt;/text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- RECTANGULO DE LA COMUNIDAD --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;rect
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="fill:#fff3c9;stroke:#315c7c;stroke-width:1.5000000;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="rect&amp;lt;? echo $cont; ?&amp;gt;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width="10"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height="&amp;lt;? echo round(190*$dato[2]/8000000); ?&amp;gt;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="&amp;lt;? echo 105+15*$cont; ?&amp;gt;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="&amp;lt;? echo 15+190-round(190*$dato[2]/8000000); ?&amp;gt;"/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;&amp;lt;!-- VALOR DE LA COMUNIDAD --&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="font-size:10px;fill:#315c7c;stroke:none;font-family:Arial"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x="-195"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y="&amp;lt;? echo 114+15*$cont; ?&amp;gt;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id="valor&amp;lt;? echo $cont; ?&amp;gt;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform="matrix(0.000000,-1.000000,1.000000,0.000000,0.000000,0.000000)"&amp;gt;&amp;lt;? echo $dato[2]; ?&amp;gt;&amp;lt;/text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cont++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/g&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/svg&amp;gt;
 &lt;/p&gt;
 &lt;/div&gt; 
 La posición y, la x y el alto de algunos elementos del SVG se calculan dinámicamente para una correcta situación en el documento SVG. Tambíén podrás apreciar que el x es negativo en el &lt;i&gt;valor de la comunidad&lt;/i&gt;, esto es debido a que está girado 90 grados y las coordenadas x e y se intercambian.&lt;br&gt;
 Todos los archivos necesarios se encuentran aquí: &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/grafica-svg.zip"&gt;ARCHIVO&lt;/a&gt;, si tenéis algún problema al ejecutarlo, yo uso &lt;a href="http://www.en.wampserver.com/"&gt;Wamp Server&lt;/a&gt; para instalar PHP y MySQL con facilidad, copiando la carpeta que se descomprima en el directorio raiz, debería funcionar todo correctamente.
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114011449262013779?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114011449262013779/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114011449262013779' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114011449262013779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114011449262013779'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/crear-grficas-mediante-svg.html' title='Crear gráficas mediante SVG'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-114000411346570260</id><published>2006-02-15T12:48:00.000+01:00</published><updated>2006-02-15T12:53:27.406+01:00</updated><title type='text'>Ordenar tablas mediante Javascript</title><content type='html'>A la hora de mostrar tablas, el orden por el cual está ordenada puede ayudarnos a ver con mayor facilidad la información que contiene, ordenada por distintas columnas pueder revelar diferentes aspectos sobre los datos que almacena.&lt;br&gt;
 En el caso de que la tabla se genere dinámicamente (consulta a una BD y mostrándola mediante una &lt;a href="http://es.wikipedia.org/wiki/JSP"&gt;JSP&lt;/a&gt; o una página &lt;a href="http://es.wikipedia.org/wiki/PHP"&gt;PHP&lt;/a&gt;), cuando se quiere volver a ordenar la tabla por otra columna, se vuelve a cargar la página para que la tabla se actualice. Cuando se trata de una página estática se debería cargar otra página distinta. Todo esto no es necesario si se realiza  la ordenación mediante Javascript.&lt;br&gt;
 &lt;center&gt;&lt;a target="tablas"  href="http://mediamax.streamload.com/displaynone/Hosted/tablas-ordenadas.html"&gt;&lt;img src="http://mediamax.streamload.com/displaynone/Hosted/tabla-ordenada.png" border="0"&gt;&lt;/a&gt;&lt;/center&gt;
 &lt;div id="17boton"&gt;&lt;a href="javascript:mostrar('17')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="17texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('17')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 Antes de nada, hay que tener en cuenta que este tipo de ordenación de tablas solo se debe hacer cuando se muestran todos los registros, cuando no hay &lt;a href="http://www.webtaller.com/construccion/lenguajes/php/lecciones/paginacion_resultados.php"&gt;paginación de resultados&lt;/a&gt;, ya que cuando se reordena una tabla paginada, los datos que actualmente se muestran, pueden estar en páginas posteriores una vez se ha aplicado el orden.&lt;br&gt;
 El método que vamos a usar es sencillo, los datos de la tabla los vamos a meter en un array de arrays, luego dibujaremos la tabla dinámicamente (usando un DIV y el innerHTML) y luego mediante la capacidad que ofrece Javascript para &lt;a href="http://www.javascriptkit.com/javatutors/arraysort.shtml"&gt;ordenar arrays&lt;/a&gt;, mostraremos la tabla según el criterio que queramos.&lt;br&gt;
 Necesitamos tres variables globales: una de ella contendrá los datos de la tabla, otra el índice de la columna por la que se ordena y la última si el orden es ascendente o descendente:
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var orden = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var ascendente = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var datos = new Array();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datos[0] = new Array('Andalucía ', 7340052, 7849799);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datos[1] = new Array('Aragón ', 1189909, 1269027);
 &lt;/p&gt;
 Pasemos ahora a las funciones, la primera de ellas es la que se encarga de cmabiar el criterio de orden, según el índice que se pasa por parámetro, si es el mismo que el que ya estaba, se cambia el sentido (ascendente/descendente) y si no es así, se cambia el indice y se pone el sentido como ascendente.
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cambia el criterio de orden&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// y vuelve a dibujar la tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function cambiar(ind) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si es el mismo orden&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// que el que hay actualmente&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// se cambia el sentido.&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// En otro caso, se cambia el&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// criterio y se pone el sentido&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// como ascendente&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (ind == orden) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ascendente = !ascendente;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;orden = ind;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ascendente = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se refresca la tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dibujarTabla();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;/p&gt; 
 La siguiente función es la que se usa en el método de ordenación, se pasa como parámetro a la función sort y tiene como parámetros dos elementos del array que se ordena. Devuelve 1 para el elemento mayor y -1 para el menor.
&lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Es la función para ordenar el array&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// con los datos, tiene en cuenta la columna&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// y si es ascendente o no&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function organizar(a, b) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var signo = ascendente? 1:-1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (a[orden] &amp;gt; b[orden]) ? signo : -signo;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;/p&gt;
 Por último la función que dibuja la tabla, simplemente crea el código HTML necesario y lo inserta usando innerHTML en un div que tiene el id=tabla.
&lt;p class="code"&gt;
&lt;span class="code-comment"&gt;// Se encarga de dibujar la tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function dibujarTabla() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var html = "&amp;lt;table&amp;gt;";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cabecera&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// En cada celda de la cabecera&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// se le añade un evento para que&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// cuando se pulse en ella se cambien&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// el criterio de orden y tambien una&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// imagen que indica el orden de cada &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// columna&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;tr&amp;gt;&amp;lt;th onclick="cambiar(0)"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += 'Comunidad/Ciudad Autónoma&amp;nbsp;&amp;lt;img src="';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += ((orden == 0)? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(ascendente? 'ord-asc.gif':'ord-des.gif'):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'ord-no.gif');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '"&amp;gt;&amp;lt;/th&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;th onclick="cambiar(1)"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += 'Habitantes (2000)&amp;nbsp;&amp;lt;img src="';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += ((orden == 1)? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(ascendente? 'ord-asc.gif':'ord-des.gif'):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'ord-no.gif');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '"&amp;gt;&amp;lt;/th&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;th onclick="cambiar(2)"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += 'Habitantes (2005)&amp;nbsp;&amp;lt;img src="';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += ((orden == 2)? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(ascendente? 'ord-asc.gif':'ord-des.gif'):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'ord-no.gif');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '"&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se ordena la tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datos.sort(organizar);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Por cada fila se escribe&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// el codigo HTML necesario&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;datos.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'+datos[i][0]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'+datos[i][1]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'+datos[i][2]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;/table&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Necesita un DIV con id=tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("tabla").innerHTML = html;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;/p&gt;
Podéis bajaros un ejemplo aquí: &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/tablas-ordenadas.zip?action=save"&gt;ARCHIVO&lt;/a&gt;
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-114000411346570260?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/114000411346570260/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=114000411346570260' title='10 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114000411346570260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/114000411346570260'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/ordenar-tablas-mediante-javascript.html' title='Ordenar tablas mediante Javascript'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113991670788861520</id><published>2006-02-14T12:31:00.000+01:00</published><updated>2006-02-14T12:31:47.910+01:00</updated><title type='text'>Miedo me da</title><content type='html'>Acabo de ver en Genbeta la entrada &lt;a href="http://www.genbeta.com/archivos/2006/02/14-que-saben-las-webs-que-visit.php"&gt;¿Que saben las webs que visitamos de nosotros? Con ProjectIp lo sabrás&lt;/a&gt;, y aunque conocía la información que se puede obtener, no había caido en la cuenta de que el IE puede leer lo que tienes en tu portapapeles, lo cual me parece bastante inapropiado. Sí, está muy bien tener esa utilidad y poder trabajar con ella, pueden conseguirse cosas interesantes con ello, pero también habrá quién obtenga cosas "interesantes" para ellos de nuestro portapaleles.&lt;br&gt;
 Me parece un fallo enorme que mediante el IE se pueda obtener información de nuestro ordenador, la gente normalmente no suele poner nada importante en el portapapeles, pero no todo el mundo tiene esa precaución, muchas veces se usa el copy/paste y no pensamos que pueda ser accesible desde una página web.&lt;br&gt;
 No sé, no me parece correcto que está información esté disponible para todo aquel que tenga malas intenciones. Afortunadamente, el Firefox, que es el navegador que uso, no permite esto.&lt;br&gt;
 Visto en: &lt;a href="http://www.genbeta.com/archivos/2006/02/14-que-saben-las-webs-que-visit.php"&gt;Genbeta&lt;/a&gt;&lt;br&gt;
 Enlace: &lt;a href="http://projectip.com/"&gt;Project IP&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113991670788861520?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113991670788861520/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113991670788861520' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113991670788861520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113991670788861520'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/miedo-me-da.html' title='Miedo me da'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113991429534882951</id><published>2006-02-14T11:51:00.000+01:00</published><updated>2006-02-14T14:24:25.670+01:00</updated><title type='text'>SVG, ese gran desconocido</title><content type='html'>Soy un apasionado del SVG y me gustaría conocerlo aún más, pero supongo que la falta de tiempo me hace no poder meterme del todo. ¿Qué es el SVG? es un formato de &lt;a href="http://es.wikipedia.org/wiki/Gr%C3%A1ficos_vectoriales"&gt;gráficos vectoriales&lt;/a&gt; del &lt;a href="http://www.w3.org"&gt;World Wide Web Consortium (W3C)&lt;/a&gt; en formato XML, que si bien se piensa en él para el entorno web, puede ser usado en muchos entornos: diseño, &lt;a href="http://svgicons.sourceforge.net/"&gt;iconos para escritorio&lt;/a&gt;, ...&lt;br&gt;
 Una definición mejor podría ser (y es) la que nos encontramos en la &lt;a href="http://es.wikipedia.org/wiki/SVG"&gt;Wikipedia&lt;/a&gt;:
 &lt;blockquote&gt;Scalable Vector Graphics (SVG) es un lenguaje para describir gráficos vectoriales bidimensionales, tanto estáticos como animados (estos últimos con ayuda de SMIL), en &lt;a href="http://es.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;.&lt;/blockquote&gt;
 Suele haber una &lt;a href="http://www.carto.net/papers/svg/comparison_flash_svg/"&gt;disputa&lt;/a&gt; entre si es mejor el SVG o el &lt;a href="http://www.macromedia.com/es/software/flash/flashpro/"&gt;Flash&lt;/a&gt;, pero, para mí gusto, es como la discusión entre ciencia y religión, puedes ser científico y tener creencias religiosas y no va a pasar nada. En este caso es lo mismo, más que discutir sobre que es mejor o peor, etc... ¿por qué no aprovecharnos de lo que nos ofrecen los dos formatos?. Aunque no soy muy amante del Flash, sería estúpido negar que se pueden hacer cosas &lt;a href="http://www.tokyoplastic.com/"&gt;increibles&lt;/a&gt; y que con SVG puede ser bastante complicado de hacer, pero también es cierto que con SVG se pueden hacer muchas &lt;a href="http://www.carto.net/papers/svg/samples/"&gt;cosas&lt;/a&gt; y más fáciles que con Flash, ya que es texto, no un formato binario.&lt;br&gt;
 Le veo mucha utilidad al SVG cuando se quieren mostrar gráficas de estadísticas en nuestra aplicación, una consulta a la base de datos, y un script PHP (por ejemplo) para escribir un sencillo XML y ya tendríamos nuestra gráfica de estadísiticas. Aunque también le veo inconvenientes, como por ejemplo que en IE tengas que instalar un pluggin para poder visualizar el SVG (y la gente no suele estar muy dada a instalar pluggins), Opera y Firefox (a partir de la versión 2) soportarán SVG, pero eso tampoco es bueno, porque cada uno puede sacar distintos resultados (esperemos que no). También echo de menos que el grosor de las líneas en SVG no contemple como en Flash el hilo. Pero también es cierto que los &lt;a href="http://www.w3.org/TR/SVG/filters.html"&gt;filtros&lt;/a&gt; que se pueden efectuar sobre SVG son impresionantes.&lt;br&gt;
 Intentaré ir poniendo ejemplos de uso, pero mientras tanto os paso estos enlaces para que vayais cogiéndole el gusto:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Especificación de la W3C: &lt;a href="http://www.w3.org/TR/SVG/"&gt;http://www.w3.org/TR/SVG/&lt;/a&gt;&lt;/li&gt;&lt;li class="list"&gt;Página de Adobe: &lt;a href="http://www.adobe.com/svg/"&gt;http://www.adobe.com/svg/&lt;/a&gt;&lt;/li&gt;&lt;li class="list"&gt;Un tutorial muy bueno de KeyLinDev: &lt;a href="http://kevlindev.com/tutorials/basics/index.htm"&gt;http://kevlindev.com/tutorials/basics/index.htm&lt;/a&gt;&lt;/li&gt;&lt;li class="list"&gt;Carto.net, una página con muchos recursos, centrados en la cartografía: &lt;a href="http://www.carto.net/"&gt;http://www.carto.net/&lt;/a&gt;&lt;/li&gt;&lt;li class="list"&gt;Inkscape, un editor gratuito de SVG: &lt;a href="http://www.inkscape.org/"&gt;http://www.inkscape.org/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113991429534882951?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113991429534882951/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113991429534882951' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113991429534882951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113991429534882951'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/svg-ese-gran-desconocido.html' title='SVG, ese gran desconocido'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113977250219269188</id><published>2006-02-12T20:27:00.001+01:00</published><updated>2006-02-13T12:25:20.606+01:00</updated><title type='text'>Contar palabras usando expresiones regulares</title><content type='html'>Gracias a que &lt;a href="http://www.microsiervos.com/archivo//expresiones-regulares.html"&gt;Microsiervos&lt;/a&gt; (en particular &lt;a href="http://www.microsiervos.com/archivo/general/nacho.html"&gt;Nacho&lt;/a&gt;) ha puesto un enlace a mi blog en una de sus entradas, lo que cuento sobre las &lt;a href=""&gt;expresiones regulares&lt;/a&gt; ha sido de lo más leido en display: NONE. [&lt;i&gt;Actualizado: según me cuenta Mario, él visitó la página gracias a &lt;a href="http://www.uberbin.net"&gt;Denker&lt;/a&gt;, cuando puse la entrada aún no había visto las estadísticas y la verdad es que también tengo que darle las gracias a Denker y a &lt;a href="http://www.error500.net"&gt;Error 500&lt;/a&gt; por haberme puesto en sus blogs&lt;/i&gt;]. Supongo que debido a ello, &lt;a href="http://adivina.blogspot.com/"&gt;Caso Patologico&lt;/a&gt; me pregunta en un comentario si sé de algún script que cuente palabras. Pues sin irnos del tema, voy a explicar como lo haría yo usando las expresiones regulares.&lt;br&gt;
 En el ejemplo que voy a mostrar, lo que hago es pasar a una función como parámetro un objeto HTML (en este caso un DIV), obtendré el código HTML usando la propiedad innerHTML, después quitaré las etiquetas HTML (&amp;lt;...&amp;gt;) y por último contaré las palabras.&lt;br&gt;
 Quizás fuera más sencillo pasar directamente el texto que quiero tratar, pero pasando el objeto también muestro como quitar etiquetas HTML usando las expresiones regulares.&lt;br&gt;
 El código sería el siguiente:
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function contarPalabras(obj) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var txt = obj.innerHTML;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Borro todo aquello que esté &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// contenido entre &amp;lt; y &amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;txt = txt.replace(/&amp;lt;(\/|\w|\s|=|"|\n)*&amp;gt;/g, "");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Almaceno las coincidencias con palabras&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Al hacer copy/paste debeis ponerlo todo en una línea&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var palabras = txt.match(/(\w|á|é|í|ó|ú|ü|ñ|Ñ|Á|É|Í|Ó|Ú)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[\s\n\r\t,\.;:"'\(\)\{\}\[\]$]*/g);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(palabras.length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 &lt;/p&gt;
 Así, a simple vista, puede ser fácil no comprender mucho, pero si nos detenemos un poco a intentar entender el contenido de las expresiones regulares, veremos que no es tan difícil.&lt;br&gt;
 &lt;p class="code"&gt;/&amp;lt;(\/|\w|\s|=|"|\n)*&amp;gt;/g&lt;/p&gt;
 Esta expresión regular es la que se encarga de reconocer las etiquetas HTML:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Primero nos encontramos con un &amp;lt;, que es por lo que empieza cualquier etiqueta HTML&lt;/li&gt;&lt;li class="list"&gt;Después nos encontramos con un conjunto de caracteres entre paréntesis y separados por |, esto quiere decir que el carácter siguiente está dentro de esos posibles valores:&lt;ul class="list"&gt;&lt;li class="list"&gt;\/ representa a /, es necesario escaparla porque tiene significado propio.&lt;/li&gt;&lt;li class="list"&gt;\w representa cualquier valor alfanumérico&lt;/li&gt;&lt;li class="list"&gt;\s representa cualquier el espacio en blanco&lt;/li&gt;&lt;li class="list"&gt;\n representa el retorno de carro&lt;/li&gt;&lt;li class="list"&gt;" y = se representan a ellos mismos&lt;/li&gt;&lt;/ul&gt;&lt;li class="list"&gt;El conjunto anterior está seguido por *, que indica que puede o no aparecer, y en ese caso, aparecer tantas veces como quiera&lt;/li&gt;&lt;li class="list"&gt;Y por último encontramos un &amp;gt; que es el carácter final de las etiquetas HTML&lt;/li&gt;&lt;li class="list"&gt;La g al final indica que se hace una búsqueda global, no finaliza al encontrar el primer caso&lt;/ul&gt;
 Al final lo que tenemos es una expresión regular que detecta todo conjunto de palabras (con números), espacios, comillas, iguales y saltos de línea encerrados entre &amp;lt; y &amp;gt;.&lt;br&gt;
 La siguiente expresión regular es la que detecta las palabras y si que nos puede parecer complicada de entender, pero es más sencilla aún que la anterior. Vamos a usar la funcion &lt;a href="http://www.devguru.com/Technologies/ecmascript/quickref/string_match.html"&gt;match&lt;/a&gt; la cual nos devuelve una lista con las coincidencias de la expresión regular, y viendo el número de elementos que tiene la lista, sabremos cuantas palabras hay.
 &lt;p class="code"&gt;/(\w|á|é|í|ó|ú|ü|ñ|Ñ|Á|É|Í|Ó|Ú)+[\s\n\r\t,\.;:"'\(\)\{\}\[\]$]*/g&lt;/p&gt;
 Esta expresión regular encuentra las palabras seguidas por caracteres que separan palabras (espacios, signos de puntuación, ...):
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Primeramente hay un grupo de caracteres entre paréntesis, seguido de un + (que indica que se repite una vez o varias). Realmente solo debería aparecer el carácter \w que representa a cualquier carácter alfanumérico, pero no sé por qué (quizás solo en Firefox) no reconoce las vocales acentuadas, ...&lt;/li&gt;&lt;li class="list"&gt;Después hay un conjunto de caracteres separadores de palabras, incluido el final de cadena ($)&lt;/li&gt;&lt;/ul&gt;
 Por lo que reconocerá palabras seguidas de caracteres separadores, separando así las palabras.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113977250219269188?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113977250219269188/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113977250219269188' title='9 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113977250219269188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113977250219269188'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/contar-palabras-usando-expresiones_12.html' title='Contar palabras usando expresiones regulares'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113959804421272511</id><published>2006-02-10T20:00:00.000+01:00</published><updated>2006-02-10T20:03:20.323+01:00</updated><title type='text'>Caja de texto con autocompletado</title><content type='html'>Cada día son mayores las facilidades que ofrecen las páginas web para que el usuario se esfuerce lo menos posible. Una de ellas es el autocompletado de las cajas de texto, según se vaya escribiendo te aparece una lista con las posibles opciones o con sugerencias. Es lo que usa &lt;a href="http://www.google.es"&gt;Google&lt;/a&gt; cuando te va mostrando lo más buscado.&lt;br&gt;
 &lt;center&gt;&lt;iframe src="http://mediamax.streamload.com/displaynone/Hosted/autocompletado.html" style="width: 200px; height: 200px; border: 1px solid #315C7C" frameborder="0"&gt;&lt;/iframe&gt;&lt;/center&gt;
 A primera vista parece complicado, pero como se va a ver no lo es tanto, eso sí, quizás tiene varias cosas que hay que tener en cuenta, lo que lo convierte en un script un poco largo.&lt;br&gt;
 &lt;div id="13boton"&gt;&lt;a href="javascript:mostrar('13')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="13texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('13')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 Primero vamos con el diseño, son necesarias tres partes, la caja de texto &lt;a href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.4"&gt;&amp;lt;INPUT type="text" ...&amp;gt;&lt;/a&gt;, una capa que irá debajo de la caja de texto que es la que mostrará las sugerencias y un botón, en este caso una imagen, que servirá para desplegar la lista con todos los valores.&lt;br&gt; Lo único destacable del diseño es que la lista debe ser una capa con estilo &lt;i&gt;position: absolute&lt;/i&gt; y debe ir dentro de otra con estilo &lt;i&gt;position: relative&lt;/i&gt;, para que "flote" por encima del texto que se encuentre debajo de la caja de texto.&lt;br&gt;
 &lt;p class="code"&gt;
&amp;lt;input type="text" id="input-fill" autocomplete="off" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onkeyup="inputFilling(event, this)" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onblur="setInput(this, document.getElementById('lista'))"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;nbsp;
&amp;lt;img src="abajo.gif" border="0" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onmouseover="cambiarImagen(this, true)" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onmouseout="cambiarImagen(this, false)" class="boton" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onclick="despliegaFilling(document.getElementById('input-fill'), datos, document.getElementById('lista'))" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title="Importar"&amp;gt;&amp;lt;div class="contenedor"&amp;gt;&amp;lt;div id="lista" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="fill"&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
 &lt;/p&gt;
 Si nos fijamos tanto en la caja de texto como en la imagen, veremos que hay varios eventos que debemos tener en cuenta: en la caja de texto cuando se pulsa una tecla muestra la lista con las coincidencias y cuando se pierde el foco se debe escribir en la caja el texto seleccionado de la lista de coincidencias. En la imagen hay que desplegar la lista con todas las posibilidades. Una cosa a tener en cuenta es que la caja de texto debe tener el atributo &lt;a href="http://www.w3.org/Submission/web-forms2/#the-autocomplete"&gt;autocomplete&lt;/a&gt; con valor &lt;i&gt;off&lt;/i&gt; para que el navegador no actue sobre ella.&lt;br&gt;
 Las acciones que se deben tener en cuenta son las siguientes:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Se pulsa una tecla en la caja de texto (usamos el evento &lt;a href="http://www.w3.org/TR/REC-html40/interact/scripts.html#h-18.2.3"&gt;onkeyup&lt;/a&gt; para no tener problemas con los cursores) y dependiendo de la tecla:&lt;/li&gt;&lt;ul class="list"&gt;&lt;li class="list"&gt;si la tecla es el cursor hacia la izquierda o hacia la derecha, no hago nada y no dejo que se modifique el texto, volviendo a sobreescribirlo&lt;/li&gt;&lt;li class="list"&gt;si la tecla es el cursor hacia arriba, selecciono el inmediato superior al seleccionado en ese momento en la lista de coincidencias&lt;/li&gt;&lt;li class="list"&gt;si la tecla es el cursor hacia abajo, selecciono el inmediato inferior al seleccionado en ese momento en la lista de coincidencias&lt;/li&gt;&lt;li class="list"&gt;si la tecla es la de retroceso, dejamos que borre el texto seleccionado (hay que tener en cuenta tambien que dentro de la caja habrá una parte del texto que estará seleccionado, que coincidirá con la diferencia de la opción seleccionada y el texto escrito por el usuario)&lt;/li&gt;&lt;li class="list"&gt;si la tecla es la de retorno de carro, deseleccionamos en texto (quedará la opción seleccionado) y eliminamos la lista&lt;/li&gt;&lt;li class="list"&gt;en otro caso, escribimos la letra pulsada&lt;/li&gt;&lt;/ul&gt;&lt;li class="list"&gt;después de tratar la tecla pulsada, calculamos la lista de opciones y la dibujamos dentro de una tabla&lt;/li&gt;&lt;li class="list"&gt;si pinchamos en una opción de la lista, la escribimos en la caja y ocultamos la lista&lt;/li&gt;&lt;/ul&gt;
 La lista de opciones se obtendrán de un array, claro que se podría obtener usando &lt;a href="http://es.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt;.&lt;br&gt;
 La función que trata la pulsación de las teclas y despliega la lista con las coincidencias es la siguiente, la cual recibe dos parámetros, el objeto event y el elemento que contiene la lista:
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Muestra las coincidencias en la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function inputFilling(evt, obj) {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var elems = datos;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var fill = document.getElementById('lista');

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var tecla = "";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var lista = new Array();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var res = obj.value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var borrar = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Almaceno la tecla pulsada&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!IE) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  tecla = evt.which;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  tecla = evt.keyCode;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var texto;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si la tecla que pulso es una&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// letra o un espacio, o el intro&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// o la tecla borrar, almaceno lo &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// que debo buscar&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!String.fromCharCode(tecla).match(/(\w|\s)/) &amp;&amp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tecla != 8 &amp;&amp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tecla != 13) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto = textoAnt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto = obj.value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textoAnt = texto;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si el texto es distinto de vacio&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// o se pulsa ARRIBA o ABAJO&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// creo una lista con las palabras&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// que coinciden con lo que hay&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// escrito en la caja&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((texto != null &amp;&amp; texto != "") 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|| (tecla == 40 || tecla == 38)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;elems.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (elems[i].toUpperCase().indexOf(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto.toUpperCase()) == 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lista[lista.length] = elems[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Según la letra que se pulse&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (tecla == 37) { &lt;span class="code-comment"&gt;// Izquierda&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// No hago nada&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (tecla == 38) { &lt;span class="code-comment"&gt;// Arriba&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Subo la posicion en la&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// lista desplegable una posición&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (posicionListaFilling &amp;gt; 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posicionListaFilling--;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Corrijo la posición del scroll&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.scrollTop = posicionListaFilling*14;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (tecla == 39) { &lt;span class="code-comment"&gt;// Derecha&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// No hago nada&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (tecla == 40) { &lt;span class="code-comment"&gt;// Abajo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (obj.value != "") {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si no es la última palabra&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// de la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (posicionListaFilling &amp;lt; lista.length-1) { 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Corrijo el scroll&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.scrollTop = posicionListaFilling*14;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Bajo la posición de la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posicionListaFilling++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (tecla == 8) { &lt;span class="code-comment"&gt;// Borrar &amp;lt;-&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se sube la lista del todo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posicionListaFilling = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se permite borrar&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;borrar = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (tecla == 13) { &lt;span class="code-comment"&gt;// Intro&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Deseleccionamos el texto&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (obj.createTextRange) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var r = obj.createTextRange();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.moveStart("character", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.value.length+1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.moveEnd("character", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.value.length+1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.select();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (obj.setSelectionRange) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setSelectionRange(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.value.length+1, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.value.length+1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Ocultamos la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.style.display = "none";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Ponemos el puntero de &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// la lista arriba del todo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posicionListaFilling = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Controlamos el scroll&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.scrollTop = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// En otro caso que siga&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// escribiendo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posicionListaFilling = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.scrollTop = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (lista.length == 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si la lista es vacia no la mostramos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.style.display = "none";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Creamos una tabla con &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// todos los elementos encontrados&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.style.display = "block";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var html='&amp;lt;table cellspacing="0" '+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'cellpadding="0" border="0" width="100%"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;lista.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;tr id="tr'+obj.id+i+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'" '+(posicionListaFilling == i? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' class="fill" ': '')+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' onmouseover="seleccionaFilling(\'tr'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.id+'\', '+i+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;')" onmousedown="seleccionaTextoFilling(\'tr'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.id+'\', '+i+')"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;td&amp;gt;'+lista[i]+'&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;/table&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Escribimos la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.innerHTML = html;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si no se ha borrado&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!borrar) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (lista.length != 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Seleccionamos la parte del texto&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// que corresponde a lo que aparece&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// en la primera posición de la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// menos el texto que realmente hemos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// escrito&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.value = lista[posicionListaFilling];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (obj.createTextRange) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var r = obj.createTextRange();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.moveStart("character", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto.length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.moveEnd("character", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lista[posicionListaFilling].length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.select();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (obj.setSelectionRange) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setSelectionRange(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto.length, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lista[posicionListaFilling].length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;/p&gt;
 Una función muy similar es la que se encarga de desplegar la lista cuando se pulsa el botón
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Despliega todos los elementos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// en la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function despliegaFilling(obj, elems, fill) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var lista = new Array();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var res = obj.value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var texto="";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Creamos la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;elems.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (elems[i].toUpperCase().indexOf(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto.toUpperCase()) == 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lista[lista.length] = elems[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textoAnt = "";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (lista.length == 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si no hay datos no la mostramos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.style.display = "none";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Creamos una tabla&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// con todos los elementos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// de la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.style.display = "block";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var html='&amp;lt;table cellspacing="0" '+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'cellpadding="0" border="0" '+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'width="100%"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;lista.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;tr id="tr'+obj.id+i+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'" '+(posicionListaFilling == i? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' class="fill" ': '')+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'onmouseover="seleccionaFilling(\'tr'+obj.id+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'\', '+i+')" onmousedown="seleccionaTextoFilling(\'tr'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.id+'\', '+i+')"&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;td&amp;gt;'+lista[i]+'&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&amp;lt;/table&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Escribimos la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.innerHTML = html;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Seleccionamos el texto&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (lista.length != 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.value = lista[posicionListaFilling];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (obj.createTextRange) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var r = obj.createTextRange();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.moveStart("character", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto.length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.moveEnd("character", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lista[posicionListaFilling].length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.select();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (obj.setSelectionRange) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setSelectionRange(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto.length, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lista[posicionListaFilling].length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.focus();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 &lt;/p&gt;
 Y por último, necesitaremos otras funciones para ayudar en la funcionalidad
&lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Introduce el texto seleccionado&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function setInput(obj, fill) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.value = textoAnt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill.style.display = "none";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posicionListaFilling = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cambia el estilo de&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// la palabra seleccionada&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// de la lista&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function seleccionaFilling(id, n) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById(id + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n).className = "fill";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById(id + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posicionListaFilling).className = "";  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posicionListaFilling = n;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Pasa el texto del filling a la caja&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function seleccionaTextoFilling (id, n) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textoAnt = document.getElementById(id + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n).firstChild.innerHTML;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posicionListaFilling = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;/p&gt;
 Si quieres intentar tú hacer algo parecido, te lo recomiendo, no es complicado, si te aconsejo que vayas introduciendo funcionalidades poco a poco, si no, si que podrá resultar bastante complicado.&lt;br&gt;
 Puedes bajarte aquí un ejemplo: &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/autocompletado.zip"&gt;ARCHIVO&lt;/a&gt;
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113959804421272511?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113959804421272511/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113959804421272511' title='17 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113959804421272511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113959804421272511'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/caja-de-texto-con-autocompletado.html' title='Caja de texto con autocompletado'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113948567273144527</id><published>2006-02-09T12:47:00.000+01:00</published><updated>2006-02-09T22:12:38.253+01:00</updated><title type='text'>Uso de iframes y scripts en una aplicación web</title><content type='html'>Me sigo sorprenciendo cuando entro en un proyecto nuevo y veo que quién ha hecho el diseño ha usado &lt;a href="http://www.w3.org/TR/REC-html40/present/frames.html"&gt;frames&lt;/a&gt;, dividiendo la página en varias partes y estas a su vez también divididas en otras. Cuando estamos creando una aplicación web suele ser necesario dividir la pantalla en distintas zonas para separar las funcionalidades, pero las divisiones es mejor realizarlas mediante iframes, más que con frames.&lt;br&gt;
 Por ejemplo, para mostrar varias tablas con datos que se obtienen con consultas propias, es preferible crear una página para cada consulta, que muestran únicamente esa información, y no que sea una sola página que muestre todas las tablas. Haciendo lo primero podemos trabajar con cada tabla de forma independiente y no tendremos la necesidad de recargar todas las tablas para actualizar solo una.&lt;br&gt;
 Para mí la diferencia fundamental es que los &lt;a href="http://www.w3.org/TR/REC-html40/present/frames.html#h-16.2"&gt;frames&lt;/a&gt; dividen la pantalla, mientras que los &lt;a href="http://www.w3.org/TR/REC-html40/present/frames.html#h-16.5"&gt;iframes&lt;/a&gt; dividen el documento.&lt;br&gt;
 &lt;center&gt;&lt;img src="http://mediamax.streamload.com/displaynone/Hosted/frames-iframes.png"&gt;&lt;/center&gt;&lt;br&gt;
 En el caso de los frames, supongamos que el menú ocupa de alto más que la ventana, haciendo aparecer un scroll (algo que de por sí no es muy estético), y si el frame con las tablas también ocupa de alto más que la ventana, aparecerá otro scroll, ya serían dos scrolls, que para mi gusto demasiados. En el caso de los iframes, solo habría un scroll, ya sea motivado por el menú o las tablas .&lt;br&gt;
 Otro aspecto importante es que con iframes puedes usar el diseño en la página contenedora y que los iframes se acomoden a este diseño (por ejemplo, si el iframe contiene únicamente una tabla, tan solo es necesario dibujarla y no necesitas preocuparte de la imagen del fondo de la página, si es que la usas). Sin embargo, con los frames, debes acoplarlos para que el diseño no se descuadre.&lt;br&gt;
 Por último decir que los scripts generales de la aplicación deberían estar contenidos en la página principal y desde los iframes hacer referencia a las funciones mediante &lt;i&gt;parent.[nombre-funcion]()&lt;/i&gt;, centrando así toda la ejecución de procesos en un único sitio. Los scripts específicos de cada iframe si se deben introducir en la propia página, no sobrecargando así la página principal.&lt;br&gt;
 Supongo que se podría profundizar más en el tema, indicando pros y contras, citando otros casos, ... esto es tan solo un comienzo que espero ir ampliando.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113948567273144527?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113948567273144527/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113948567273144527' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113948567273144527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113948567273144527'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/uso-de-iframes-y-scripts-en-una.html' title='Uso de iframes y scripts en una aplicación web'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113942367759841596</id><published>2006-02-08T19:33:00.000+01:00</published><updated>2006-02-09T10:02:15.346+01:00</updated><title type='text'>Efecto de fundido en los enlaces</title><content type='html'>Anteriormente explicaba como se hacía un &lt;a href="http://displaynone.blogspot.com/2006/02/efecto-de-fundido.html"&gt;efecto de fundido&lt;/a&gt; en la página principal de &lt;a href="http://www.blogger.com"&gt;blogger&lt;/a&gt;. Y hoy voy a decir como se hace el marco donde están los enlaces.&lt;br&gt;
 &lt;center&gt;&lt;iframe src="http://mediamax.streamload.com/displaynone/Hosted/enlaces-fundido.html" frameborder="0" style="width: 330px; height: 150px"&gt;&lt;/iframe&gt;&lt;/center&gt;
 &lt;div id="11boton"&gt;&lt;a href="javascript:mostrar('11')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="11texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('11')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 El efecto de fundido es el mismo que el explicado en la entrada anterior, salvo el hecho de que el color inicial y el final se pasan por parámetros y no mediante variables globales y que se incluye un parámetro para saber en que fase de la animación me encuentro y poder llevar un control.&lt;br&gt;
 Es necesario disponer de un DIV que funciona como contenedor de otros DIV que son los que contienen los enlaces y que son los que se moverán para arriba o para abajo. Vuelvo a recordar que el motivo de que exista una capa contenedora es porque se le pone el estilo &lt;a href="http://www.w3.org/TR/REC-CSS2/visuren.html#choose-position"&gt;position: relative&lt;/a&gt; para que luego las capas que se hayan dentro se puedan mover gracias al estilo position: absolute.&lt;br&gt;
 &lt;div&gt;Contenedor&lt;div style="border: 1px dotted #315C7C; width: 300px; margin: 5px;"&gt;&lt;div style="border: 1px dotted #315C7C; width: 260px; margin: 5px;"&gt;Enlace 1&lt;/div&gt;&lt;div style="border: 1px dotted #315C7C; width: 260px; margin: 5px;"&gt;Enlace 2&lt;/div&gt;&lt;div style="border: 1px dotted #315C7C; width: 260px; margin: 5px;"&gt;Enlace 3&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
 Se van a repetir sucesivamente cuatro fases en la realización de este efecto:
 &lt;ul class="list"&gt;&lt;li&gt;Hacer fundido hasta el 30%&lt;/li&gt;&lt;li class="list"&gt;Mover el enlace superior a la parte inferior, mientras continúa el fundido y los otros dos enlaces se mueven hacia arriba&lt;/li&gt;&lt;li class="list"&gt;Cambiar el enlace inferior&lt;/li&gt;&lt;li class="list"&gt;Reiniciar los valores que se encuentran en el segundo enlace, este fue modificado cuando se creo y pasó del color de fondo al color de letra. Volver a empezar el proceso&lt;/li&gt;&lt;/ul&gt;
 Necesitaremos tres funciones nuevas, además de las ya creadas en el efecto de fundido:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;para poder mover las capas de los enlaces, las cuales en este caso está separadas 24 pixels
&lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Mueve una capa hasta cierta posición&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// descendentemente o ascendentemente&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function mover(id, pos, ascendente) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (pos &amp;gt;= 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = document.getElementById(id);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.zIndex = ascendente? '10':'5';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.top = (parseInt(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.top.replace(/px/, "")) - 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(velocidadSubir*(ascendente? 1: -1))) + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("mover('"+id+"', "+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(pos-velocidadSubir)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;", "+ascendente+")", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;velocidadMover);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;/li&gt;
&lt;li class="list"&gt;para realizar las distintas fases de la animación
&lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Lleva a cabo la animacion de las&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// capas que contienen los enlaces&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// en 4 fases. Cada fase, menos la &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// primera, debe esperar hasta que&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// acaba la anterior&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function animarEnlaces(i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (i == 1) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Fase 1: el div superior lo &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// difumino hasta un 30% &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fundido("enlace"+ 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces[(indice+0) % divEnlaces.length]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, 30, colorFondo, 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Lanzo la siguiente fase&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;animarEnlaces(2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (i == 2) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// No se ejecuta hasta que&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// la fase anterior no haya acabado&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!continuar[1]) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("animarEnlaces(2)", 10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Muevo la capa superior hacia abajo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// y las otras hacia arriba, mientras hago&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// un fundido de la capa que baja el &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// resto que no se realizó&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continuar[2] = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mover("enlace"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces[(indice+0) % 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces.length],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;46, false);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mover("enlace"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces[(indice+1) % 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces.length],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23, true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mover("enlace"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces[(indice+2) % 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces.length], 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23, true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fundido("enlace"+divEnlaces[(indice+0)%divEnlaces.length], 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;70, colorFondo, 2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Lanzo la siguiente fase&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;animarEnlaces(3);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (i == 3) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// No se ejecuta hasta que&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// la fase anterior no haya acabado&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!continuar[2]) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("animarEnlaces(3)", 10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continuar[3] = false;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cambio el enlace de la última&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// capa para que aparezca el siguiente&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// de la lista y pongo valores por &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// defecto.&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Hago que aparezca haciendo un &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// fundido del color de fondo al color&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// de la letra&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = document.getElementById(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"enlace"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces[(indice+0) % 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces.length]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.innerHTML = '&amp;lt;a href="'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlaces[posEnlace][0]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'" porc="30" style="color: '+  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorFondo + '"&amp;gt;'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlaces[posEnlace][1]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;/a&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;obj.childNodes.length; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.childNodes[i].setAttribute("color-texto", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RGBdecimal(obj.childNodes[i].style.color));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.childNodes[i].setAttribute("porc", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"100");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posEnlace = (posEnlace+1) % 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlaces.length;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fundido("enlace"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces[(indice+0)%divEnlaces.length],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'#315C7C', 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;indice++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;animarEnlaces(4);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (i == 4) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// No se ejecuta hasta que&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// la fase anterior no haya acabado&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!continuar[2]) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("animarEnlaces(3)", 10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = document.getElementById(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"enlace"+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divEnlaces[(indice+1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% divEnlaces.length]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;obj.childNodes.length; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.childNodes[i].setAttribute("porc", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"100");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.childNodes[i].setAttribute("color-texto", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RGBdecimal(color));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("animarEnlaces(1)", 1000);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;/li&gt;
 &lt;li class="list"&gt;para la creación de los enlaces y su colocación
&lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Situa las tres capas en sus posiciones &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// iniciales y luego llama a inicio de la &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// animación&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function crearEnlaces() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("enlace1").innerHTML = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;a href="'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlaces[posEnlace][0]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'" style="color: '+ color +'"&amp;gt;'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlaces[posEnlace][1]+'&amp;lt;/a&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("enlace1").style.top = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"1px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posEnlace++;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("enlace2").innerHTML = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;a href="'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlaces[posEnlace][0]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'" style="color: '+ color +'"&amp;gt;'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlaces[posEnlace][1]+'&amp;lt;/a&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("enlace2").style.top = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"25px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posEnlace++;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("enlace3").innerHTML = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;lt;a href="'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlaces[posEnlace][0]+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'" style="color: '+ color +'"&amp;gt;'+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enlaces[posEnlace][1]+'&amp;lt;/a&amp;gt;';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("enlace3").style.top = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"49px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posEnlace++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("animarEnlaces(1)", 200);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt; 
 &lt;/li&gt;&lt;/ul&gt;
 Puedes bajarte un ejemplo del código aquí: &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/enlaces-fundido.html"&gt;ARCHIVO&lt;/a&gt;
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113942367759841596?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113942367759841596/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113942367759841596' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113942367759841596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113942367759841596'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/efecto-de-fundido-en-los-enlaces.html' title='Efecto de fundido en los enlaces'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113931401887667293</id><published>2006-02-07T13:06:00.000+01:00</published><updated>2006-02-07T13:08:15.803+01:00</updated><title type='text'>Armonía de los colores</title><content type='html'>Gracias a mi amiga &lt;a href="http://labuenaletra.blogspot.com/"&gt;Belcha&lt;/a&gt; he conocido la teoría sobre la armonía de los colores, la cual nos puede ser de mucha ayuda a la hora de seleccionar los colores cuando diseñamos nuestra web.&lt;br&gt;
 Una defición de armonizar los colores puede ser la que se encuentra en &lt;a href="http://www.newsartesvisuales.com/funda/color5.htm"&gt;Interacciones del color: Armonía y Contraste&lt;/a&gt;:&lt;br&gt;
 &lt;blockquote&gt;Significa coordinar los diferentes valores que el color adquiere en una composición, es decir, cuando en una composición todos los colores poseen una parte común al resto de los colores componentes.&lt;/blockquote&gt;
 Cuando empiezo con el diseño de una página web suelo pensar primeramente en el color predominante: azul, marron, gris, ... y luego intento encontrar otra serie de colores con los que jugar. A veces es complicado encontrar esos otros colores, por lo que me he visto en la situación de cambiar el color principal, o estar bastante tiempo hasta que logro dar con unos colores adecuados. La armonización de colores nos facilita esta labor, y para ello lo hace mediante agrupaciones de colores:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Monocromáticos&lt;/li&gt;&lt;li class="list"&gt;Contraste&lt;/li&gt;&lt;li class="list"&gt;Triadas&lt;/li&gt;&lt;li class="list"&gt;Análogos&lt;/li&gt;&lt;li class="list"&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;center&gt;&lt;img src="http://mediamax.streamload.com/displaynone/Hosted/rueda-colores.png"&gt;&lt;/center&gt;&lt;br&gt;
 Una página que encontré que explicaba muy bien toda esta teoría es &lt;a href="http://www.desarrolloweb.com/articulos/1503.php?manual=47"&gt;Teoría del color. Propiedades de los colores&lt;/a&gt;, aunque yo me leería todo lo referente a los colores que explican. También debo decir que no hay que seguir esto al pie de la letra, porque si me ha ocurrido que el color que obtenía no era del todo bueno y tenía que modificarlo un poco para que me gustara (como me ha pasado cuando he diseñado display: NONE).&lt;br&gt;
 Hay varias aplicaciones (creo que todas de pago) que te facilitan la labor de "armonizar" tu web, dándote código HTML, capturando colores de imágenes, ... pero lo mejor que he encontrado es &lt;a href="http://wellstyled.com/tools/colorscheme2/index-en.html#"&gt;esta&lt;/a&gt; página web de &lt;a href="http://wellstyled.com"&gt;wellstyled.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113931401887667293?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113931401887667293/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113931401887667293' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113931401887667293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113931401887667293'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/armona-de-los-colores.html' title='Armonía de los colores'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113930536763979027</id><published>2006-02-07T10:42:00.000+01:00</published><updated>2006-02-07T15:29:11.076+01:00</updated><title type='text'>Efecto de fundido</title><content type='html'>Un efecto que me ha gustado de &lt;a href="http://www.blogger.com"&gt;Blogger&lt;/a&gt;, es ver como el texto se desvanece, hace un fundido al color del fondo. No me he puesto a mirar como lo hace, pero es algo sencillo, tan solo hay que cambiar tres colores progresivamente de un estado inicial a otro final: 
 &lt;ul class="list"&gt;&lt;li class="list"&gt;el color de texto (&lt;a href="http://www.w3.org/TR/2003/CR-css3-color-20030514/#foreground"&gt;color&lt;/a&gt;),&lt;/li&gt;&lt;li class="list"&gt;el color de fondo (&lt;a href="http://www.w3.org/TR/REC-CSS2/colors.html#propdef-background-color"&gt;background-color&lt;/a&gt;),&lt;/li&gt;&lt;li class="list"&gt;el color de los bordes (&lt;a href="http://www.w3.org/TR/REC-CSS1#border-color"&gt;border-color&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;
 &lt;center&gt;&lt;a target="fundido" href="http://mediamax.streamload.com/displaynone/Hosted/fundido.html"&gt;&lt;img src="http://mediamax.streamload.com/displaynone/Hosted/fundido.gif" style="border: 0px"&gt;&lt;/a&gt;&lt;br&gt;Imagen simulación&lt;/center&gt;
 &lt;div id="9boton"&gt;&lt;a href="javascript:mostrar('9')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="9texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('9')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 Lo importante es calcular cuales son los colores intermedios entre el color inicial y el color final. Para ello trabajamos en &lt;a href="http://es.wikipedia.org/wiki/RGB"&gt;RGB&lt;/a&gt; (como siempre se debería trabajar en HTML), pero no en hexadecimal, sino en decimal, para facilitar su uso.&lt;br&gt;
 Debemos tratar con cada componente (R, G, B) por separado porque cada cual es independiente. Para ello, primero calculamos la diferencia que hay en cada componente RGB entre el color final y el color inicial y se lo vamos añadiendo al color inicial. Por ejemplo, tenemos los dos colores predominantes de este blog: azul (#315C7C o rgb(49, 92, 124)) y el amarillo (#FFF3C9 o rgb(255, 243, 201)), la diferencia entre ambos será (206, 151, 77), esta diferencia la tendremos que dividir en varias partes iguales (por ejemplo 4), lo que nos daría (51.5, 37.75, 19.25) y se iremos sumando progresivamente al color inicial rgb(49, 92, 124).&lt;br&gt;
 &lt;table border="0" cellspacing="2" cellpadding="0"&gt;&lt;tr&gt;&lt;td style="width:100px; height: 100px; background: rgb(49, 92, 124)"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="width:100px; height: 100px; background: rgb(100, 128, 143)"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="width:100px; height: 100px; background: rgb(152, 167, 162)"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="width:100px; height: 100px; background: rgb(203, 205, 182)"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="width:100px; height: 100px; background: rgb(255, 243, 201)"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-size: 7pt;"&gt;rgb(49, 92, 124)&lt;/td&gt;&lt;td style="font-size: 7pt;"&gt;rgb(100, 128, 143)&lt;/td&gt;&lt;td style="font-size: 7pt;"&gt;rgb(152, 167, 162)&lt;/td&gt;&lt;td style="font-size: 7pt;"&gt;rgb(203, 205, 182)&lt;/td&gt;&lt;td style="font-size: 7pt;"&gt;rgb(255, 243, 201)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
  El resto que nos queda es sencillo, deberemos tratar de transformar los colores del objeto HTML que queremos (y de sus hijos, por si estos tienen distintos estilos). Para ello necesitaremos las siguientes funciones:&lt;br&gt;
  &lt;ul class="list"&gt;&lt;li class="list"&gt;una función que nos devuelva el valor RGB en formato decimal [&lt;a href="http://www.w3.org/TR/2003/CR-css3-color-20030514/#rgb-color"&gt;rgb(r, g, b)&lt;/a&gt;]  &lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Devuelve el valor rgb(n, n, n) de un &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// código RGB con formato #RRGGBB&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function RGBdecimal(rgb) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si es del tipo rgb(n, n, n) devuelve lo mismo,&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// en caso contrario lo transforma&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// &lt;a href="http://displaynone.blogspot.com/2006/02/mis-amigas-las-expresiones-regulares.html"&gt;Recuerda el uso de expresiones regulares&lt;/a&gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (rgb.match(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/^.*rgb\(\s*\d{1,3}\s*\,\s*\d{1,3}\s*\,\s*\d{1,3}\)\s*$/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return rgb;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var aux = rgb.substring(1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var valor = "rgb(";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;valor += parseInt(aux.substring(0,2), 16)+",";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aux = aux.substring(2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;valor += parseInt(aux.substring(0,2), 16)+",";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aux = aux.substring(2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;valor += parseInt(aux.substring(0,2), 16)+")";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rgb = valor;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return rgb;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;/li&gt;&lt;li class="list"&gt;una función que transforma porcentualmente un color en otro&lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Transforma el color de inicio al color de fin&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// en un porcentaje&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function transformaColor(_porc, colorIni, colorFin) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var porc = 100-parseInt(_porc);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Obtiene las componentes RGB del color de inicio&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var iniAux = colorIni.substring(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorIni.lastIndexOf("(")+1, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorIni.lastIndexOf(")"));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var coloresIni = iniAux.split(',');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Obtiene las componentes RGB del color de fin&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var finAux = colorFin.substring(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorFin.lastIndexOf("(")+1, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorFin.lastIndexOf(")"));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var coloresFin = finAux.split(',');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Calcula la diferencia entre&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// las componentes RGB del&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// color de inicio y el de fin&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var diferencias = new Array();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;coloresIni.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;diferencias[i] = parseInt(coloresFin[i]) - 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parseInt(coloresIni[i]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Añado el porcentaje al&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// color de inicio&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var rgb = "rgb(";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;coloresIni.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rgb += parseInt(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parseInt(coloresIni[i])+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(diferencias[i]*porc/100))+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(i==coloresIni.length-1? ")":",");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return rgb;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;/li&gt;&lt;li class="list"&gt;una función que trate todos los hijos recursivamente&lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Por cada hijo, guardo el color original&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// por si luego se quiere recuperar el&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// estilo, y empiezo a reducir los colores&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function tratarHijos(hijos) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;hijos.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si es un elemento HTML&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (hijos[i].nodeType == 1) { 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// La primera vez almaceno los valores&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!hijos[i].getAttribute("porc")) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].setAttribute("porc", "100");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (hijos[i].style.backgroundColor) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].setAttribute("color-fondo", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RGBdecimal(hijos[i].style.backgroundColor));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (hijos[i].style.borderColor) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].setAttribute("color-borde", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RGBdecimal(hijos[i].style.borderColor));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Si no hay color de texto le &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// ponemos por defecto negro&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!hijos[i].style.color) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].setAttribute("color-texto", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RGBdecimal(colorDefectoTexto));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].setAttribute("color-texto", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RGBdecimal(hijos[i].style.color));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Obtengo el porcentaje anterior&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var porc = parseInt(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].getAttribute("porc"));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (porc &amp;gt; 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Reducimos el porcentaje segun&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// el índice indicado&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;porc -= indiceDifuminado;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].setAttribute("porc", porc);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cambiamos el color de la letra&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].style.color = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transformaColor(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;porc, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].getAttribute("color-texto"), 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorFinal);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cambiamos el color de la letra&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (hijos[i].style.backgroundColor) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].style.backgroundColor = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transformaColor(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;porc, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].getAttribute("color-fondo"), 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorFinal);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (hijos[i].style.borderColor) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].style.borderColor = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transformaColor(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;porc, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hijos[i].getAttribute("color-borde"), 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorFinal);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tratarHijos(hijos[i].childNodes);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;/li&gt;&lt;li class="list"&gt;la función principal&lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code"&gt;// Empieza la efecución del fundido&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function fundido(cont) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (cont &amp;gt;= 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"contenedor");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tratarHijos(obj.childNodes);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("fundido("+(cont-indiceDifuminado)+")", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;velocidad);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;
También será necesario incluir ciertas variables globales:
&lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var colorFinal = RGBdecimal("#315C7C");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var indiceDifuminado = 10;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var velocidad = 50;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var colorDefectoTexto = "#000000";
&lt;/p&gt;
Un ejemplo del código se puede bajar aquí: &lt;a target="fundido" href="http://mediamax.streamload.com/displaynone/Hosted/fundido.html"&gt;ARCHIVO&lt;/a&gt;
  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113930536763979027?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113930536763979027/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113930536763979027' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113930536763979027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113930536763979027'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/efecto-de-fundido.html' title='Efecto de fundido'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113917798552885897</id><published>2006-02-05T23:07:00.000+01:00</published><updated>2006-02-05T23:19:45.540+01:00</updated><title type='text'>ColorZilla y MeasureIt para Firefox</title><content type='html'>Tanto a nivel usuario como a nivel desarrollador soy partidario de usar &lt;a href="http://www.difundefirefox.com/"&gt;Firefox&lt;/a&gt;. Uno de los motivos por lo que prefiero el Firefox frente al IE o el Opera es el uso de las &lt;a href="https://addons.mozilla.org/?application=firefox"&gt;extensiones&lt;/a&gt; que ofrece, son muchas y muy variadas y hacen que no solo la navegación, sino también desarrollar páginas web sea mejor.&lt;br&gt;
    En muchos otros blogs o incluso dentro de la página de Firefox, podrás encontrar cuales son las mejores o las más populares, pero gracias a mi amigo Carlos, he descubierto dos que son para mí imprescindibles: &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?id=271&amp;application=firefox"&gt;ColorZilla&lt;/a&gt; y &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?id=539&amp;application=firefox"&gt;MeasureIt&lt;/a&gt;.&lt;br&gt;
    &lt;ul class="list"&gt;
    &lt;li class="list"&gt;ColorZilla tiene varias funcionalidades, pero la verdad es que yo solo uso una, y es la de capturar los colores de la pantalla para así poder usarlos luego en los estilos. Los colores te los pueden dar en varios formatos: hexadecimal, texto, ... incluso puedes una vez seleccionado el color, elegir un parecido mediante una paleta.&lt;br&gt;
    &lt;center&gt;&lt;img src="http://static.flickr.com/11/95965056_30a98b08a7.jpg"&gt;&lt;/center&gt;&lt;/li&gt;
    &lt;li class="list"&gt;MeasureIt sirve para medir lo que ocupa en pixels la zona del documento que tu quieras. Imprescindible para cuando eres un metódico de las proporciones.&lt;br&gt;
    &lt;center&gt;&lt;img src="http://static.flickr.com/30/95965061_50c91f5eed.jpg"&gt;&lt;/center&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113917798552885897?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113917798552885897/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113917798552885897' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113917798552885897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113917798552885897'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/colorzilla-y-measureit-para-firefox.html' title='ColorZilla y MeasureIt para Firefox'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113909909954406746</id><published>2006-02-05T01:23:00.000+01:00</published><updated>2006-02-06T10:51:16.753+01:00</updated><title type='text'>Efecto de transición para una intro</title><content type='html'>Continuando con la batalla perdida contra el Flash, batalla amistosa, voy a explicar como hacer un efecto de transición que suele usarse en las intros de las web.&lt;br&gt;
 El efecto muestra una imagen dividida en mosaicos haciendo que estos emergen en la pantalla. Está claro que con Flash se pueden hacer mil cosas dentro de la misma animación, pero este efecto no ocupa casi nada y con cambiar ciertas variables, es aplicable a cualquier diseño que queráis.
 &lt;center&gt;&lt;img src="http://static.flickr.com/31/94934563_ca8f97e5ba.jpg" style="border: 0px"&gt;&lt;/center&gt;
 &lt;div id="7boton"&gt;&lt;a href="javascript:mostrar('7')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="7texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('7')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 La idea es sencilla, vamos a tener una capa que actúe como contenedor de otras capas. Esta capa tendrá como estilo imprescindible la posicion como relativa (&lt;a href="http://www.w3.org/TR/REC-CSS2/visuren.html#choose-position"&gt;&lt;i&gt;position: relative&lt;/i&gt;&lt;/a&gt;), con esto conseguimos que esta capa quede "anclada" a la página. Las capas que se hayen dentro del contenedor deberán tener el estilo &lt;i&gt;position: absolute&lt;/i&gt; para conseguir que todas las capas que se hayan dentro se superpongan unas a otras. El valor absolute es siempre relativo al &lt;a href="http://www.w3.org/TR/REC-CSS2/visuren.html#containing-block"&gt;bloque que la contenga&lt;/a&gt;, no al documento, solo será relativo al documento, cuando no esté dentro de otro bloque que tenga el valor relative en propiedad position.&lt;br&gt;
 Dentro del contenedor debe haber dos capas:
 &lt;ul class="list"&gt;
 &lt;li class="list"&gt;una que sea la imagen, que irá debajo (o bien incluyéndola antes en el documento HTML, o bien usando la propiedad &lt;a href="http://www.w3.org/TR/REC-CSS2/visuren.html#z-index"&gt;z-index&lt;/a&gt;)&lt;/li&gt;
 &lt;li class="list"&gt;otra capa que contenga los mosaicos que son los que tapan inicialmente la imagen y que luego van desapareciendo para mostrar la imagen&lt;/li&gt;
 &lt;/ul&gt;
 Los mosaicos se mostrarán distribuidos sobre la imagen creando una cuadricula y cada mosaico estará formada por cuatro capas (unas encima de las otras). ¿Por qué cuatro capas?, pues para conseguir que vaya desapareciendo el mosaico desde el centro. Este efecto se debe hacer mediante &lt;a href="http://www.w3.org/TR/REC-CSS2/visufx.html#clipping"&gt;clipping&lt;/a&gt; y no mediante el uso de máscaras (algo que no se puede hacer con estilos). Creo que la mejor forma de entender el por qué lo hago así es mediante esta simulación:&lt;br&gt;
  &lt;center&gt;&lt;img src="http://mediamax.streamload.com/displaynone/Hosted/efecto.gif"&gt;&lt;/center&gt;
  Ahora es fácil ver como una capa va desapareciendo de izquierda a derecha, la segunda de derecha a izquierda, la tercera de arriba a abajo y la última de abajo a arriba, con lo que se muestra el centro poco a poco.&lt;br&gt;
  Veamos lo que se necesita para crear este efecto.&lt;br&gt;
  Hemos hablado ya de las capas DIV, estas serían junto a sus estilos:
  &lt;p class="code"&gt;
  &amp;lt;STYLE&amp;gt;
  ...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#contenedor {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position: relative;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;/* Debe tener el tamaño de la imagen */&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width: 500px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height: 250px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border: 1px solid #315C7C;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#imagen {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position: absolute;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top: 0px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;left: 0px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#contImagen {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position: absolute;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top: 0px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;left: 0px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
  ...
  &amp;lt;/STYLE&amp;gt;
  ...
  &amp;lt;BODY onload="creaDIVs(); empiezaAnimacion();"&amp;gt;
  ...
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="contenedor"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="contImagen"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="imagen"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;
  ...
  &amp;lt;/BODY&amp;gt;

  &lt;/p&gt;
  Y ahora veamos el código Javascript que necesitamos, estará formado por unas variables globales que se usarán para que sea fácil de configurar, y también estará formado por una serie de funciones.&lt;br&gt;
  Las variables globales son las siguiente:
  &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// El tamaño total de la imágen&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var anchoTotal = 500;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var altoTotal = 250;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Longitud del lado del mosaico &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// (se supone que es cuadrado)&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var longLado = 50;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cuánto se va a ir reduciendo el mosaico cada vez&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var indiceReduccion = 5;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cada cuántos milisegundos se va a realizar &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// la reducción del mosaico&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var velocidadReduccion = 70;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cada cuanto se empieza con un nuevo mosaico&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var velocidadGeneral = 40;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// La URL de la imágen, &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// puede ser externa a nuestro servidor&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var urlImagen="lapiceros.jpg";

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Un array con todos los ids de los mosaicos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var divIds = new Array();
&lt;/p&gt;
&lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Crea la capa de mosaicos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Calcula cuantos mosaicos tiene que haber&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// vertical y horizontalmente y los crea&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// y va añadiendo a el contenedor de mosaicos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function creaDIVs() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var contenedor = document.getElementById("contenedor");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Dividimos en contenedor en mosaicos, &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;//los creamos y los vamos añadiendo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;altoTotal/longLado; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var j=0; j&amp;lt;anchoTotal/longLado; j++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Creamos 4 capas por cada mosaico&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var div0 = dameDIV(i, j, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contenedor.appendChild(div0);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var div1 = dameDIV(i, j, 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contenedor.appendChild(div1);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var div2 = dameDIV(i, j, 2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contenedor.appendChild(div2);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var div3 = dameDIV(i, j, 3);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contenedor.appendChild(div3);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Almacenamos el id del mosaico&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divIds[divIds.length] = div0.id.substring(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0, div0.id.length-2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Ahora añadimos la imagen a su contenedor, &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// para evitar que primero se cargue la imagen y &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// luego aparezcan los mosaicos&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var img = document.createElement("IMG");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.src=urlImagen;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img.id = "imagen";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("contImagen").appendChild(img);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Crea una nueva capa para un mosaico&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function dameDIV(i, j, n) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var div = document.createElement("DIV");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.id = "div"+i+"-"+j+"_"+n;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.position = "absolute";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.top = i*longLado+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.left = j*longLado+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.backgroundColor = "#315C7C";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.width = longLado+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.height = longLado+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.style.clip = "rect( auto auto auto auto )";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.setAttribute("porc", "100");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return div;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Modifica un mosaico, la unión de las cuatro capas, &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// una cantidad para así ir dando el efecto de despliegue&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function despliega(id) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var porc = document.getElementById(id+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"_0").getAttribute("porc");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (porc != "0") {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = document.getElementById(id+"_0");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nuevoPorc = parseInt(porc)-indiceReduccion;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se despliega de izq a der&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.clip = "rect(auto "+(nuevoPorc)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"px auto auto)";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setAttribute("porc", nuevoPorc);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = document.getElementById(id+"_1");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se despliega de der a izq&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nuevoPorc = parseInt(porc)-10;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.clip = "rect(auto auto auto "
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+(longLado-nuevoPorc)+"px)";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setAttribute("porc", nuevoPorc);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = document.getElementById(id+"_2");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se despliega de arriba a abajo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nuevoPorc = parseInt(porc)-10;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.clip = "rect("+(longLado-nuevoPorc)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"px auto auto auto)";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setAttribute("porc", nuevoPorc);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = document.getElementById(id+"_3");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Se despliega de abajo a arriba&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nuevoPorc = parseInt(porc)-10;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.style.clip = "rect(auto auto "+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(nuevoPorc)+"px auto)";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.setAttribute("porc", nuevoPorc);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Continuamos con el proceso&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("despliega('"+id+"')", 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;velocidadReduccion);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Elije un mosaico al azar de los que quedan &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// sin desplegar y lo anima&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function animar() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (divIds.length &amp;gt; 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Elije uno al azar&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var pos = parseInt(divIds.length*Math.random());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;despliega(divIds[pos]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Borra de la lista el que se acaba de &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// desplegar para que no se repita&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var aux = new Array();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;divIds.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (pos != i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aux[aux.length] = divIds[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divIds = aux;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Continuamos con el proceso&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("animar()", velocidadGeneral);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Antes de que se empiece hay que &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// comprobar que la imagen se ha cargado&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function empiezaAnimacion() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var img = document.getElementById("imagen");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!img.complete) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("empiezaAnimacion()", 100);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;animar();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
  &lt;/p&gt;
  Un ejemplo se puede encontrar aquí: &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/transicion.zip"&gt;ARCHIVO ZIP&lt;/a&gt;
  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113909909954406746?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113909909954406746/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113909909954406746' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113909909954406746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113909909954406746'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/efecto-de-transicin-para-una-intro.html' title='Efecto de transición para una intro'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113890636980869131</id><published>2006-02-02T19:50:00.000+01:00</published><updated>2006-02-02T21:30:24.720+01:00</updated><title type='text'>Cargador de imágenes</title><content type='html'>En la entrada &lt;a href="http://displaynone.blogspot.com/2006/02/barra-de-progreso.html"&gt;anterior&lt;/a&gt; comentaba como hacer una barra de progreso y no hay nada mejor que un caso práctico para que se pueda entender mejor.&lt;br&gt;
 Ver la página en blanco mientras se carga, suele ser algo que no nos gusta nada, y, depende de la persona, anima a dar repetidas veces al botón de refrescar. En el caso de una precarga de imágenes ocurre lo mismo, por lo que nos gustaría mostrar al visitante que estamos cargando las imágenes y que debe esperar un poco hasta que finalice.&lt;br&gt;
 &lt;center&gt;&lt;img src="http://static.flickr.com/29/94531792_74053b9fd3.jpg" style="border: 0px"&gt;&lt;/center&gt;
 &lt;div id="6boton"&gt;&lt;a href="javascript:mostrar('6')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="6texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('6')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 El procedimiento es sencillo, necesitaremos la &lt;a href="http://displaynone.blogspot.com/2006/02/barra-de-progreso.html"&gt;barra de progreso&lt;/a&gt; y crearnos un &lt;a href="http://displaynone.blogspot.com/2006/01/uso-de-atributos-para-acciones.html"&gt;atributo nuevo&lt;/a&gt; en las imagenes que vamos a precargar.&lt;br&gt;
 Tiene que haber una pequeña modificación en la función que se encarga de realizar el progreso, porque en este caso y no como en el simulador, obtenemos un tanto porciento de progreso que puede saltar de mucho en mucho. Por lo que tendremos que rellenar la barra de progreso en el cuadrado actual y en los anteriores:
 &lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function progreso(n) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (n&amp;gt;0 &amp;&amp; n&amp;lt;=100) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Calculo en que decena se encuentra&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var valor = parseInt(n/10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (valor != 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cambio el cuadrado de la decena &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// correspondiente y las anteriores &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// de vacio a lleno&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=1; i&amp;lt;=valor; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("pos"+i).className
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= "lleno";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cambio el porcentaje&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("texto").innerHTML 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= "Cargando datos ...&amp;lt;BR&amp;gt;"+n+"%";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
 A la hora de crearnos las imágenes tenemos que añadirle un atributo (&lt;i&gt;precarga="si"&lt;/i&gt;) para poder distinguir las imágenes que cuentan en la precarga y las que no tienen que ver en ella.
 &lt;p class="code"&gt;&amp;lt;img src="&lt;i&gt;[url]&lt;/i&gt;" precarga="si"&amp;gt;&lt;/p&gt;
 Solo nos falta crear un método que recupere todos los elementos IMG del documento, comprobar si son los que nos interesan (precarga="si") y mirar si se han contemplado (atributo &lt;a href="http://xulplanet.com/references/objref/HTMLImageElement.html"&gt;complete&lt;/a&gt;). También tendremos que llevar la cuenta de cuantas imágenes hay en total y cuantas están ya completas para poder saber el porcentaje.
  &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function compruebaCarga() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Recuperamos todas las imágenes&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var imgs = document.getElementsByTagName("IMG");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var cont=0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var comp=0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Recorremos todas las imagenes y&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// comprobamos si es para la precarga&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;imgs.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (imgs[i].getAttribute("precarga") == "si") {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cont++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (imgs[i].complete) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;comp++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;progreso(parseInt(100*comp/cont));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (cont != comp) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("compruebaCarga()", 10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
  Finalmente será necesario incluir el siguiente script para que se llame al método de comprobación de la carga de imágenes.
  &lt;p class="code"&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;compruebaCarga(0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;&lt;/p&gt;
Puede verse un ejemplo en el siguiente &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/carga-imagenes.zip"&gt;ARCHIVO&lt;/a&gt;
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113890636980869131?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113890636980869131/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113890636980869131' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113890636980869131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113890636980869131'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/cargador-de-imgenes.html' title='Cargador de imágenes'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113887682363302861</id><published>2006-02-02T11:40:00.000+01:00</published><updated>2006-02-03T13:06:21.816+01:00</updated><title type='text'>Barra de progreso</title><content type='html'>En algunas circustancias es necesario indicar al usuario que la página está cargando datos y que debe esperar, normalmente se usa para ello un GIF animado con una ruedas girando, dando la sensación de que está trabajando, otras se pone el reloj de arena llenandose, esto va según gustos. Pero al usuario muchas veces lo que le interesa saber es si el aviso de espera está allí sin más o realmente está haciendo algo, ¿avanza o está colgado?. Por eso las presentaciones iniciales en Flash suelen tener una barra de progreso que indica que se está cargando la animación.&lt;br&gt;
 En HTML también se puede hacer, queda muy vistoso y puede ser fundamental para que el usuario o el visitante no se meta en Google y busque otra página.
 &lt;center&gt;&lt;img src="http://static.flickr.com/15/94447292_e0bd5b3e69.jpg" style="border: 0px"&gt;&lt;/center&gt;
 &lt;div id="6boton"&gt;&lt;a href="javascript:mostrar('6')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="6texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('6')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;&lt;br&gt;
 Lo primero que se tiene que hacer es diseñar la barra de progreso, saber como va a actuar y dónde la vamos a usar. He creado un diseño sencillo, en el que aparece un texto, que podría ser modificable y un porcentaje que indica el progreso, debajo está la barra de progreso que se rellena mediante bloques y no de forma progresiva.
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div class="barra-progreso"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="texto" class="texto-progreso"&amp;gt;Cargando datos 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&amp;lt;br&amp;gt;0%&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos1" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos2" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos3" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos4" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos5" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos6" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos7" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos8" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos9" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="pos10" class="vacio"&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;/p&gt; 
 Está compuesto por dos partes, la primera es un DIV que contiene el texto y la segunda es un conjunto de DIVs que forma la barra de progreso, estos DIVs tiene estilo a nivel de &lt;a href="http://www.w3.org/TR/REC-CSS2/selector.html#class-html"&gt;class&lt;/a&gt; y a nivel de &lt;a href="http://www.w3.org/TR/REC-CSS2/selector.html#id-selectors"&gt;id&lt;/a&gt;. Mediante el class indicamos el formato, vacio o lleno, los colores, el borde, ... y mediante el id, a parte de poder referenciarlo, indicamos la posición horizontal.
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.barra-progreso {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width: 300px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height: 170px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text-align: left;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border: 1px solid #315C7C;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.texto-progreso {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width: 100%;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-family: Arial;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size: 25px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height: 70px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text-align: center;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding-top: 55px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding-bottom: 0px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-top: 5px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #315C7C;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background: url(espera.gif) no-repeat center top;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.vacio {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position: absolute;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width: 20px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height: 20px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border: 2px solid #315C7C;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background: #FFF3C9;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.lleno {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position: absolute;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width: 20px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height: 20px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border: 2px solid #315C7C;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background: #315C7C;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos1 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 17px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos2 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 44px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos3 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 71px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos4 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 98px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos5 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 125px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos6 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 152px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos7 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 179px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos8 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 206px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos9 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 233px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div#pos10 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 260px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;/p&gt;
 Una vez tenemos la barra de progreso, solo tenemos que hacerla funcionar. Se puede hacer de dos formas:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Cuando el proceso que se ejecuta es mediante Javascript (ej. un cálculo que dure mucho tiempo), se deberá incrementar el porcentaje durante la ejecución de ese proceso, llevando nosotros el control de qué cantidad debemos incrementar.&lt;/li&gt;&lt;li class="list"&gt;Cuando el proceso se ejecuta en el servidor y es costoso en tiempo, para avisar al usuario que se está cargando la página. Para ello es totalmente necesario que el código HTML de la barra de progreso se encuentre al principio del documento HTML, para así poder referenciar a sus objetos antes de que se cargue del todo la página. También se debe devolver código Javascript entre medias de la página que se está generando y que es el que incrementa el progreso, es fundamental que se vacie el flujo de salida para que el efecto de progreso sea el correcto, esto se puede hacer en PHP mediante la función &lt;a href="http://www.php.net/flush"&gt;flush&lt;/a&gt; o en Java mediante &lt;a href="http://java.sun.com/products/servlet/2.2/javadoc/javax/servlet/ServletResponse.html#flushBuffer()"&gt;flushBuffer&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
 El código necesario para incrementar el progreso es el siguiente:
 &lt;p class="code"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function progreso(n) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (n&amp;gt;0 &amp;&amp; n&amp;lt;=100) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Calculo en que decena se encuentra&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var valor = parseInt(n/10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (valor != 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cambio el cuadrado de la decena 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// correspondiente de vacio a lleno&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("pos"+valor).className &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= "lleno";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Cambio el porcentaje&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("texto").innerHTML = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"Cargando datos ...&amp;lt;BR&amp;gt;"+n+"%";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 &lt;/p&gt; 
 Un ejemplo del código lo podéis encontrar aquí (funciona en Firefox, IE y Opera para Windows): &lt;a href="http://mediamax.streamload.com/displaynone/Hosted/barra-de-progreso.zip"&gt;ARCHIVO ZIP&lt;/a&gt;
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113887682363302861?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113887682363302861/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113887682363302861' title='37 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113887682363302861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113887682363302861'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/barra-de-progreso.html' title='Barra de progreso'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>37</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113880228448174883</id><published>2006-02-01T14:57:00.000+01:00</published><updated>2006-02-02T12:41:50.016+01:00</updated><title type='text'>Mis amigas las expresiones regulares</title><content type='html'>Son imprescindibles para mí, si puedo usarlas, las uso, y si no puedo usarlas, me desespero. Las uso cuando programo siempre que puedo, en &lt;a href="http://www.regular-expressions.info/javascript.html"&gt;Javascript&lt;/a&gt; y &lt;a href="http://www.php.net/regex"&gt;PHP&lt;/a&gt; sobre todo, porque &lt;a href="http://java.sun.com/docs/books/tutorial/extra/regex/"&gt;Java&lt;/a&gt; las incluyó a partir de J2SE 1.4 y ¡oh, grandes misterios de la humanidad! no sé por qué se empeñan en mi trabajo en usar una versión anterior, con lo que me quedo sin poder hacer un simple replace en un String (que no sea a nivel de char, claro). Las uso en editores de texto: &lt;a href="http://www.pnotepad.org/"&gt;Programmers Notepad 2&lt;/a&gt; las usa bastante bien, aunque el mejor es &lt;a href="http://www.editplus.com"&gt;EditPlus 2&lt;/a&gt; (lo siento, no me gusta el &lt;a href="http://www.ultraedit.com/"&gt;UltraEdit&lt;/a&gt;).&lt;br&gt;
 ¿Qué son?, pues como dicen en la &lt;a href="http://es.wikipedia.org/wiki/Expresiones_regulares"&gt;Wikipedia&lt;/a&gt;:
 &lt;blockquote&gt;Una expresión regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje. [...] Una expresión regular es, a menudo llamada también patrón, es una expresión que describe un conjunto de cadenas sin enumerar sus elementos.&lt;/blockquote&gt;
 Esto es un tanto críptico, aunque es una gran definición, como toda la entrada en la Wikipedia. Pero para que se entienda mejor, yo preguntaría: ¿para qué se usan?, para trabajar con cadenas de texto.&lt;br&gt;
 &lt;div id="5boton"&gt;&lt;a href="javascript:mostrar('5')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="5texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('5')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;
 &lt;br&gt;
 Son agrupaciones de texto que representan varias cadenas de texto, suelen ir encerradas entre barras '/' en algunos lenguajes (Javascript, PHP, ...) y aunque a simple vista parece código encriptado, son fáciles de seguir. Se forman por la unión de texto normal (letras, numeros, signos, ...) y por operadores, que son cadenas de texto concretas que tienen un significado y una función.&lt;br&gt;
 Estos operadores son fijos y pueden modificar el significado, agrupar contenidos, dar altenativa a contenidos, ... Los más frecuentes son:&lt;br&gt;
 &lt;table cellspacing="0" cellpadding="0" border="0" style="margin: 0px; padding: 0px;"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Escapa los caracteres especiales para tratarlos como texto normal&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;.&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Representa a cualquier carácter&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;?&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;El elemento anterior es opcional&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;+&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;El elemento anterior se repite una o más veces&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;*&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;El elemento anterior no aparece, aparece o se repite varias veces&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;|&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Alternativa entre el carácter anterior y posterior&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;^&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Representa el inicio de línea&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;$&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Representa el fin de línea&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\s&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Representa un espacio en blanco&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\S&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Representa cualquier carácter menos un espacio en blanco&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\d&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Representa un dígito&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\D&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Representa cualquier carácter menos un dígito&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\w&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Representa un carácter alfanumérico&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\W&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Representa cualquier carácter menos uno alfanumérico&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\n&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Nueva línea&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\r&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Salto de línea&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Tabulador&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;{n}&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Indica que el caracter anterior se debe repetir &lt;i&gt;n&lt;/i&gt; veces&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;(..)&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Agrupa elementos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;[..]&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Conjunto de caracteres admitidos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;[^..]&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Conjunto de caracteres no admitidos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Crea un rango de valores entre el carácter anterior y el posterior&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
 Quizás con unos ejemplos se vea mejor:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Queremos representar las cadenas de texto &lt;i&gt;amigos&lt;/i&gt; y &lt;i&gt;amigo&lt;/i&gt;: &lt;span class="code"&gt;/amigo&lt;b&gt;s?&lt;/b&gt;/&lt;/span&gt;&lt;/li&gt;&lt;li class="list"&gt;Queremos representar el formato de fecha &lt;i&gt;DD/MM/AAAA&lt;/i&gt;: &lt;span class="code"&gt;/[0-9]{2}\/\d{2}\/[0-9]{4}/&lt;/span&gt;&lt;br&gt;&lt;i&gt;[0-9]&lt;/i&gt; representa un número del 0 al 9, &lt;i&gt;{2}&lt;/i&gt; indica que tiene que haber dos números, &lt;i&gt;\/&lt;/i&gt; representa la barra '/', &lt;i&gt;\d&lt;/i&gt; es lo mismo que [0-9]&lt;/li&gt;&lt;/ul&gt;
 Aplicaciones en el día a día:
 &lt;ul class="list"&gt;&lt;li class="list"&gt;Comprobar en una página web que el dato que se mete en un input es una fecha (DD/MM/YYYY) mediante Javascript:
 &lt;p class="code"&gt;
 function esFecha(texto) {
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var regexp = new RegExp("(([0-2][0-9])|(3[01]))\/((0[0-9])|(1[0-2]))\/\d{4}");
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return texto.match(regexp);
 }
 &lt;/p&gt;
 &lt;/li&gt;&lt;li class="list"&gt;Dividir un texto en partes usando como separador un espacio en blanco, un guión o un punto y coma:
 &lt;p class="code"&gt;$lista = split("[\s-;]", texto);&lt;/p&gt;
 &lt;/li&gt;&lt;li class="list"&gt;Realizar un trim a una cadena de texto en Javascript:
 &lt;p class="code"&gt;texto.replace(/(^\s*)|(\s*$)/g, "");&lt;/p&gt;
 &lt;/li&gt;&lt;/ul&gt;
 Espero que si desconocías las expresiones regulares, te hayan enganchado, y si ya las conocías, que sigas con ellas.
 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21556140-113880228448174883?l=displaynone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://displaynone.blogspot.com/feeds/113880228448174883/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21556140&amp;postID=113880228448174883' title='7 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113880228448174883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21556140/posts/default/113880228448174883'/><link rel='alternate' type='text/html' href='http://displaynone.blogspot.com/2006/02/mis-amigas-las-expresiones-regulares.html' title='Mis amigas las expresiones regulares'/><author><name>Luis</name><uri>http://www.blogger.com/profile/05645551426496693102</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21556140.post-113872108436282811</id><published>2006-01-31T16:24:00.000+01:00</published><updated>2006-02-02T09:24:59.556+01:00</updated><title type='text'>Presentación dinámica de imágenes</title><content type='html'>A veces queremos mostrar las fotografías que tenemos de una forma espectacular (o casi) y siempre pensamos en realizarlo mediante Flash. ¿Por qué no?, yo no soy muy amante del Flash, pero me parece bien que se use. Si tampoco eres fan del Flash o si prefieres hacerlo mediante DHTML, quizás te interese esta forma de realizarlo.&lt;br&gt;
 Se trata de mostrar las imágenes agrupadas de cinco en cinco (no más para que no quede saturada la página, aunque es válido para cualquier número de imágenes), moviéndose circularmente con perspectiva 3D, dando la posibilidad de parar el movimiento y aumentar o disminuir la velocidad de rotación.&lt;br&gt;
 &lt;center&gt;&lt;img src="http://static.flickr.com/42/94015523_5880e4204e.jpg"&gt;&lt;/center&gt;&lt;br&gt;
 &lt;div id="4boton"&gt;&lt;a href="javascript:mostrar('4')"&gt;Mostrar resto &gt;&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id="4texto" style="display: none"&gt;&lt;a href="#" onclick="javascript:ocultar('4')"&gt;&lt;&lt; Ocultar resto&lt;/a&gt;
 &lt;br&gt;
 Lo primero que necesitamos es un contenedor para colocar las imágenes, se va a usar una capa DIV y tendrá que tener posicionamiento absoluto para poder moverla libremente por la pantalla (&lt;a href="http://www.w3.org/TR/REC-CSS2/visuren.html#choose-position"&gt;position: absolute&lt;/a&gt;).
 &lt;p class="code"&gt;&amp;lt;DIV id="contenedor" style="position: absolute"&amp;gt;Cargando datos...&amp;lt;/DIV&amp;gt;
 &lt;span class="code-comment"&gt;&amp;lt;!-- El texto se pone para que aparezca algo mientras se cargan los datos --&amp;gt;&lt;/span&gt;&lt;/p&gt;
 Una vez creado el contenedor, tenemos que escribir un control para controlar la velocidad de rotación y para movernos entre las distintas páginas.
 &lt;p class="code"&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;table&amp;gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;tr&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td onclick="paginaAnterior()" style="cursor: hand; 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cursor:pointer"&amp;gt;&lt;&lt; ANTERIOR&amp;lt;/td&amp;gt; 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td onclick="reduce()" style="cursor: hand; 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cursor:pointer"&amp;gt;-&amp;lt;/td&amp;gt; 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td id=vel1 onclick="ponVelocidad(1)" style="cursor: 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hand; cursor:pointer"&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td id=vel4 onclick="ponVelocidad(4)" style="cursor: 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hand; cursor:pointer"&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td id=vel7 onclick="ponVelocidad(7)" style="cursor: 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hand; cursor:pointer"&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td id=vel10 onclick="ponVelocidad(10)" style="cursor: 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hand; cursor:pointer"&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td id=vel13 onclick="ponVelocidad(13)" style="cursor: 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hand; cursor:pointer"&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td id=vel16 onclick="ponVelocidad(16)" style="cursor: 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hand; cursor:pointer"&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td id=vel19 onclick="ponVelocidad(19)" style="cursor: 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hand; cursor:pointer"&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td onclick="aumenta()" style="cursor: 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hand; cursor:pointer"&amp;gt;+&amp;lt;/td&amp;gt; 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td onclick="paginaSiguiente()" style="cursor: 
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hand; cursor:pointer"&amp;gt;SIGUIENTE &gt;&gt;&amp;lt;/td&amp;gt; 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/tr&amp;gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/table&amp;gt;
 &lt;/p&gt;
 La primera y la última celda de la tabla son para ir a las páginas anteriores y siguientes. La segunda celda y la penúltima celda son para aumentar la velocidad o disminuirla. Las celdas intermedias para seleccionar directamente una velocidad.&lt;br&gt;
 Entremos en el código Javascript que se encarga del dinamismo de las fotografías, empezando por la definición de variables.
 &lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var evento;&lt;/p&gt;
 Necesitamos una variable para almacenar el identificador del proceso que ejecutamos repetitivamente para rotar las imágenes.
 &lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var velocidad=10;&lt;/p&gt;
 Almacenaremos la velocidad en un variable para que se pueda modificar.
 &lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nombreImagenes = new Array('1', '2', '3', '4', '5');&lt;/p&gt;
 Un array con los nombres de las imágenes, la extensión la tengo predeterminada como ".jpg". En este caso son 5 imágenes, pero puede haber más, el número es este porque más podrían saturar la página. Deben existir dos imágenes, &lt;i&gt;&amp;lt;nombre&amp;gt;.jpg&lt;/i&gt; y &lt;i&gt;g&amp;lt;nombre&amp;gt;.jpg&lt;/i&gt;, la primera imágen es la miniatura y la segunda es el original que se abrirá cuando se pulse en la imagen. El tamaño de las miniaturas no debe ser grande para evitar así que unas se tapen a otras mientras mientras giran.&lt;br&gt;
 &lt;p class="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var imagenes = new Array();&lt;/p&gt;
 Para almacenar las imagenes.&lt;br&gt;
 La primera función que vamos a usar es la que crea los objetos &lt;a href="http://www.devguru.com/technologies/ecmascript/QuickRef/image.html"&gt;Image&lt;/a&gt; y las posiciona en el contenedor. Deberá incluirse en el evento onload del BODY.
 &lt;p class="code"&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function carga() {
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Obtenemos el objeto DIV que contendrá las imágenes&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = document.getElementById("contenedor");

 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;/* Inicializamos cada imágen, dándole una posición 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fija, estilos, eventos: hacer que pare la rotacion 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cuando se pone encima el ratón, continuar 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;la rotación cuando se deja de poner el 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ratón en la imagen, abrir la imagen original 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cuando se pulsa en ella, ... */&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;nombreImagenes.length; i++) {
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i] = new Image();
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].src = nombreImagenes[i]+'.jpg';
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].style.top  = '100px';
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].style.left = '200px';
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].style.width = '100px';
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].style.height = '100px';
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].style.border = '1px solid black';
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].style.cursor = (IE)? "hand":"pointer";
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].onmouseover = parar;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].onmouseout = rotar;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].onclick = abre;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].angulo=0;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].ancho = tamImagenes[i][0];
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].alto = tamImagenes[i][1];
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagenes[i].comentario = comentarios[i];
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Calculamos la separación entre cada imagen&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var parte = 360/imagenes.length;

 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Posicionamos cada imagen&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (i=0; i&amp;lt;imagenes.length; i++) {
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;posiciona(imagenes[i], i*parte);
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Añadimos las imagenes al contenedor&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.innerHTML = "";
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0; i&amp;lt;imagenes.length; i++) {
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.appendChild(imagenes[i]);
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 &lt;/p&gt;
 La siguiente función es la que se encarga de posicionar la imagen dentro del contenedor, se calcula la posición izquierda, posición derecha, el ancho y el alto de la imagen y la posicion en la coordenada Z. Para hacer el efecto 3D es necesario cambiar el tamaño de la imagen para simular la profundidad.&lt;br&gt;
 &lt;p class="code"&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function posiciona(_obj, _parte) {
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Calculamos el ángulo de la circunferencia por la 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// que gira&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var parte = (_parte+_obj.angulo)*2*Math.PI/360;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_obj.angulo = (parseInt(_obj.angulo) + _parte) % 360;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_obj.style.position = "absolute";
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Posición dentro del eje Z (profundidad)&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_obj.style.zIndex = parseInt((200-40*Math.sin(parte)));
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Calculamos el ancho y el alto según la profundidad 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// (en este caso se trata de un cuadrado)&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ancho = parseInt((65-35*Math.sin(parte)));
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_obj.style.width = ancho+"px";
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_obj.style.height = ancho+"px";
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Calculamos la posicion vertical según el 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// ancho y el ángulo&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_obj.style.top = parseInt(
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(100-40*Math.sin(parte))
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-(ancho/2))+"px";
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="code-comment"&gt;// Calculamos la posicion horizontal según el 
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// ancho y el ángulo&lt;/span&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_obj.style.left = parseInt(
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((document.body.clientWidth/2)
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&am
