
<?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>Pietro Gaião</title>
	<atom:link href="http://www.pietrogaiao.com.br/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pietrogaiao.com.br/blog</link>
	<description>Javascript DOM, Tableless e XML</description>
	<lastBuildDate>Mon, 31 May 2010 13:20:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>CSS Sprites para fazer seu site carregar mais rápido</title>
		<link>http://www.pietrogaiao.com.br/blog/css-sprites-para-fazer-seu-site-carregar-mais-rapido/</link>
		<comments>http://www.pietrogaiao.com.br/blog/css-sprites-para-fazer-seu-site-carregar-mais-rapido/#comments</comments>
		<pubDate>Wed, 26 May 2010 02:48:59 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[Tableless]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[sprites]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=396</guid>
		<description><![CDATA[Um sprite é uma coleção de imagens colocadas em uma única imagem.
Uma página web com muitas imagens pode demorar muito tempo para carregar e gera várias solicitações de servidores.
Usando sprites irá reduzir o número de pedidos de servidor e salvar largura de banda.]]></description>
			<content:encoded><![CDATA[<p>Um sprite é uma coleção de imagens colocadas em uma única imagem.</p>
<p>Uma página web com muitas imagens pode demorar muito tempo para carregar e gera várias solicitações de servidores.</p>
<p>Usando sprites irá reduzir o número de pedidos de servidor.</p>
<p>Em vez de usar três imagens separadas, nós usamos esta imagem única (&#8220;img_navsprites.gif&#8221;):</p>
<p><a href="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/img_navsprites.gif"><img src="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/img_navsprites.gif" alt="" title="img_navsprites" width="134" height="44" class="alignnone size-full wp-image-397" /></a></p>
<p>Com CSS, podemos mostrar apenas a parte da imagem que nós precisamos.</p>
<p>No exemplo a seguir a CSS especifica qual parte do &#8220;img_navsprites.gif&#8221; devemos demonstrar:</p>
<p>Exemplo CSS:</p>
<pre escaped="true" lang="javascript" line="1">
&lt;style type="text/css"&gt;
    img.home{
      width:46px;
      height:44px;
      background:url(img_navsprites.gif) 0 0;
    }
&lt;/style&gt;</pre>
<p>HTML:</p>
<pre escaped="true" lang="javascript" line="1">
...
&lt;img src="img_trans.gif" class="home" /&gt;
...</pre>
<p>Explicação:</p>
<p>• &lt;img class=&#8221;home&#8221; src=&#8221;<strong>img_trans.gif</strong>&#8221; /&gt; &#8211; Nessa parte chamamos uma <strong>pequena imagem transparente</strong>, pois o atributo <strong>src não pode estar vazio</strong>.<br />
• width: 46px; height: 44px; &#8211; Define a parte da imagem que queremos utilizar<br />
• background: img_navsprites.gif (url) 0 0; &#8211; Define a posição da imagem (0px esquerda, 0px topo)</p>
<p>Esta é a maneira mais fácil de usar sprites, agora queremos expandi-lo por links usando e efeitos hover.</p>
<h2>Como criar uma lista de navegação?</h2>
<p>Queremos usar a imagem do sprite (&#8220;img_navsprites.gif&#8221;) para criar um sistema de navegação lista.</p>
<p>Nós vamos utilizar uma lista de HTML:</p>
<p>Exemplo CSS:</p>
<pre escaped="true" lang="css" line="1">
&lt;style type="text/css"&gt;

	#navlist{
	position:relative;
	}

	#navlist li{
	margin:0;
	padding:0;
	list-style:none;
	position:absolute;
	top:0;
	height:44px;
	display:block;
	}

	#home{
	left:0px;
	width:46px;
	background:url('img_navsprites.gif') 0 0;
	}

	#prev{
	left:63px;
	width:43px;
	background:url('img_navsprites.gif') -47px 0;
	}

	#next{
	left:129px;
	width:43px;
	background:url('img_navsprites.gif') -91px 0;
	} 

&lt;/style&gt;</pre>
<p>Exemplo HTML:</p>
<pre escaped="true" lang="javascript" line="1">
...
&lt;ul id="navlist"&gt;
	&lt;li id="home"&gt;&lt;img src="img_trans.gif" /&gt;&lt;/li&gt;
	&lt;li id="prev"&gt;&lt;img src="img_trans.gif" /&gt;&lt;/li&gt;
	&lt;li id="next"&gt;&lt;img src="img_trans.gif" /&gt;&lt;/li&gt;
&lt;/ul&gt;
...</pre>
<p>Explicação:</p>
<p>• #navlist {position:relative;} &#8211; Posição é definida como relativo para permitir posicionamento absoluto dentro dele<br />
• #navlist li {margin:0; padding:0; list-style:none; position:absolute; top:0;} &#8211; Margin e padding é definido como 0, o estilo de lista com aquelas bolinhas são removidas, e todos os itens da lista são posicionamento absoluto.<br />
• #navlist li {height:44px; display:block;} &#8211; A altura de todos as imagens são 44px</p>
<p>Agora começa a posição e estilo de cada parte específica:</p>
<p>• #home {left:0px; width:46px;background:url(img_navsprites.gif) 0 0;} &#8211; Posicionado a primeira imagem com 0px de distância da base esquerda, a largura é 46px e define o fundo da imagem e sua posição (0px esquerda, 0px topo)</p>
<p>• #prev {left:63px; width:43px;background:url(img_navsprites.gif) -47px 0;} &#8211; Posicionado a segunda imagem com 63px de distância da base esquerda, a largura é de 43px e definimos o fundo -47px para pegar a próxima imagem da direita.</p>
<p>• #next{left:129px; width:43px;background:url(img_navsprites.gif) no-repeat -91px 0;} &#8211; Posicionado a terceira imagem com 129px de distância da base esquerda, a largura é 43px e definimos o fundo -91px para pegar a próxima imagem da direita.</p>
<h2>Como usar Sprites &#8211; Efeito Hover</h2>
<p>Agora queremos adicionar um efeito de hover em nossa lista de navegação.</p>
<p>Nossa nova imagem (&#8220;img_navsprites_hover.gif&#8221;) contém três imagens de navegação e três imagens a utilizar para efeitos: hover</p>
<p><a href="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/img_navsprites_hover.gif"><img src="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/img_navsprites_hover.gif" alt="" title="img_navsprites_hover" width="134" height="89" class="alignnone size-full wp-image-398" /></a></p>
<p>Por esta ser uma única imagem, e não seis arquivos separados, não haverá atraso no carregamento quando um usuário parar o mouse  sobre a imagem.</p>
<p>Vamos só adicionar o estilo abaixo no css anterior para adicionar o efeito :hover</p>
<pre escaped="true" lang="css" line="1">
...
	#home:hover{
	background: url('img_navsprites_hover.gif') 0 -45px;
	}

	#prev:hover{
	background: url('img_navsprites_hover.gif') -47px -45px;
	}

	#next:hover{
	background: url('img_navsprites_hover.gif') -91px -45px;
	}
...</pre>
<p>Explicação:</p>
<p>• Podemos usar a pseudo-classe <strong>:hover</strong>.<br />
• #home:hover{background: transparent url(img_navsprites_hover.gif) 0 -45px;} &#8211; Para todas as três imagens que o usuário para com o mouse em cima especificaremos a posição de fundo e 45px apenas mais abaixo.</p>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=396&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/css-sprites-para-fazer-seu-site-carregar-mais-rapido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como detectar o Browser com Javascript</title>
		<link>http://www.pietrogaiao.com.br/blog/deteccao-de-browser/</link>
		<comments>http://www.pietrogaiao.com.br/blog/deteccao-de-browser/#comments</comments>
		<pubDate>Mon, 24 May 2010 16:54:22 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[JavaScript DOM]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=391</guid>
		<description><![CDATA[Quase tudo neste tutorial funciona em todos os browsers JavaScript habilitado. No entanto, existem algumas coisas que simplesmente não funcionam em determinados navegadores - especialmente em navegadores mais antigos.

Às vezes pode ser útil detectarmos o navegador do visitante e, em seguida servi-lo com uma informações adequadas.]]></description>
			<content:encoded><![CDATA[<h2>Vamos ver um exemplo de script para detectar o navegador ie6.</h2>
<p>Quase tudo neste tutorial funciona em todos os browsers JavaScript habilitado. No entanto, existem algumas coisas que simplesmente não funcionam em determinados navegadores, especialmente em navegadores mais antigos.</p>
<p>Às vezes pode ser útil detectarmos o navegador do visitante e, em seguida servi-lo com uma informação adequada.</p>
<p>A melhor maneira de fazer isso é fazer com que sua página web seja inteligente o suficiente para detectar qual browser o usuário está usando, ou então, a outra maneira seria o usuário trocar de navegadores. rsrs!</p>
<p>O objeto <strong>navigator</strong> contém todas as informações sobre o navegador do visitante, nome, versão e muito mais.</p>
<p>No exemplo abaixo iremos detectar se o usuário está usando um browser antigo (ie6). Caso ele esteja usando iremos move-lo para outra página, ou podemos também envia-lo uma mensagem.</p>
<p>No exemplo abaixo iremos redireciona-lo para outra página.</p>
<pre escaped="true" lang="javascript" line="1">&lt;script type="text/javascript"&gt;

	var browser = navigator.appName;
	var ver = navigator.appVersion;
	var thestart = parseFloat(ver.indexOf("MSIE"))+1;
	var brow_ver = parseFloat(ver.substring(thestart+4,thestart+7));

	if ((browser=="Microsoft Internet Explorer") &amp;&amp; (brow_ver &lt; 7)){
	  window.location="http://www.seusite.com.br/index_ie6.php";
	}              

&lt;/script&gt;
</pre>
<p>Observamos que após pegar-mos o nome do navegador, tivemos que pegar também a versão.</p>
<pre escaped="true" lang="javascript" line="1">
var browser = navigator.appName;</pre>
<pre escaped="true" lang="javascript" line="1">
var ver = navigator.appVersion;
var thestart = parseFloat(ver.indexOf("MSIE"))+1;
var brow_ver = parseFloat(ver.substring(thestart+4,thestart+7));</pre>
<p>emitimos então uma condição. Se o browser for <strong>Microsoft Internet Explorer</strong> e <strong>versão menor que 7</strong>, direcionaremos o usuário para outra página.</p>
<pre escaped="true" lang="javascript" line="1">
if ((browser=="Microsoft Internet Explorer") &amp;&amp; (brow_ver &lt; 7)){
     window.location="http://www.seusite.com.br/index_ie6.php";
}</pre>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=391&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/deteccao-de-browser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como criar imagens transparentes com CSS ?</title>
		<link>http://www.pietrogaiao.com.br/blog/como-criar-imagens-transparentes-com-css/</link>
		<comments>http://www.pietrogaiao.com.br/blog/como-criar-imagens-transparentes-com-css/#comments</comments>
		<pubDate>Mon, 24 May 2010 13:47:36 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[Tableless]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Transparentes]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=380</guid>
		<description><![CDATA[Vamos ver como criar imagens transparentes com CSS. Para aqueles que ainda tem dúvidas de como deixar uma imagem transparente, vai aí uma dica. Fiz uns testes, esse CSS funciona em todos os navegadores.]]></description>
			<content:encoded><![CDATA[<p><strong>Vamos ver como podemos criar imagens transparentes com CSS. </strong></p>
<p>Fiz uns testes, esse CSS funciona em todos os navegadores.</p>
<p>Veja um exemplo de como ficarão as imagens:</p>
<p>Imagem original:<br />
<a href="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/brasil.jpg"><img class="alignnone size-full wp-image-381" title="brasil" src="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/brasil.jpg" alt="" width="200" height="150" /></a></p>
<p>Imagem com transparência:<br />
<a href="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/brasil-2.jpg"><img class="alignnone size-full wp-image-382" title="brasil-2" src="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/brasil-2.jpg" alt="" width="200" height="150" /></a></p>
<p>Olhe como ficou o código fonte:</p>
<pre escaped="true" lang="javascript" line="1">&lt;img src="brasil.jpg" width="150" height="113" alt="brasil"
style="opacity:0.4;filter:alpha(opacity=40)" /&gt;</pre>
<p>O Firefox usa a propriedade <strong>opacity:x</strong> de transparência, enquanto usa o IE filter:<strong>alpha(opacity=x)</strong>.</p>
<p>No Firefox <strong>(opacity:x)</strong> x pode ser um valor 0.0 &#8211; 1.0. Um valor mais baixo faz com que o elemento fique mais transparente.</p>
<p>No IE <strong>(alpha(opacity=x))</strong> x pode ser um valor de 0 &#8211; 100. Um valor mais baixo faz com que o elemento fique mais transparente.</p>
<h2>Como colocar texto em uma caixa transparente com CSS</h2>
<p><a href="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/brasil-3.jpg"><img src="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/brasil-3.jpg" alt="" title="brasil-3" width="400" height="220" class="alignnone size-full wp-image-383" /></a></p>
<p>O código-fonte fica assim:</p>
<pre escaped="true" lang="javascript" line="1">
&lt;html&gt;
&lt;head&gt;
&lt;style type="text/css"&gt;
div.background
  {
  width: 500px;
  height: 250px;
  background: url (brasil.jpg) repeat;
  border: 2px preta sólida;
  }
div.transbox
  {
  width: 400px;
  height: 180px;
  margin: 50px 30px;
  background-color: # ffffff;
  border: 1px preto sólido;
  / * Para * IE /
  filter: alpha (opacity = 60);
  / * Padrão CSS3 /
  opacidade: 0,6;
  }
p div.transbox
  {
  margin: 40px 30px;
  font-weight: bold;
  color: # 000000;
  }
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

class="background"&gt; &lt;div
class="transbox"&gt; &lt;div
&lt;p&gt; Este é um texto que é colocado na caixa transparente.
Este é um texto que é colocado na caixa transparente.
Este é um texto que é colocado na caixa transparente.
Este é um texto que é colocado na caixa transparente.
Este é um texto que é colocado na caixa transparente.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Primeiro, criamos um elemento div <strong>(class = &#8220;background&#8221;)</strong>, com uma altura e largura fixa, uma imagem de fundo, e uma borda. Então vamos criar um pequeno div <strong>(class = Transbox &#8220;)</strong> dentro do elemento div primeiro. Isso também tem um div com largura fixa, um fundo imagem e uma borda.</p>
<p>Dentro da div transparente, adicionaremos algum texto dentro.</p>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=380&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/como-criar-imagens-transparentes-com-css/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>O modelo Box CSS</title>
		<link>http://www.pietrogaiao.com.br/blog/o-modelo-box-css/</link>
		<comments>http://www.pietrogaiao.com.br/blog/o-modelo-box-css/#comments</comments>
		<pubDate>Tue, 18 May 2010 15:07:57 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[Tableless]]></category>
		<category><![CDATA[Box]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=349</guid>
		<description><![CDATA[Todos os elementos HTML podem ser considerados como caixas. Em CSS, esse modelo é usado quando se fala de design e layout.

O modelo de caixa de CSS é essencialmente uma caixa que envolve elementos HTML, e é constituída por: <strong>margens, bordas, padding e conteúdo real</strong>.

O modelo de caixa nos permite colocar uma borda em torno de elementos e elementos do espaço em relação a outros elementos ...]]></description>
			<content:encoded><![CDATA[<p>Todos os elementos HTML podem ser considerados como caixas. Em CSS, esse modelo é usado quando se fala de design e layout.</p>
<p>O modelo de caixa de CSS é essencialmente uma caixa que envolve elementos HTML, e é constituída por: <strong>margens, bordas, padding e conteúdo real</strong>.</p>
<p>O modelo de caixa nos permite colocar uma borda em torno de elementos e elementos do espaço em relação a outros elementos.</p>
<p>A imagem abaixo ilustra o modelo de caixa:</p>
<p><a href="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/box-model.gif"><img title="box-model" src="http://www.pietrogaiao.com.br/blog/wp-content/uploads/2010/05/box-model-300x161.gif"  /></a></p>
<p></p>
<p>Explicação das diferentes partes:</p>
<ul>
<li><strong>Margin</strong> &#8211; Limpa uma área em torno da fronteira. A margem não  cor de fundo, e é completamente transparente</li>
<li><strong>Border</strong> &#8211; A fronteira que se situa em torno do   preenchimento e conteúdo. O  fronteira é afetado pela cor de fundo da caixa</li>
<li><strong>Padding</strong> &#8211; Limpa uma área em torno do conteúdo. O  padding é afetado pela cor de fundo da caixa</li>
<li><strong>Content</strong> &#8211; O conteúdo da caixa, onde o texto e as imagens   aparecem</li>
</ul>
<p>A fim de definir a largura ea altura de um elemento corretamente em todos os browsers, você precisa saber como funciona o modelo de caixa.</p>
<h2>Largura e altura de um elemento</h2>
<p><strong>Importante: </strong>Quando você especificar as propriedades width e   altura de um  elemento com CSS, você  são apenas definir a largura e altura da área de conteúdo. Para saber o   tamanho total  do elemento, você também deve adicionar o padding, borda e margem.</p>
<p>A largura total do elemento no exemplo a seguir é 300px:</p>
<pre escaped="true" lang="javascript" line="1">width:250px;
padding:10px;
border:5px solid gray;
margin:10px;</pre>
<p>Vamos fazer as contas:</p>
<p>250px (largura)<br />
+ 20px (esquerda e direita padding)<br />
+ 10px (esquerda e direita border)<br />
+ 20px (margem esquerda e direita)<br />
= 300px</p>
<p>Imagine que você só tinha 250px de espaço. Vamos fazer um elemento   com um total  largura de 250px:</p>
<pre escaped="true" lang="javascript" line="1">width:220px;
padding:10px;
border:5px solid gray;
margin:0px;</pre>
<h2>Problema de Compatibilidade de navegadores</h2>
<p>Se você testou o exemplo anterior do Internet Explorer, você viu que  a largura total não era exatamente 250px.</p>
<p>IE inclui padding e borda na largura, quando a propriedade largura é  conjunto, <strong>a menos que um DOCTYPE é declarada</strong>.</p>
<p>Para corrigir esse problema, basta adicionar um DOCTYPE para  o código:</p>
<pre escaped="true" lang="javascript" line="1">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;style type="text/css"&gt;
div.ex
{
width:220px;
padding:10px;
border:5px solid gray;
margin:0px;
}
&lt;/style&gt;
&lt;/head&gt;</pre>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=349&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/o-modelo-box-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cookies &#8211; JavaScript</title>
		<link>http://www.pietrogaiao.com.br/blog/cookies-em-javascript/</link>
		<comments>http://www.pietrogaiao.com.br/blog/cookies-em-javascript/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 02:20:29 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[JavaScript DOM]]></category>
		<category><![CDATA[Cookies JavaScript]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=282</guid>
		<description><![CDATA[Código implementado em forma de funções.

O código será composto por três funções:
GerarCookie(strCookie, strValor, lngDias);
LerCookie(strCookie);
ExcluirCookie(strCookie);
]]></description>
			<content:encoded><![CDATA[<p>Código implementado em forma de <code>funções</code>.</p>
<p>O código será composto por três funções:<br />
- GerarCookie(strCookie, strValor, lngDias);<br />
- LerCookie(strCookie);<br />
- ExcluirCookie(strCookie);</p>
<pre escaped="true"><code>Exemplo:
<span id="coment">
//Cria o cookie 'CookieTeste' com o valor 'HellowWorld!'
//que irá expirar quando o browser for fechado.
</span>
GerarCookie('CookieTeste', 'HellowWorld!', 0);
<span id="coment">
// Lê o conteúdo armazenado no cookie.
</span>
LerCookie('CookieTeste');
<span id="coment">
// Exclúi o cookie.
</span>
ExcluirCookie('CookieTeste');

<span id="coment">
//Função para criar o cookie.
//Para que o cookie seja destruído quando o brawser
//for fechado, basta passar 0 no parametro lngDias.
</span>

function GerarCookie(strCookie, strValor, lngDias)
{
var dtmData = new Date();
if(lngDias)
{
dtmData.setTime(dtmData.getTime() + (lngDias * 24 * 60 * 60 * 1000));
var strExpires = "; expires=" + dtmData.toGMTString();
}
else
{
var strExpires = "";
}
document.cookie = strCookie + "=" + strValor + strExpires + "; path=/";
}

<span id="coment">// Função para ler o cookie.</span>
function LerCookie(strCookie)
{
var strNomeIgual = strCookie + "=";
var arrCookies = document.cookie.split(';');
for(var i = 0; i &lt; arrCookies.length; i++)
{
var strValorCookie = arrCookies[i];
while(strValorCookie.charAt(0) == ' ')
{
strValorCookie = strValorCookie.substring(1, strValorCookie.length);
}
if(strValorCookie.indexOf(strNomeIgual) == 0)
{
return strValorCookie.substring(strNomeIgual.length, strValorCookie.length);
}
}
return null;
}

<span id="coment">// Função para excluir o cookie desejado.</span>
function ExcluirCookie(strCookie)
{
GerarCookie(strCookie, '', -1);
}
</code>
</pre>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=282&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/cookies-em-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mover div na horizontal pelo eixo X</title>
		<link>http://www.pietrogaiao.com.br/blog/mover-div-na-horizontal-pelo-eixo-x/</link>
		<comments>http://www.pietrogaiao.com.br/blog/mover-div-na-horizontal-pelo-eixo-x/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 02:17:38 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[JavaScript DOM]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[eixo X]]></category>
		<category><![CDATA[Horizontal]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mover na horizontal]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=260</guid>
		<description><![CDATA[Bem pessoal, estamos de volta com mais um post.
Hoje vou favar sobre como mover um elemento na horizontal (ex.: div) , através do eixo x.
Com esse exemplo, vocês irão desenvolver diversas aplicações como: carrossel de imagens, carrossel com vitrine de produtos e muito mais.

Tive o cuidado em testar esse script seguindo os padrões da W3C para que não haja nenhum problema com tipos de navegadores. Bem, testei apenas no Firefox e no IE e funcionou. 
Notem que nesse exemplo exite a tag <strong>&#60;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01//EN&#34; &#34;http://www.w3.org/TR/html4/strict.dtd&#34;&#62;</strong> 

]]></description>
			<content:encoded><![CDATA[<p>Bem pessoal, estamos de volta com mais um post.<br />
Hoje vou favar sobre como mover um elemento na horizontal (ex.: div) , através do eixo x.<br />
Com esse exemplo, vocês irão desenvolver diversas aplicações como: carrossel de imagens, carrossel com vitrine de produtos e muito mais.</p>
<p>Tive o cuidado em testar esse script seguindo os padrões da W3C para que não haja nenhum problema com tipos de navegadores. Bem, testei apenas no Firefox e no IE e funcionou.<br />
Notem que nesse exemplo exite a tag <strong>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;</strong> </p>
<p>Vamos ao que interessa.<br />
Fiz um script bem simples para que tenham uma melhor compreenção.</p>
<p>Primeiro, criaremos a div com o <strong>id=container</strong> que se movimentará.<br />
Para começar-mos notem que existem os styles <strong>left:0;</strong> e o <strong>position: relative;</strong>,<br />
<code>&lt;div id=container style=&quot;left:0; position: relative;&quot;&gt;<br />
&lt;img src=&quot;http://www.pietrogaiao.com.br/blog/exemplos/blog-pietro.gif&quot;&gt;<br />
&lt;/div&gt;<br />
</code></p>
<p>Logo em seguida, criaremos os botões de voltar e avançar.<br />
Os botões chamarão as funções <strong>tras()</strong> e <strong>frente()</strong>.<br />
<strong>&lt;input onClick=&quot;tras();&quot; type=button value=voltar&gt;<br />
&lt;input onClick=&quot;frente();&quot; type=button value=avan&ccedil;ar&gt;<br />
</strong></p>
<p>Agora vamos ao mais importante da festa. Vamos criar as funções responsáveis pela movimentação do elemento.<br />
Procurei nomear as variáveis da melhor forma possível, para que não fiquem com nenhuma dúvida.<br />
<code>function frente() {<br />
var movimento = setTimeout(&quot;frente()&quot;)<br />
var speed = 5<br />
var divContainer = document.getElementById(&quot;container&quot;).style<br />
avancaDIV = parseInt(divContainer.left)+speed+&quot;px&quot;<br />
if(avancaDIV==&quot;300px&quot;) {<br />
clearTimeout(movimento)<br />
return false;<br />
}<br />
divContainer.left = avancaDIV<br />
}<br />
</code></p>
<p>Vamos ver se entenderam.<br />
<strong>Primeiro:</strong> crio a variável responsável pela movimentação do elemento <strong>var movimento = setTimeout(&#8220;frente()&#8221;)</strong><br />
<strong>Segundo:</strong> passo a velocidade que o elemento percorrerá. <strong>var speed = 5</strong><br />
<strong>Terceiro:</strong> seto a o elemento que se movimentará indicando que será pelo style <strong>var divContainer = document.getElementById(&#8220;container&#8221;).style</strong><br />
<strong>Quarto:</strong> informo de quantos em quantos pixels o elemento se deslocara na horizontal. No nosso caso é de 5 em 5px, até chegar no 300px que então entrará no passo Quinto.<br />
<strong>Quinto:</strong> crio uma condição dizendo que quando o elemento chegar no pixel 300px, deverá parar. </p>
<p>Agora, para voltar, é só fazer ao contrário, informando a posição inicial.  </p>
<p>Veja abaixo o script completo e um link para testar nossa aplicação.<br />
<code>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Pietro Gai&atilde;o - Tutorial&lt;/title&gt;<br />
&lt;style type=&quot;text/css&quot;&gt;<br />
#container { width:220px; height:50px; border:1px solid;}<br />
#divleft { width:15px; height:50px;}<br />
#divright { width:15px; height:50px;}<br />
&lt;/style&gt;<br />
&lt;script language=JavaScript&gt;<br />
function frente() {<br />
var movimento = setTimeout(&quot;frente()&quot;)<br />
var speed = 5<br />
var divContainer = document.getElementById(&quot;container&quot;).style<br />
avancaDIV = parseInt(divContainer.left)+speed+&quot;px&quot;<br />
if(avancaDIV==&quot;300px&quot;) {<br />
clearTimeout(movimento)<br />
return false;<br />
}<br />
divContainer.left = avancaDIV<br />
}<br />
function tras() {<br />
var movimento = setTimeout(&quot;tras()&quot;)<br />
var speed = -5<br />
var divContainer = document.getElementById(&quot;container&quot;).style<br />
recuaDIV = parseInt(divContainer.left)+speed+&quot;px&quot;<br />
if(recuaDIV==&quot;-5px&quot; ) {<br />
clearTimeout(movimento)<br />
return false;<br />
}<br />
divContainer.left = recuaDIV<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div id=container style=&quot;left:0; position: relative;&quot;&gt;<br />
&lt;img src=&quot;http://www.pietrogaiao.com.br/blog/exemplos/blog-pietro.gif&quot;&gt;<br />
&lt;/div&gt;<br />
&lt;br&gt;<br />
&lt;br&gt;<br />
&lt;input onClick=&quot;tras();&quot; type=button value=voltar&gt;<br />
&lt;input onClick=&quot;frente();&quot; type=button value=avan&ccedil;ar&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</code></p>
<p>Teste nossa aplicação. <a target="_blank" href="http://www.pietrogaiao.com.br/blog/exemplos/mover-div.html">Como Mover div na horizontal pelo eixo X</a></p>
<p>É isso aí.<br />
Fiquem a vontade para enviar comentários e para que possam aprimorar mais ainda os conhecimentos.</p>
<p>Até a próxima.</p>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=260&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/mover-div-na-horizontal-pelo-eixo-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compressão de texto com Javascript Técnica com replace.</title>
		<link>http://www.pietrogaiao.com.br/blog/compressao-de-texto-com-javascript-tecnica-com-replace/</link>
		<comments>http://www.pietrogaiao.com.br/blog/compressao-de-texto-com-javascript-tecnica-com-replace/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 04:32:09 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[JavaScript DOM]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[join()]]></category>
		<category><![CDATA[Replace]]></category>
		<category><![CDATA[split()]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=252</guid>
		<description><![CDATA[Lendo um artigo sobre compressão de texto usando javascript, vi uma forma de substituir palavras por símbolos, que na minha opinião achei muito interessante.

Podemos usar essa técnica para criptografar os scripts

Observe que no texto abaixo, há palavras que se repetem com bastante freqüência. Nós iremos pegar palavras ou seqüências de caracteres e substituiremos por símbolos.]]></description>
			<content:encoded><![CDATA[<p>Lendo um artigo sobre compressão de texto usando javascript, vi uma forma de substituir palavras por símbolos, que na minha opinião achei muito interessante.</p>
<p>Podemos usar essa técnica para criptografar os scripts</p>
<p>Observe que no texto abaixo, há palavras que se repetem com bastante freqüência. Nós iremos pegar palavras ou seqüências de caracteres e substituiremos por símbolos.<br />
a, laranjas</p>
<p><strong>Peter Piper picked a peck of pickled peppers<br />
A peck of pickled peppers Peter Piper picked<br />
If Peter Piper picked a peck of pickled peppers<br />
Where&#8217;s the peck of pickled peppers Peter Piper picked ?<br />
</strong></p>
<p>Este é um modo como normalmente seria escrito em javascript.</p>
<p><code>&lt;script language=&quot;Javascript&quot;&gt;<br />
  var  sourcestring=&quot;Peter Piper picked a peck of pickled peppers&lt;BR&gt;A peck  of pickled peppers Peter Piper picked&lt;BR&gt;If Peter Piper picked a peck of  pickled peppers&lt;BR&gt;Where's the peck of pickled peppers Peter Piper picked  ?&quot;<br />
  document.write(sourcestring);<br />
&lt;/script&gt;</code></p>
<p>Aqui vamos fazer a substituição por símbolos.</p>
<p><code>&lt;script language=&quot;Javascript&quot;&gt;<br />
  replacestring = new Array(&quot;1| Peter Piper  &quot;,&quot;2| picked &quot;,&quot;3| pickled peppers &quot;,&quot;4| peck  &quot;);<br />
  var  sourcestring=&quot;12a4of3&lt;br&gt;A4of312&lt;br&gt;If  12a4of3&lt;br&gt;Where's the4of312?&quot;;<br />
  for  (i=0;i&lt;replacestring.length;i++){<br />
  var tempstring = replacestring[i].split(&quot;|&quot;);<br />
  var sourcestring =  sourcestring.split(tempstring[0]).join(tempstring[1]);<br />
  }<br />
  document.write(sourcestring);<br />
&lt;/script&gt;</code></p>
<p>O texto acima foi comprimido de 207 caracteres para 59 caracteres para sourcestring mais 62 caracteres para o novo replacestring. </p>
<p>Quanto mais o texto é adicionado, maior é a taxa de compressão.<br />
Novas palavras podem ser facilmente adicionados e substituídas utilizando símbolos e pontuação com combinações de caracteres (ex.:! 1,! 2,! 3) para substituir frases recorrentes no novo texto que é adicionado.<br />
Como um benefício, pode ser uma maneira útil de fazer scripts difíceis de compreender, ficando de forma criptografada. </p>
<p>Exemplo:<br />
Se você estivesse escrevendo um jogo de aventura, poderia ser suficiente para impedir que as alguém trabalhe o código e descubra onde o tesouro esta enterrado.</p>
<p>Achei super interessante. E vocês?<br />
Até a próxima</p>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=252&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/compressao-de-texto-com-javascript-tecnica-com-replace/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Função split com javascript. Transformando string num array.</title>
		<link>http://www.pietrogaiao.com.br/blog/funcao-split-com-javascript-transformando-string-num-array/</link>
		<comments>http://www.pietrogaiao.com.br/blog/funcao-split-com-javascript-transformando-string-num-array/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 03:59:51 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[JavaScript DOM]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[join()]]></category>
		<category><![CDATA[Replace]]></category>
		<category><![CDATA[split()]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=247</guid>
		<description><![CDATA[Uma das funções mais importantes do javascript é o split(). Podemos dividir uma string em um array . Você pode pegar uma frase e colocar todas as palavras em diferentes elementos de uma array.

Veremos como <strong>Combinar o conteúdo de um array e criar uma string, usando a função join().</strong>
e também, <strong>Replace com as funções split() e join()</strong>]]></description>
			<content:encoded><![CDATA[<p>Uma das funções mais importantes do javascript é o split(). Podemos dividir uma string em um array . Você pode pegar uma frase e colocar todas as palavras em diferentes elementos de uma array.</p>
<p>Exemplo:<br />
<code>&lt;script language=&quot;Javascript&quot;&gt;<br />
  var frase=&quot;Dicas de Javascript com Pietro Gai&atilde;o.&quot;;<br />
  var palavras= frase.split(&quot; &quot;);<br />
  for (i=0; i&lt; palavras.length; i++)<br />
  {<br />
  document.write( i+&quot;: &quot;+ palavras [i]  +&quot;&lt;br&gt;&quot;);<br />
  }<br />
  document.write(&quot;&lt;br&gt;&lt;br&gt;Passando a posi&ccedil;&atilde;o  do array:&lt;br&gt;&quot;);<br />
  document.write(&quot;&lt;b&gt;&quot;+ palavras [0] + &quot;  - &quot; + palavras[4] + &quot;&lt;/b&gt;&quot;);<br />
&lt;/script&gt;<br />
</code></p>
<p>Resultado:<br />
<strong><br />
0: Dicas<br />
1: de<br />
2: Javascript<br />
3: com<br />
4: Pietro<br />
5: Gaião.<br />
</strong></p>
<p>Nesse exemplo, usamos palavras separadas por um espaço (<strong>split(&#8221; &#8220;);</strong>), mas podemos usar qualquer outro caractere para servir de separação.</p>
<p>Podemos pegar o resultado separadamente, passando apenas a posição no array.<br />
Exemplo:<br />
document.write( palavras [0] + &#8221; &#8211; &#8221; + palavras[4] );</p>
<p>Resultado:<br />
<strong>Dicas &#8211; Pietro</strong></p>
<h2>Combinar o conteúdo de um array e criar uma string, usando a função join().</h2>
<p>Agora vamos fazer o inverso, vamos combinar o conteúdo de um array e criar uma string, usando o separador que foi especificado na separação do array.<br />
Usaremos a <strong>função join()</strong>.</p>
<p>Exemplo:<br />
<code>&lt;script  language=&quot;Javascript&quot;&gt;<br />
  frutas =  new Array ( &quot;ma&ccedil;&atilde;s&quot;, &quot;p&ecirc;ra&quot;, &quot;banana&quot;,  &quot;laranjas&quot;);<br />
  var  fruitlist = frutas.join(&quot;, &quot;);<br />
  document.write ( &quot;Gosto de &quot; + fruitlist);<br />
&lt;/script&gt;</code></p>
<p>Resultado:<br />
Gosto de <strong>maçãs, pêra, banana, laranjas</strong></p>
<h2>Replace com as funções split() e join()</h2>
<p>Observe que com a função <strong>split()</strong>, usamos como separador a palavra <strong>“substituir”.</strong><br />
O separador é removido automaticamente com a fução split() que será substituída pela palavra <strong>“TROCAR”</strong> com a <strong>função join()</strong>.</p>
<p><code>&lt;script language=&quot;Javascript&quot;&gt;<br />
  var oldstring=&quot;Fun&ccedil;&atilde;o para substituir uma string  &quot;;<br />
  newstring=oldstring.split(&quot;substituir&quot;).join(&quot;TROCAR&quot;);<br />
  document.write(newstring);<br />
&lt;/script&gt;</code></p>
<p>Resultado:<br />
Função para <strong>TROCAR</strong> uma string</p>
<p>Muito bem, espero que tenham tido uma boa compreenção.</p>
<p>Lendo um artigo sobre compressão de texto usando javascript, vi uma forma de substituir palavras por símbolos, que na minha opinião achei muito interessante.<strong><br />
leia: <a href="http://www.pietrogaiao.com.br/blog/?p=252">Compressão de texto com Javascript. Técnica com replace.</a></p>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=247&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/funcao-split-com-javascript-transformando-string-num-array/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Como fazer uma paginação</title>
		<link>http://www.pietrogaiao.com.br/blog/como-fazer-uma-paginacao/</link>
		<comments>http://www.pietrogaiao.com.br/blog/como-fazer-uma-paginacao/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 16:10:52 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[JavaScript DOM]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[paginação]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=232</guid>
		<description><![CDATA[Olá pessoal, hoje estou compartilhando algo que sei que muita gente que está começando ainda tem dúvidas.
Não é uma paginação das super completas, mas sim uma paginação simples e muito funcional.
Vamos ao que interessa.
Primeiro vamos criar um array...]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, hoje estou compartilhando algo que sei que muita gente que está começando ainda tem dúvidas.<br />
Não é uma paginação das super completas, mas sim uma paginação simples e muito funcional.<br />
Vamos ao que interessa.</p>
<p>Primeiro vamos criar um array com todas as imagens que serão carregadas.</p>
<pre escaped="true" lang="javascript" line="1">
             var imagens = new Array(	"'images/1.jpg'","'images/2.jpg'","'images/3.jpg'",
	"'images/4.jpg'","'images/5.jpg'","'images/6.jpg'",
	"'images/7.jpg'","'images/8.jpg'","'images/9.jpg'"	);</pre>
<p>Feito isso, criaremos a função <strong>paginacao()</strong>, responsável pela paginação.</p>
<p>Nessa função iremos passar o parâmetro que receberá o número da página e chamaremos a função que escreverá o conteúdo no html.</p>
<pre escaped="true" lang="javascript" line="1">
function paginacao(inicio){

    i = inicio;

    var retorno = "&lt;center&gt;&lt;div&gt;";
    retorno += "&lt;a href='#' onclick='paginacao(0)'&gt;1&lt;/a&gt; | ";
    retorno += "&lt;a href='#' onclick='paginacao(4)'&gt;2&lt;/a&gt; |&lt;br&gt;&lt;br&gt;";
    retorno += "&lt;img src="+imagens[i++]+" /&gt;";
    retorno += "&lt;img src="+imagens[i++]+" /&gt;";
    retorno += "&lt;img src="+imagens[i++]+" /&gt;";
    retorno += "&lt;img src="+imagens[i++]+" /&gt;";
    retorno += "&lt;/div&gt;&lt;/center&gt;";
document.getElementById("alvo").innerHTML = retorno;
}</pre>
<p>Note, na linha abaixo passamos o valor para informar de quantas e quantas imagens queremos mostrar.<br />
Página <strong>1|</strong> vai de 0 a 3, página <strong>2|</strong> vai de 4 em diante &#8230;</p>
<pre escaped="true" lang="javascript" line="1">
    retorno += "&lt;a href='#' onclick='paginacao(0)'&gt;1&lt;/a&gt; | ";
    retorno += "&lt;a href='#' onclick='paginacao(4)'&gt;2&lt;/a&gt; |&lt;br&gt;&lt;br&gt;";</pre>
<p>Confira abaixo o script completo.</p>
<pre escaped="true" lang="javascript" line="1">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Pietro Gaião - Como fazer uma paginação simples&lt;/title&gt;
&lt;script type="text/javascript"&gt;	var imagens = new Array(
	"'images/1.jpg'","'images/2.jpg'","'images/3.jpg'",
	"'images/4.jpg'","'images/5.jpg'","'images/6.jpg'",
	"'images/7.jpg'","'images/8.jpg'","'images/9.jpg'"	);
function paginacao(inicio){i = inicio;var retorno = "&lt;center&gt;&lt;div&gt;";
    retorno += "&lt;a href='#' onclick='paginacao(0)'&gt;1&lt;/a&gt; | ";
    retorno += "&lt;a href='#' onclick='paginacao(4)'&gt;2&lt;/a&gt; |&lt;br&gt;&lt;br&gt;";
    retorno += "&lt;img src="+imagens[i++]+" /&gt;";
    retorno += "&lt;img src="+imagens[i++]+" /&gt;";
    retorno += "&lt;img src="+imagens[i++]+" /&gt;";
    retorno += "&lt;img src="+imagens[i++]+" /&gt;";
    retorno += "&lt;/div&gt;&lt;/center&gt;";
document.getElementById("alvo").innerHTML = retorno;}&lt;/script&gt;
&lt;/head&gt;&lt;body onLoad="paginacao(0);"&gt;
&lt;div id="alvo"&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p><strong>Veja o exemplo de como ficou nossa paginação.</strong><br />
<a href="http://www.pietrogaiao.com.br/blog/exemplos/paginacaosimples.html" target="_blank">exemplo de paginação</a></p>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=232&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/como-fazer-uma-paginacao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript Orientado a Objetos</title>
		<link>http://www.pietrogaiao.com.br/blog/javascript-orientado-a-objetos/</link>
		<comments>http://www.pietrogaiao.com.br/blog/javascript-orientado-a-objetos/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 20:11:57 +0000</pubDate>
		<dc:creator>Pietro Gaião</dc:creator>
				<category><![CDATA[JavaScript DOM]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[orientado a objetos]]></category>

		<guid isPermaLink="false">http://www.pietrogaiao.com.br/blog/?p=216</guid>
		<description><![CDATA[Javascript difere-se de linguagens clássicas orientadas a objeto como Java e C++ principalmente por não possuir uma definição formal de classe. Entretanto possui seu próprio tipo de herança baseada em protótipo e faz uso constante de objetos baseando-se nesse tipo de herança. 
]]></description>
			<content:encoded><![CDATA[<p>Javascript difere-se de linguagens clássicas orientadas a objeto como Java e C++ principalmente por não possuir uma definição formal de classe. Entretanto possui seu próprio tipo de herança baseada em protótipo e faz uso constante de objetos baseando-se nesse tipo de herança. </p>
<h3>Função construtora e propriedades / Classe e atributos </h3>
<p>Na programação orientada a objetos, é comum utilizar tipos de objetos (classes) personalizados. Essas classes são úteis em diversos casos, por exemplo, se seu programa manipula várias formas geométricas, poderiam haver várias classes de objetos como quadrados, retângulos e círculos. Utilizando nosso exemplo, vamos criar a função construtora <strong>Ventilador</strong>, contendo as propriedades <strong>velocidadeMaxima</strong> e <strong>ligado</strong>. Observe que a propriedade <strong>velocidadeMaxima</strong> recebe o valor do argumento <strong>velMax</strong>.</p>
<p><code>function Ventilador(velMax) {<br />
    this.velocidadeMaxima = velMax;<br />
    this.ligado = false;<br />
}<br />
</code>A palavra-chave this é responsável por iniciar o objeto adequadamente. </p>
<h3>Instâncias</h3>
<p>A criação de um objeto, ou seja, a instanciação de uma classe é realizada com uso do operador new. Após este operador vem o nome da função construtora, responsável pela inicialização do objeto.</p>
<p>Alguns exemplos de instanciação:<br />
<code>var obj = new Object();<br />
var data = new Date();<br />
</code><br />
Seguindo mais uma vez o exemplo do ventilador:<br />
<code>var ventilador1 = new Ventilador(3);<br />
</code></p>
<h3>Acessando propriedades</h3>
<p>Para acessar as propriedades de um objeto você deve utilizar o operador “.” que deve ser precedido de uma referência ao objeto e sucedido pelo nome de uma de suas propriedades.<br />
<code>alert(ventilador1.velocidadeMaxima); // Retorna 3<br />
</code><br />
Diferente das linguagens clássicas orientadas a objeto, Javascript permite que propriedades sejam adicionadas a qualquer momento durante a execução do código. Por exemplo, vamos adicionar a propriedade cor a nosso ventilador:<br />
<code>ventilador1.cor = "branco";<br />
alert(ventilador1.cor); // Retorna branco<br />
</code></p>
<h3>Métodos</h3>
<p>Métodos em Javascript são funções invocadas por objetos. Para criar um novo método, basta atribuir uma função a um nome no objeto utilizando também o operador “.” como ocorre com as propriedades. O exemplo abaixo demonstra como definir o método ligar para a classe Ventilador utilizando a função liga através da propriedade prototype.<br />
<code>function liga() {<br />
    this.ligado = true;<br />
}<br />
Ventilador.prototype.ligar = liga;<br />
</code><br />
Caso queira adicionar um método a um objeto em particular, pode fazê-lo da seguinte maneira:<br />
<code>ventilador2 = new Ventilador(2);<br />
ventilador2.ligar = liga;<br />
</code><br />
Outro uso possível é definir o método na estrutura da classe:<br />
<code>function liga() {<br />
    this.ligado = true;<br />
}<br />
function Ventilador(velMax) {<br />
    this.velocidadeMaxima = velMax;<br />
    this.ligado = false;<br />
    this.ligar = liga;<br />
}<br />
</code><br />
A palavra chave this é substituída pelo objeto que invoca a função, essa é uma das principais vantagens da utilização de métodos. Exemplo de uso:<br />
<code>var ventilador = new Ventilador(3);<br />
alert(ventilador.ligado); // Retorna false<br />
ventilador.ligar();<br />
alert(ventilador.ligado); // Retorna true<br />
</code></p>
<h3>Literais de objeto</h3>
<p>Os literais de objeto possibilitam criar e iniciar objetos de uma maneira diferente. A sintaxe é definida por uma lista de pares nome/valor separados por vírgulas entre um par de chaves. Cada par nome/valor é definido pelo nome da propriedade seguido de dois pontos e do valor correspondente.<br />
<code>var Livro = {<br />
    titulo : "Os Três Mosqueteiros",<br />
    autor : "Alexandre Dumas",<br />
    capitulo1 : {<br />
        titulo : "Os três presentes do sr. D'Artagnan pai",<br />
        paginas : 11<br />
    },<br />
    capitulo2 : {<br />
        titulo : "A antecâmara do sr. Tréville",<br />
        paginas : 8<br />
    }<br />
}<br />
// Acessando as propriedades:<br />
alert(Livro.titulo + " - " + Livro.autor + "\\n\\t" +<br />
      Livro.capitulo1.titulo + " - " +<br />
      Livro.capitulo1.paginas + " páginas\\n\\t" +<br />
      Livro.capitulo2.titulo + " - " +<br />
      Livro.capitulo2.paginas + " páginas");<br />
</code></p>
<h3>Composição</h3>
<p>A composição é um recurso utilizado para definir uma relação do tipo “tem um” (“has a” relationship), ou seja, um objeto que conta com outros objetos para formar sua estrutura. Por exemplo, um objeto do tipo Carro teria em sua estrutura objetos do tipo Roda, Volante, Banco. O exemplo anterior que descreve um livro, também demonstra o uso deste recurso.<br />
<code>function Livro(titulo, autor) {<br />
    this.titulo = titulo;<br />
    this.autor = autor;<br />
}<br />
function Capitulo(titulo, paginas) {<br />
    this.titulo = titulo;<br />
    this.paginas = paginas;<br />
}<br />
var livro = new Livro("Os Três Mosqueteiros", "Alexandre Dumas");<br />
var capitulo1 = new Capitulo("Os três presentes do sr. D'Artagnan pai", 11);<br />
var capitulo2 = new Capitulo("A antecâmara do sr. Tréville", 8);<br />
// Os objetos do tipo Capitulo fazem parte da composição do objeto livro<br />
livro.capitulo1 = capitulo1;<br />
livro.capitulo2 = capitulo2;<br />
// Acessando as propriedades:<br />
alert(livro.titulo + " - " + livro.autor + "\\n\\t" +<br />
      livro.capitulo1.titulo + " - " +<br />
      livro.capitulo1.paginas + " páginas\\n\\t" +<br />
      livro.capitulo2.titulo + " - " +<br />
      livro.capitulo2.paginas + " páginas");<br />
</code></p>
<h3>Encapsulamento</h3>
<p>Como exposto no início do artigo, em nosso exemplo que representa um ventilador, detalhes da estrutura de alguns objetos ficam ocultos internamente, pois não precisamos conhecê-los para fazer uso dos mesmos. O encapsulamento tem por objetivo esconder essa informação que não precisa ser de conhecimento do utilizador da classe. Seu uso é uma boa prática quanto à manutenção da classe, pois podemos modificar a parte que é oculta ao utilizador sem alterar sua forma de implementação. Em Javascript podemos usar encapsulamento em propriedades de uma classe utilizando (ou não) a palavra-chave var ao invés da palavra-chave this e do operador “.”.<br />
<code>function Ventilador(velMax) {<br />
    var maximaPermitida = 5; // Uso de encapsulamento<br />
    var velocidadePadrao = 3; // Variáveis privadas<br />
    // Avalia se a velocidade máxima fornecida é maior que zero e menor que 5, o limite atual.<br />
    if (velMax > 0 &#038;&#038; velMax <= maximaPermitida) {<br />
        // Caso seja, atribui o valor fornecido à propriedade velocidadeMaxima<br />
        this.velocidadeMaxima = velMax;<br />
    } else {<br />
        // Caso contrário, atribui o valor da variável velocidadePadrao à propriedade velocidadeMaxima<br />
        this.velocidadeMaxima = velocidadePadrao;<br />
    }<br />
    this.ligado = false;<br />
    this.ligar = function() { // O método ligar agora é definido<br />
        this.ligado = true; // por um literal de função, o que<br />
    } // melhora a legibilidade do código.<br />
}<br />
ventilador = new Ventilador(0); // Cria a instância fornecendo o valor 0 para o argumento velMax;<br />
alert(ventilador.velocidadeMaxima); // Retorna 3 – o padrão<br />
alert(ventilador.maximaPermitida); // Retorna undefined<br />
</code></p>
<h3>Herança</h3>
<p>Em Javascript a herança ocorre por meio de objetos protótipos e define uma relação do tipo “é um” (“is a” relationship). Cada objeto herda propriedades e métodos de seu objeto protótipo que é referenciado pela propriedade prototype. A classe Object é a superclasse de todas as classes definidas em Javascript, ou seja, todos os construtores criados herdam propriedades e métodos definidos no construtor Object() como por exemplo o método toString(), que assim como outros pode ser sobrescrito na subclasse. Em alguns casos, é conveniente utilizar este recurso em classes personalizadas, para isso basta definir um construtor como valor para a propriedade prototype da classe em questão. Como exemplo simplório, vamos definir a classe <strong>Eletrodomestico</strong> com a propriedade <strong>ligado</strong> e os métodos <strong>ligar</strong> e <strong>desligar</strong> comuns a todos os eletrodomésticos e então definir a classe <strong>Ventilador</strong> com propriedades e métodos peculiares.</p>
<p><code>function Eletrodomestico() {<br />
    this.ligado = false;<br />
    this.ligar = function() {<br />
        this.ligado = true;<br />
    }<br />
    this.desligar = function() {<br />
        this.ligado = false;<br />
    }<br />
}<br />
function Ventilador(velMax) {<br />
    var maximaPermitida = 5; // Uso de encapsulamento<br />
    var velocidadePadrao = 3; // Variáveis privadas<br />
    if (velMax > 0 &#038;&#038; velMax <= maximaPermitida) {<br />
        this.velocidadeMaxima = velMax;<br />
    } else {<br />
        this.velocidadeMaxima = velocidadePadrao;<br />
    }<br />
}<br />
Ventilador.prototype = new Eletrodomestico(); // Define o objeto protótipo<br />
ventilador = new Ventilador(4);<br />
alert(ventilador.ligado); // Retorna false<br />
ventilador.ligar();<br />
alert(ventilador.ligado); // Retorna true<br />
</code></p>
<p>A utilização do objeto protótipo faz com que a propriedade constructor também seja herdada da superclasse, o que definiria a classe <strong>Eletrodomestico</strong> como valor da propriedade no objeto <strong>ventilador</strong>. Uma alternativa é definir de forma explícita a propriedade constructor:<br />
<code>Ventilador.prototype.constructor = Ventilador;<br />
</code></p>
<h3>Conclusão</h3>
<p>Este artigo é apenas um incentivo à adoção dos conceitos da orientação a objetos em Javascript. Com o entendimento dos conceitos, os desenvolvedores podem corroborar as vantagens em códigos mais complexos, organizando o desenvolvimento e facilitando a manutenção dos scripts.</p>
<p>Muito bom esse artigo, concorda?<br />
Bem espero ter contribuido também para um melhor entendimento de Javascript Orientado a Objetos.</p>
<h3>Informações Sobre o Documento Original</h3>
<p>Referência:<a href="https://developer.mozilla.org/pt/Javascript_orientado_a_objetos#jsoop3">Mozilla Developer Center</a><br />
Autor: <a href="https://developer.mozilla.org/User:Leandro_Merc%C3%AAs_Xavier">Leandro Mercês Xavier</a><br />
Informações sobre Copyright: Este artigo está disponível sob os termos da <a href="http://creativecommons.org/licenses/by-sa/2.5/br/">Creative Commons Atribuição-Compartilhamento pela mesma licença 2.5 Brasil</a></p>
<img src="http://www.pietrogaiao.com.br/blog/?ak_action=api_record_view&id=216&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.pietrogaiao.com.br/blog/javascript-orientado-a-objetos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
