<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Historias de un Geek &#187; html</title>
	<atom:link href="http://albertein.com.mx/archives/tag/html/feed" rel="self" type="application/rss+xml" />
	<link>http://albertein.com.mx</link>
	<description>AlbertEin - Desvarios de una mente perturbada</description>
	<lastBuildDate>Wed, 30 Nov 2011 16:12:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Hagalo usted mismo: Efecto marquesina con Javascript</title>
		<link>http://albertein.com.mx/archives/611</link>
		<comments>http://albertein.com.mx/archives/611#comments</comments>
		<pubDate>Sat, 30 May 2009 18:28:47 +0000</pubDate>
		<dc:creator>AlbertEin</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[hagalo usted mismo]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://albertein.gamersla.net/?p=611</guid>
		<description><![CDATA[Recientemente m313n45 me pidio ayuda para hacer un efecto de marquesina con unas imágenes y al dar click sobre alguna de ellas se viera la versión completa, todo esto sin usar flash. Lo realice obviamente con Javascript + JQuery y a continuacion veremos paso a paso como lograrlo. Tambien pueden ver el ejemplo completo aquí [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript" language="javascript" src="/demos/jquery.js">
</script></p>
<p>Recientemente <a href="http://m313n45.gamersla.net">m313n45</a> me pidio ayuda para hacer un efecto de marquesina con unas imágenes y al dar click sobre alguna de ellas se viera la versión completa, todo esto sin usar flash. </p>
<p>Lo realice obviamente con Javascript + JQuery y a continuacion veremos paso a paso como lograrlo.</p>
<p><a href="http://albertein.gamersla.net/demos/marquee/index.html">Tambien pueden ver el ejemplo completo aquí</a></p>
<p>Las imágenes para las marquesina son 6, iniciamos con el markup de las imágenes.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;container&quot;&gt;
	&lt;img src=&quot;01.png&quot; alt=&quot;1&quot;/&gt;
	&lt;img src=&quot;02.png&quot; alt=&quot;2&quot;/&gt;
	&lt;img src=&quot;03.png&quot; alt=&quot;3&quot;/&gt;
	&lt;img src=&quot;04.png&quot; alt=&quot;4&quot;/&gt;
	&lt;img src=&quot;05.png&quot; alt=&quot;5&quot;/&gt;
	&lt;img src=&quot;06.png&quot; alt=&quot;6&quot;/&gt;
&lt;/div&gt;
&lt;div id=&quot;viewport&quot;&gt;
&lt;/div&gt;</pre></td></tr></table></div>

<p>Además ocupamos darle estilo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#container</span>
<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">hidden</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">400px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">64px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">border-style</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">solid</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#container</span> img
<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">relative</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">60px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">64px</span><span style="color: #00AA00;">;</span>	
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>overflow: hidden; hace que las imágenes que no quepan en el contenedor esten ocultas en ves de causar scrolling o un efecto similar, además hacemos las imágenes mas pequeñas y asignamos su posicion como relativa, lo cual sera útil a realizar la animación.</p>
<p>Hasta el momento esto se ve así:</p>
<style type="text/css">
#container1, #container2, #container3, #container4
{
	overflow: hidden;
	width: 400px;
	height: 64px;
	border-style: solid;
}
#container4 img
{
	position: relative;
	width: 60px;
	height: 64px;
	cursor: pointer;
}
#container1 img, #container2 img, #container3 img
{
	position: relative;
	width: 60px;
	height: 64px;	
}</p>
</style>
<div id="container1">
	<img src="/demos/marquee/01.png" alt="1"/><img src="/demos/marquee/02.png" alt="2"/><img src="/demos/marquee/03.png" alt="3"/><img src="/demos/marquee/04.png" alt="4"/><img src="/demos/marquee/05.png" alt="5"/><img src="/demos/marquee/06.png" alt="6"/>
</div>
<p>Notece que una de las imágenes se encuentra oculta de momento, debido a que no se alcanza a mostrar en el contenedor.</p>
<p>Después iniciamos con la animacion, requerimos a JQuery para facilitarnos las cosas, tendrán que agregar la referencia a la libreria en su header además de agregar el código de animación:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> deltaX <span style="color: #339933;">=</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> deltaT <span style="color: #339933;">=</span> <span style="color: #CC0000;">42</span><span style="color: #339933;">;</span>	
&nbsp;
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	setTimeout<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;animate()&quot;</span><span style="color: #339933;">,</span> deltaT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//start animation</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> animate <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> left <span style="color: #339933;">=</span> parseInt <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;left&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	left <span style="color: #339933;">-=</span> deltaX<span style="color: #339933;">;</span>
&nbsp;
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;left&quot;</span><span style="color: #339933;">,</span> left <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;px&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	setTimeout <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;animate()&quot;</span><span style="color: #339933;">,</span> deltaT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//continue animation</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Donde deltaT define cada cuantos milisegundos ocurrira la animacion y deltaX indica el desplazamiento cada intervalo de deltaT milisegundos. La animación la realizamos modificando la propiedad left del css. Ahora esto se ve así:</p>
<p><script type="text/javascript" language="javascript" src="/demos/marquee/script2.js"></script></p>
<div id="container2">
	<img src="/demos/marquee/01.png" alt="1"/><img src="/demos/marquee/02.png" alt="2"/><img src="/demos/marquee/03.png" alt="3"/><img src="/demos/marquee/04.png" alt="4"/><img src="/demos/marquee/05.png" alt="5"/><img src="/demos/marquee/06.png" alt="6"/>
</div>
<p>Pero para el momento en que ustedes lleguen a leerlo todas las imágenes habrán desaparecido hacia la izquierda, así que recarguen la pagina por favor y bajen rápidamente hasta este punto para ver la animación. </p>
<p>Eso ocurre por que ocupamos hacer que la marquesina sea giratoria, para lograr el efecto debemos de quitar la primer imagen cuando esta ya no sea visible y ponerla después de la ultima imagen. La primer imagen no es visible cuando su atributo css left tenga un valor de -LongitudImagen, en este caso, -60px. </p>
<p>Como quitaremos la imagen, ocupamos volver a ajustar el desplazamiento a la izquierda aumentando el atributo css left con la longitud de la imagen que quitamos, es decir 60px. El script queda entonces:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> deltaX <span style="color: #339933;">=</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> deltaT <span style="color: #339933;">=</span> <span style="color: #CC0000;">42</span><span style="color: #339933;">;</span>	
<span style="color: #003366; font-weight: bold;">var</span> imageWidth <span style="color: #339933;">=</span> <span style="color: #CC0000;">60</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	setTimeout<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;animate()&quot;</span><span style="color: #339933;">,</span> deltaT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//start animation</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> animate <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> left <span style="color: #339933;">=</span> parseInt <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;left&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	left <span style="color: #339933;">-=</span> deltaX<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>left <span style="color: #339933;">&lt;=</span> <span style="color: #339933;">-</span>imageWidth<span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//if first image is no longer visible</span>
	<span style="color: #009900;">&#123;</span>
		left <span style="color: #339933;">+=</span> imageWidth<span style="color: #339933;">;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img:first&quot;</span><span style="color: #009900;">&#41;</span>
                	.<span style="color: #660066;">remove</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
                	.<span style="color: #660066;">insertAfter</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img:last&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;left&quot;</span><span style="color: #339933;">,</span> left <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;px&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	setTimeout <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;animate()&quot;</span><span style="color: #339933;">,</span> deltaT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//continue animation</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Y ya podemos ver la animación circular:</p>
<p><script type="text/javascript" language="javascript" src="/demos/marquee/script3.js"></script></p>
<div id="container3">
	<img src="/demos/marquee/01.png" alt="1"/><img src="/demos/marquee/02.png" alt="2"/><img src="/demos/marquee/03.png" alt="3"/><img src="/demos/marquee/04.png" alt="4"/><img src="/demos/marquee/05.png" alt="5"/><img src="/demos/marquee/06.png" alt="6"/>
</div>
<p>Por ultimo requerimos que al dar click en una imagen la mostremos en su tamaño original, para dar el efecto de vinculo debemos de cambiar el css de las imágenes para que aparezca la &#8220;manita&#8221; cuando pongamos el puntero sobre la imagen, el css queda entonces:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#container</span>
<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">hidden</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">400px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">64px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">border-style</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">solid</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#container</span> img
<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">relative</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">60px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">64px</span><span style="color: #00AA00;">;</span>	
	<span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">pointer</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Solo nos falta el script, pero debemos de tener cuidado, por que cuando quitamos la imagen para ponerla al final de la lista perdemos la asociación del evento y tenemos que volverla agregar,por lo que el script final queda:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> deltaX <span style="color: #339933;">=</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> deltaT <span style="color: #339933;">=</span> <span style="color: #CC0000;">42</span><span style="color: #339933;">;</span>	
<span style="color: #003366; font-weight: bold;">var</span> imageWidth <span style="color: #339933;">=</span> <span style="color: #CC0000;">60</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span> <span style="color: #009900;">&#40;</span>changeViewportImage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	setTimeout<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;animate()&quot;</span><span style="color: #339933;">,</span> deltaT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//start animation</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> changeViewportImage <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#viewport img&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">remove</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#viewport&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">clone</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> animate <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> left <span style="color: #339933;">=</span> parseInt <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;left&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	left <span style="color: #339933;">-=</span> deltaX<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>left <span style="color: #339933;">&lt;=</span> <span style="color: #339933;">-</span>imageWidth<span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//if first image is no longer visible</span>
	<span style="color: #009900;">&#123;</span>
		left <span style="color: #339933;">+=</span> imageWidth<span style="color: #339933;">;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img:first&quot;</span><span style="color: #009900;">&#41;</span>
		    .<span style="color: #660066;">remove</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
		    .<span style="color: #660066;">insertAfter</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img:last&quot;</span><span style="color: #009900;">&#41;</span>
		    .<span style="color: #660066;">click</span> <span style="color: #009900;">&#40;</span>changeViewportImage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#container img&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;left&quot;</span><span style="color: #339933;">,</span> left <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;px&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	setTimeout <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;animate()&quot;</span><span style="color: #339933;">,</span> deltaT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//continue animation</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Y queda finalmente así (recuerden dar click sobre alguna imagen):<br />
<script type="text/javascript" lang="javascript" src="/demos/marquee/script4.js"></script></p>
<div id="container4">
	<img src="/demos/marquee/01.png" alt="1"/><img src="/demos/marquee/02.png" alt="2"/><img src="/demos/marquee/03.png" alt="3"/><img src="/demos/marquee/04.png" alt="4"/><img src="/demos/marquee/05.png" alt="5"/><img src="/demos/marquee/06.png" alt="6"/>
</div>
<div id="viewport4">
</div>
<p><a href="http://albertein.gamersla.net/demos/marquee/index.html">Tambien pueden ver el ejemplo completo aquí</a></p>
]]></content:encoded>
			<wfw:commentRss>http://albertein.com.mx/archives/611/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Parsing de HTML con HtmlAgilityPack</title>
		<link>http://albertein.com.mx/archives/209</link>
		<comments>http://albertein.com.mx/archives/209#comments</comments>
		<pubDate>Thu, 05 Feb 2009 19:38:07 +0000</pubDate>
		<dc:creator>AlbertEin</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[aprende]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://albertein.gamersla.net/?p=209</guid>
		<description><![CDATA[La web esta llena de información, todo tipo de información, desde el vídeo divertido mas irrelevante hasta noticias o documentos de verdadera importancia. Hay un mundo de información a la cual tu computadora esta unida por el cordón umbilical de tu cable de red, dispuesta a ser accesada y mostrada en tu pantalla a la [...]]]></description>
			<content:encoded><![CDATA[<p>La web esta llena de información, todo tipo de información, desde el vídeo divertido mas irrelevante hasta noticias o documentos de verdadera importancia. Hay un mundo de información a la cual tu computadora esta unida por el cordón umbilical de tu cable de red, dispuesta a ser accesada y mostrada en tu pantalla a la mas mínima orden tuya.</p>
<p><strong>Pero tiene un problema.</strong></p>
<p>Toda esta valiosa información se encuentra ofuscada en HTML, un lenguaje el cual a sido seriamente abusado durante el transcurso de los años, debido a que su especificación indica que los navegadores deben hacer lo mejor posible para corregir errores en el formateo de un documento, por lo que los usuarios terminaron en volverse descuidados, olvidando una etiqueta de cierre aquí y halla, al fin y al cabos el resultado es el mismo, ¿no?, los navegadores hacen todo lo posible por mostrar incluso los documentos mas mal formados.</p>
<p>Eso hace que hacer un programa para extraer información de un documento HTML pueda llegar a ser un poco complicado en ocasiones.</p>
<p><strong>HtmlAgilityPack to the rescue!</strong></p>
<p><a href="http://www.codeplex.com/htmlagilitypack">HtmlAgilityPack</a> es una librería para .NET que nos brinda un parser de HTML que nos permite leer, escribir y manipular documentos HTML y soporta Xpath, <a href="http://albertein.gamersla.net/archives/14">el cual discutí hace tiempo</a>. Y lo que lo hace realmente especial es que es increíblemente permisivo, soportando los documentos mas perversamente malformados que te puedes encontrar en tu navegación día a día.</p>
<p>HtmlAgilityPack combinado con <a href="https://addons.mozilla.org/es-ES/firefox/addon/1843">Firebug</a> nos permite extraer hasta la ultima gota de información requerida, y para no hacérselas larga pondré un par de ejemplos en el resto del post.</p>
<p><strong>Quiero obtener la lista de títulos del blog del AlbertEin</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    var client <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Net</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">WebClient</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    client<span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span> <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span><span style="color: #008000;">.</span><span style="color: #0000FF;">UTF8</span><span style="color: #008000;">;</span>
    var document <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> HtmlAgilityPack<span style="color: #008000;">.</span><span style="color: #0000FF;">HtmlDocument</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    document<span style="color: #008000;">.</span><span style="color: #0000FF;">LoadHtml</span><span style="color: #008000;">&#40;</span>client<span style="color: #008000;">.</span><span style="color: #0000FF;">DownloadString</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;http://albertein.gamersla.net&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span>HtmlAgilityPack<span style="color: #008000;">.</span><span style="color: #0000FF;">HtmlNode</span> node <span style="color: #0600FF; font-weight: bold;">in</span> 
        document<span style="color: #008000;">.</span><span style="color: #0000FF;">DocumentNode</span><span style="color: #008000;">.</span><span style="color: #0000FF;">SelectNodes</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;//a[@class='title']&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerHtml</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>Quiero obtener la lista de palabras listada en una web de un <a href="http://diccionario.babylon.com/Humanidades/Mitolog%C3%ADa/A/1">diccionario</a></strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    var url <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;http://diccionario.babylon.com/Humanidades/Mitolog%C3%ADa/A/1/&quot;</span><span style="color: #008000;">;</span>
    var client <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Net</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">WebClient</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    client<span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span> <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span><span style="color: #008000;">.</span><span style="color: #0000FF;">UTF8</span><span style="color: #008000;">;</span>
    var document <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> HtmlAgilityPack<span style="color: #008000;">.</span><span style="color: #0000FF;">HtmlDocument</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    document<span style="color: #008000;">.</span><span style="color: #0000FF;">LoadHtml</span><span style="color: #008000;">&#40;</span>client<span style="color: #008000;">.</span><span style="color: #0000FF;">DownloadString</span><span style="color: #008000;">&#40;</span>url<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span>HtmlAgilityPack<span style="color: #008000;">.</span><span style="color: #0000FF;">HtmlNode</span> node <span style="color: #0600FF; font-weight: bold;">in</span>
        document<span style="color: #008000;">.</span><span style="color: #0000FF;">DocumentNode</span><span style="color: #008000;">.</span><span style="color: #0000FF;">SelectNodes</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;//a[@class='words']&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerHtml</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>Quiero bajar todos los malditos comics de Penny Arcade</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    var url <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;http://www.penny-arcade.com/comic/1998/11/18/&quot;</span><span style="color: #008000;">;</span>
    var baseUrl <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;http://www.penny-arcade.com&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #6666cc; font-weight: bold;">bool</span> lastStrip <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
    var client <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Net</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">WebClient</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    client<span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span> <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span><span style="color: #008000;">.</span><span style="color: #0000FF;">UTF8</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>lastStrip<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        var document <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> HtmlAgilityPack<span style="color: #008000;">.</span><span style="color: #0000FF;">HtmlDocument</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        document<span style="color: #008000;">.</span><span style="color: #0000FF;">LoadHtml</span><span style="color: #008000;">&#40;</span>client<span style="color: #008000;">.</span><span style="color: #0000FF;">DownloadString</span><span style="color: #008000;">&#40;</span>url<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        var imageQuery <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/html/body/div[2]/div[3]/div/div[2]/img&quot;</span><span style="color: #008000;">;</span>
        var nextButtonQuery <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/html/body/div[2]/div[3]/div/div[3]/a[4]&quot;</span><span style="color: #008000;">;</span>
&nbsp;
        var imageUrl <span style="color: #008000;">=</span> document<span style="color: #008000;">.</span><span style="color: #0000FF;">DocumentNode</span><span style="color: #008000;">.</span>
            <span style="color: #0000FF;">SelectSingleNode</span><span style="color: #008000;">&#40;</span>imageQuery<span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Attributes</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;src&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Aquí iria el codigo para descargar la imagen que se encuentra en</span>
        <span style="color: #008080; font-style: italic;">//baseUrl + imageUrl</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Obtenemos la dirección del próximo comic</span>
&nbsp;
        url <span style="color: #008000;">=</span> baseUrl <span style="color: #008000;">+</span> document<span style="color: #008000;">.</span><span style="color: #0000FF;">DocumentNode</span><span style="color: #008000;">.</span>
            <span style="color: #0000FF;">SelectSingleNode</span> <span style="color: #008000;">&#40;</span>nextButtonQuery<span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Attributes</span> <span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;href&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span><span style="color: #008000;">;</span> 
&nbsp;
        lastStrip <span style="color: #008000;">=</span> url <span style="color: #008000;">==</span> baseUrl<span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// Llegamos al ultimo comic?</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Podría seguir así todo el día, pero supongo que con eso es suficiente para que capten la idea.</p>
<p><strong>¿Y tu, como lo has usado?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://albertein.com.mx/archives/209/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

