<?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>Coders.me &#187; jQuery</title>
	<atom:link href="http://www.coders.me//lang/en/category/web-html-js-css/javascript/jquery-code/feed" rel="self" type="application/rss+xml" />
	<link>http://www.coders.me/</link>
	<description>Blog de Informática y Programación</description>
	<lastBuildDate>Mon, 07 Dec 2009 18:48:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Buttons like Windows 7 with JS &amp; CSS</title>
		<link>http://www.coders.me//lang/en/web-html-js-css/javascript/mootools/buttons-like-windows-7-with-js-css</link>
		<comments>http://www.coders.me//lang/en/web-html-js-css/javascript/mootools/buttons-like-windows-7-with-js-css#comments</comments>
		<pubDate>Tue, 22 Sep 2009 03:00:20 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[buttons]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[sexy]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.coders.me/?p=439</guid>
		<description><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/general-48x48.jpg" width="48" height="48" alt="" title="CSS" /><br/><p>Hace rato que estoy usando Windows 7 como sistema operativo principal, y debo decir que APESTA tanto o más que Windows Vista, pero dejando de lado eso, en esta oportunidad les traigo un efecto bastante atractivo inspirándome en la nueva…</p>]]></description>
			<content:encoded><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/general-48x48.jpg" width="48" height="48" alt="" title="CSS" /><br/><p>Hace rato que estoy usando Windows 7 como sistema operativo principal, y debo decir que APESTA tanto o más que Windows Vista, pero dejando de lado eso, en esta oportunidad les traigo un efecto bastante atractivo inspirándome en la nueva &#8220;super barra de tareas&#8221; de Windows 7.</p>
<p>El efecto consiste en &#8220;una luz que sigue al mouse&#8221; mientras lo movemos sobre el botón, algo que no se puede apreciar en la siguiente imagen, pero que si lo podemos hacer con la <a href="http://www.coders.me/ejemplos/win7_buttons/mootools/">demo</a>.</p>
<p><a href="http://www.coders.me/ejemplos/win7_buttons/mootools/"><img src="http://www.coders.me/wp-content/uploads/2009/09/21-09-2009-12-57-54-a.m..png" alt="21-09-2009 12-57-54 a.m." title="21-09-2009 12-57-54 a.m." width="554" height="202" class="aligncenter size-full wp-image-440" /></a></p>
<div class="compatibilidad">
  <div class="estampilla"><img src="http://www.coders.me/wp-content/themes/coders-social/images/browsers/ie.png"/></div><div class="estampilla"><img src="http://www.coders.me/wp-content/themes/coders-social/images/browsers/ff.png"/></div><div class="estampilla"><img src="http://www.coders.me/wp-content/themes/coders-social/images/browsers/chrome.png"/></div><div class="estampilla"><img src="http://www.coders.me/wp-content/themes/coders-social/images/browsers/safari.png"/></div><br/><div class="estampilla desc">6, 7, 8</div><div class="estampilla desc">3.0, 3.5</div><div class="estampilla desc">3</div><div class="estampilla desc">4</div>
  </div>
<h2>Creando la maqueta</h2>
<p>La idea es la siguiente:<br />
<img src="http://www.coders.me/wp-content/uploads/2009/09/map.gif" alt="map" title="map" width="300" height="200" class="aligncenter size-full wp-image-441" /></p>
<pre class="brush: html;">
&lt;span class=&quot;win7&quot;&gt;
  &lt;div&gt;&lt;/div&gt;
  &lt;a href=&quot;#&quot;&gt;Button&lt;/a&gt;
&lt;/span&gt;
</pre>
<p>Pero para no ensuciar tanto el código HTML que tenemos que crear cada vez que queremos un botón, vamos a crear ese div por medio del javascript, de manera que nuestro código html real será el siguiente:</p>
<pre class="brush: html;">
&lt;span class=&quot;win7&quot;&gt;&lt;a href=&quot;#&quot;&gt;Button&lt;/a&gt;&lt;/span&gt;
</pre>
<h2>CSS Code</h2>
<pre class="brush: css;">
.win7
{
  font-family:&quot;Segoe UI&quot;, Arial, Helvetica, sans-serif;
  font-size:12px;

  position:relative;
  float:left;
  height:29px;
  width:100%;
  background:url('../images/nav-bg.png') repeat-x top left;
}

.win7 div
{
  position:absolute;
  top:0;
  left:0;
  width:100%;
  height:29px;
  background:url('../images/active1.png') no-repeat center;
  z-index:0;
}

.win7 a
{
  line-height:29px;
  text-align:center;
  display:block;
  position:relative;
  padding:0 25px;
  z-index:2;
}
</pre>
<p>Ahora vamos a darle bordes redondeados:</p>
<pre class="brush: css;">
span.win7
{
  width:auto;
  overflow:hidden;

  -moz-border-radius: 15px;
  -webkit-border-radius: 15px;
  border-radius: 15px;

  border:2px solid #deded2;
}
</pre>
<h2>MooTools code</h2>
<p>Iniciamos siempre despues de cargar el dom:</p>
<pre class="brush: js;">
window.addEvent('domready', function() {
</pre>
Internet Explorer 6 trabaja mal con el background, refrescándolo cada vez que el visitante mueve el mouse. <strong>&#8220;</strong>Afortunadamente<strong>&#8220;</strong> existe un hack para decirle a IE que &#8220;use el cache&#8221; y no vuelva a pedir la imagen que ya ha sido cargada:</p>
<pre class="brush: js;">
    if (Browser.Engine.trident4) {
      try { document.execCommand(&quot;BackgroundImageCache&quot;, false, true); }
      catch(err) {}
    }
</pre>
<p>Ahora vamos a recorrer el DOM en busca de todos los enlaces con la clase &#8220;win7&#8243;, y a cada enlace le agregamos el &#8220;div&#8221; y le asignamos el evento &#8220;mousemove&#8221; ajustando la posición del background relativo al mouse:</p>
<pre class="brush: js;">
    $$('.win7 a').each(function(el) {

      el.win7BG = new Element('div', {'styles':{'opacity':0}}).injectBefore(el);
      el.win7BG.set('morph', {'duration':300});

      el.addEvent('mousemove', function (ev) {
        el.win7BG.setStyle('background-position', - ((600/2) - (ev.event.layerX||ev.event.offsetX||0))+'px top');
      });
</pre>
<p>Lo siguiente es para agregarle el efecto &#8220;fade&#8221;, aunque no es el objetivo principal de este artículo, queda muy bonito:</p>
<pre class="brush: js;">
      el.addEvent('mouseenter', function (ev) {
        el.win7BG.morph({'opacity': 1});
      });

      el.addEvent('mouseout', function (ev) {
        el.win7BG.morph({'opacity': 0});
      });

    }); // end each

}); // end domready
</pre>
<p>Lo instalamos en nuestra página, agregando el siguiente código en el HEAD:</p>
<pre class="brush: html;">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/mootools/1.2.3/mootools-yui-compressed.js&quot;&gt;&lt;/script&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;js/win7.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;css/styles.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /&gt;
</pre>
<p>(acomoda las rutas a tu conveniencia).</p>
<h2>jQuery code</h2>
<p>Hacemos lo mismo que en mootools, sólo que con código de jQuery:
<pre class="brush: js;">
$(document).ready(function(){

  if ( document.all &amp;&amp; !window.opera &amp;&amp; !window.XMLHttpRequest &amp;&amp; $.browser.msie ) {
    // stupid jquery ie6 detection
      try { document.execCommand(&quot;BackgroundImageCache&quot;, false, true); }
      catch(err) {}
  }

  $('.win7 a').each(function() {
    var el = $(this);

    el.win7BG = $(document.createElement('div')).css({'opacity': 0});
    el.win7BG.insertBefore(el);

    el.mousemove(function(ev) {
      el.win7BG.css({'background-position' : -((600/2) - (ev.originalEvent.layerX||ev.originalEvent.offsetX||0))+'px top'});
    });

    el.hover(
      function() {
        el.win7BG.stop().animate({'opacity':1},300);
      },
      function() {
        el.win7BG.stop().animate({'opacity':0},300);
      }
    );

  });
});
</pre>
<p>Lo instalamos en el HEAD de nuestra página:</p>
<pre class="brush: html;">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;js/win7.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;css/styles.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /&gt;
</pre>
<p>(acomoda las rutas a tu conveniencia).</p>
<h2>Creando los Botones y el Menu</h2>
<p>Para crear un menu:</p>
<pre class="brush: html;">
&lt;ul class=&quot;win7&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Para crear un botón:</p>
<pre class="brush: html;">
&lt;span class=&quot;win7&quot;&gt;&lt;a href=&quot;#&quot;&gt;Button&lt;/a&gt;&lt;/span&gt;
</pre>
<p>He agregado más clases con diferentes colores que puedes ver en la demo, pero la técnica sigue siendo la misma.</p>
<h2>Demo</h2>
<p>Puedes ver la <a href="http://www.coders.me/ejemplos/win7_buttons/mootools/">demo en mootools</a> como la <a href="http://www.coders.me/ejemplos/win7_buttons/jquery/">demo en jQuery</a>.</p>
<div class="download" id="download">

      <p>Este artículo contiene los siguientes archivos:</p>
      <ul>
      <ul><li><a href='http://www.coders.me/wp-content/themes/coders-social/donar.php?modal=1&width=500&height=175&url=http%3A%2F%2Fwww.coders.me%2Fwp-content%2Fuploads%2F2009%2F09%2Fwin7_buttons.zip&titulo=Buttons+like+Windows+7+with+JS+%26%23038%3B+CSS' rel='sexylightbox'>http://www.coders.me/wp-content/uploads/2009/09/win7_buttons.zip</a></li></ul>
      </ul>

    </div>
]]></content:encoded>
			<wfw:commentRss>http://www.coders.me//lang/en/web-html-js-css/javascript/mootools/buttons-like-windows-7-with-js-css/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
