<?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>Leandro Garcia &#187; JavaScript</title>
	<atom:link href="http://www.leandrogarcia.com/blog/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.leandrogarcia.com</link>
	<description></description>
	<lastBuildDate>Wed, 11 Jan 2012 13:31:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Treinamento em Javascript para principiantes ou esquecidinhos</title>
		<link>http://www.leandrogarcia.com/blog/treinamento-em-javascript-para-principiantes-ou-esquecidinhos/</link>
		<comments>http://www.leandrogarcia.com/blog/treinamento-em-javascript-para-principiantes-ou-esquecidinhos/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 15:36:20 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Treinamento]]></category>
		<category><![CDATA[aulas]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[treinamento]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/?p=378</guid>
		<description><![CDATA[Vou escrever uma série de posts sobre javascript com o foco no aprendizado da linguagem, pretendo abordar desde o mais básico de javascript.
No entanto, pretendo que essa série de posts sejam usadas não apenas por aqueles que estão aprendendo, mas também por aqueles que ja estão há algum tempo no mercado, mas eventualmente acabam se [...]]]></description>
			<content:encoded><![CDATA[<p>Vou escrever uma série de posts sobre javascript com o foco no aprendizado da linguagem, pretendo abordar desde o mais básico de javascript.</p>
<p>No entanto, pretendo que essa série de posts sejam usadas não apenas por aqueles que estão aprendendo, mas também por aqueles que ja estão há algum tempo no mercado, mas eventualmente acabam se esquecendo de alguma coisa, me incluo nessa relação.</p>
<p>Não pretendo criar um guia definitivo sobre aprendizado de javascript, mas uma área em que possa estar reunidas informações diversas para serem consultadas por todos. Essa série de posts não substituirá um curso presencial, é apenas um guia ou uma referência.</p>
<p>Não tenho a pretensão de ser referência em trinamento de java script, mas gostaria de saber que alguém conseguiu entender a linguagem através do que escrevo.</p>
<p>Abordarei desde o mais básico do javascript como as tags script, mas não falarei sobre a história da linguagem. A internet está cheia de referências sobre o histórico da linguagem, para quem quer conhecer essa história, aconselho uma pesquisada na wikipedia, lá você deve encontrar esse tipo de informação.</p>
<p>Não sei quantos posts farei nessa série.</p>
<p>Tentarei ser bem didático, bem simples e direto na minha explanação.</p>
<p>Caso tenham alguma dúvida, não exitem em me mandar um e-mailou postar no meu <a href="http://www.formspring.me/blogdogarcia">formspring</a>, tem uma caixa aqui ao lado esperando sua dúvida.</p>
<p>Comentem sempre que sintam a necessidade, tragam suas dúvidas, tragam exemplos, tragam coisas que querem desenvolver, vamos desenvolver juntos.</p>
<p>Espero que gostem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/treinamento-em-javascript-para-principiantes-ou-esquecidinhos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Verificar se um objeto Json está vazio</title>
		<link>http://www.leandrogarcia.com/blog/verificar-se-um-objeto-json-esta-vazio/</link>
		<comments>http://www.leandrogarcia.com/blog/verificar-se-um-objeto-json-esta-vazio/#comments</comments>
		<pubDate>Fri, 28 May 2010 21:37:43 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/?p=303</guid>
		<description><![CDATA[Tive um problema recentemente, a API do twitter que na busca me traz as informações que preciso, em um determinado usuário resolveu não trazer, consequentemente o sistema não funcionou para este usuário.
A solução verificar o resultado se está vazio, no entando como o callback traz um jason é um pouco difícil. Pesquisando na Net descobri [...]]]></description>
			<content:encoded><![CDATA[<p>Tive um problema recentemente, a API do twitter que na busca me traz as informações que preciso, em um determinado usuário resolveu não trazer, consequentemente o sistema não funcionou para este usuário.</p>
<p>A solução verificar o resultado se está vazio, no entando como o callback traz um jason é um pouco difícil. Pesquisando na Net descobri a função abaixo. Ela verifica se o objeto está vazio, se sim retorna true se não false. Bem útil.</p>
<pre class="brush: jscript; title: ; notranslate">
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/verificar-se-um-objeto-json-esta-vazio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSON (JavaScript Object Notation)</title>
		<link>http://www.leandrogarcia.com/blog/json-javascript-object-notation/</link>
		<comments>http://www.leandrogarcia.com/blog/json-javascript-object-notation/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 19:07:55 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=207</guid>
		<description><![CDATA[Muitas vezes nos deparamos com a necessidade de intercambiar dados entre páginas, servidores ou até mesmo domiínios. A maioria de nós, inclusive eu a não muito tempo atrás, acredita que a única maneira de fazer esse intercambio é através de XML. Mas não é bem assim. Existe o JSON.
O JSON é um formato leve para [...]]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes nos deparamos com a necessidade de intercambiar dados entre páginas, servidores ou até mesmo domiínios. A maioria de nós, inclusive eu a não muito tempo atrás, acredita que a única maneira de fazer esse intercambio é através de XML. Mas não é bem assim. Existe o JSON.</p>
<p>O JSON é um formato leve para intercambio de dados.</p>
<p><strong>Mas qual a vantagem em relação ao XML?</strong></p>
<p>Eu vejo três.</p>
<p>1ª &#8211; É bem mais leve de ser carregado do que um arquivo XML.</p>
<p>2ª &#8211; É mais fácil de se trabalhar</p>
<p>3ª &#8211; É Cross Browser*</p>
<blockquote><p>*Quando usamos XML nos deparamos com um problemão para parsear as informações, as regras de segurança dos browsers. No Firefox, por exemplo, não é possível parsear as informações provenientes de um XML que esteja em um servidor diferente da aplicação, ou seja, se sua aplicação estiver hospedada em www.aqui.com.br, o Firefox só permitirá que você parseie um XML se ele estiver em, por exempo, www.aqui.com.com/esse.xml, agora se estiver, por exemplo em www.outro.com.br/esse.xml, as regras de segurança bloquearão sua aplicação. (Não necessáriamente isso acontece nas linguagens Backend)</p></blockquote>
<p>Um vez explicado as vantagens do JSON, vamos ao formato.</p>
<pre>{"notas" : [
   {"nome":"João", "nota1":8, "nota2":6, "nota3":10 },
   {"nome":"Maria", "nota1":5, "nota2":9, "nota3":8 },
   {"nome":"Pedro", "nota1":2, "nota2":7, "nota3":5 }
]};</pre>
<p>No exemplo acima, temos um conjunto de dados chamado &#8220;notas&#8221; que tem as informações de três alunos, commo nome e notas.</p>
<p>Você pode ir hieranquizando as informaçõe da forma que melhor lhes convier.</p>
<p>Você encontra o JSON na maioria das APIs abertas da Internet, como as do Google, Facebook, Flickr, Twitter, etc.</p>
<p>Mas tudo isso não quer dizer que o XML seja inútil ou não deva ser usado. Cada caso e um caso. Existem casos web a for que se utilizam dos dois formato, outros disponibilizam os dois formatos (Twitter por exemplo)&#8230;</p>
<p>Mais informações em <a href="http://www.json.org/json-pt.html" target="_blank">http://www.json.org/json-pt.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/json-javascript-object-notation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript: A diferença entre &quot;setTimeout&quot; e &quot;setInterval&quot;</title>
		<link>http://www.leandrogarcia.com/blog/settimeout-e-setinterval/</link>
		<comments>http://www.leandrogarcia.com/blog/settimeout-e-setinterval/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 17:27:45 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[Descategorizado]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[setinterval]]></category>
		<category><![CDATA[settimeout]]></category>
		<category><![CDATA[tempo]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=203</guid>
		<description><![CDATA[Salve!
Em javascript há duas funções bem interessantes para se trabalhar com tempo a setTimeout e a setInterval.
Nos dois casos você diz ao navegador para executar determinado código dentro de determinado tempo, ou seja, você pode dizer ao browser para executar a função alert, por exemplo, daqui a 5 segundos.
Mas qual é a diferença??
A diferença é [...]]]></description>
			<content:encoded><![CDATA[<p>Salve!</p>
<p>Em javascript há duas funções bem interessantes para se trabalhar com tempo a setTimeout e a setInterval.</p>
<p>Nos dois casos você diz ao navegador para executar determinado código dentro de determinado tempo, ou seja, você pode dizer ao browser para executar a função alert, por exemplo, daqui a 5 segundos.</p>
<p>Mas qual é a diferença??</p>
<p>A diferença é que a &#8220;setTimeout&#8221; é executada uma vez e a setInterval é executada de tantos em tantos segundos.</p>
<p>na Prática.</p>
<pre class="brush: jscript; title: ; notranslate">
/*Acionado uma vez. Em 10 segundo à partir da chamada da função*/
setTimeout(alert(&quot;alerta&quot;),10000);
</pre>
<pre class="brush: jscript; title: ; notranslate">
/*Acionado sempre, a cada 10 segundos*/
setInterval(alert(&quot;alerta&quot;),10000);
</pre>
<p>Para mim, é muito útil&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/settimeout-e-setinterval/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Função Trim em Javascript</title>
		<link>http://www.leandrogarcia.com/blog/funcao-trim-em-javascript/</link>
		<comments>http://www.leandrogarcia.com/blog/funcao-trim-em-javascript/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 20:02:57 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[função]]></category>
		<category><![CDATA[Java Script]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=201</guid>
		<description><![CDATA[Se tem uma função básica em quase todas as linguagens de programação e extremamente util é a &#8220;trim&#8221;.
Pra quem não sabe, a função trim serve para retirar os espaços antes e depois de uma string. Algom mais ou menos assim:
Antes:
&#8221;     Olá Mundo      &#8221;
Depois do uso do [...]]]></description>
			<content:encoded><![CDATA[<p>Se tem uma função básica em quase todas as linguagens de programação e extremamente util é a &#8220;trim&#8221;.</p>
<p>Pra quem não sabe, a função trim serve para retirar os espaços antes e depois de uma string. Algom mais ou menos assim:</p>
<blockquote><p>Antes:<br />
&#8221;     Olá Mundo      &#8221;</p>
<p>Depois do uso do trim</p>
<p>&#8220;Olá Mundo&#8221;
</p></blockquote>
<p>Mas, sempre tem um mas&#8230;. Em Javascript não tem, pelo menos não nativa. Você deve criar uma.</p>
<p>Há algum tempo atrás eu encontrei uma na internet que usa expressões regulares para retirar esses espaços. Não sei quem a criou, mas se souberem me avisem para que eu possa colocar os créditos por ela.</p>
<p>Vamos à função. Bem simples.</p>
<pre class="brush: jscript; title: ; notranslate">function Trim(str){return str.replace(/^\s+|\s+$/g,&quot;&quot;);}</pre>
<p>Depois é só usar.</p>
<pre class="brush: jscript; title: ; notranslate">
//Exemplo
var string = &quot;   Tem espaço antes e Depois     &quot;;

alert(Trim(string));
</pre>
<p>Testem. Usem. Usufruam.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/funcao-trim-em-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contagem regressiva em Javascript</title>
		<link>http://www.leandrogarcia.com/blog/contagem-regressiva-em-javascript/</link>
		<comments>http://www.leandrogarcia.com/blog/contagem-regressiva-em-javascript/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 21:06:01 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[contador]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=83</guid>
		<description><![CDATA[Tempos atrás, no decorrer do desenvolvimento de um sistema web, o cliente solicitou que houvesse um contador regressivo de quanto tempo faltava para que o sistema efetuasse determinada ação.
Depois de quebrar a cabeça cheguei até o script abaixo
Agora para chamar na sua página, pode-se chamar de duas maneiras:
OU
Eu prefiro utiliza a maneira acima utilizando o [...]]]></description>
			<content:encoded><![CDATA[<p>Tempos atrás, no decorrer do desenvolvimento de um sistema web, o cliente solicitou que houvesse um contador regressivo de quanto tempo faltava para que o sistema efetuasse determinada ação.</p>
<p>Depois de quebrar a cabeça cheguei até o script abaixo</p>
<pre class="brush: jscript; title: ; notranslate">
function atualizaContador(YY,MM,DD,HH,MI,saida) {
var SS = 00; //Segundos
var hoje = new Date(); //Dia
var futuro = new Date(YY,MM-1,DD,HH,MI,SS); //Data limite do contador

var ss = parseInt((futuro - hoje) / 1000); //Determina a quantidade total de segundos que faltam
var mm = parseInt(ss / 60); //Determina a quantidade total de minutos que faltam
var hh = parseInt(mm / 60); //Determina a quantidade total de horas que faltam
var dd = parseInt(hh / 24); //Determina a quantidade total de dias que faltam

ss = ss - (mm * 60); //Determina a quantidade de segundos
mm = mm - (hh * 60); //Determina a quantidade de minutos
hh = hh - (dd * 24); //Determina a quantidade de horas

//O bloco abaixo descreve monta o que vai ser escrito na tela
var faltam = '';
faltam += (dd &amp;&amp; dd &gt; 1) ? dd+' dias, ' : (dd==1 ? '1 dia, ' : '');
faltam += (toString(hh).length) ? hh+':' : '';
faltam += (toString(mm).length) ? mm+':' : '';
faltam += ss;

if (dd+hh+mm+ss &gt; 0) {
document.getElementById(saida).innerHTML = faltam;//INsere o conteudo da variável faltam na página.
setTimeout(function(){atualizaContador(YY,MM,DD,HH,MI,saida)},1000);//Reinicia a função a cada um segundo
} else {
document.getElementById(saida).innerHTML = '';
setTimeout(function(){atualizaContador(YY,MM,DD,HH,MI,saida)},1000);
}
}
</pre>
<p>Agora para chamar na sua página, pode-se chamar de duas maneiras:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;body onload=&quot;atualizaContador('2009','07','14','23','00','00','elementodedestino')&quot;&gt;
</pre>
<p>OU</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;window.onload=function(){
atualizaContador('2009','07','14','23','00','00','elementodedestino');
}&lt;/script&gt;
</pre>
<p>Eu prefiro utiliza a maneira acima utilizando o window.onload, pois acredito que torna a página mais arrumada e, ainda, podemos colocar no final da página, melhorando o carregamento da página.</p>
<p>Espero que seja util para vocês.</p>
<p><a href="http://tutoriais.leandrogarcia.com/contagemregressiva/contagemregressiva.html">link</a></p>
<p><a href="http://tutoriais.leandrogarcia.com/contagemregressiva/contagemregressiva.zip">Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/contagem-regressiva-em-javascript/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Offset, descobrindo o posicionamento absoluto de um elemento</title>
		<link>http://www.leandrogarcia.com/blog/offset-descobrindo-o-posicionamento-absoluto-de-um-elemento/</link>
		<comments>http://www.leandrogarcia.com/blog/offset-descobrindo-o-posicionamento-absoluto-de-um-elemento/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 17:23:38 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Absolute]]></category>
		<category><![CDATA[Absoluto]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Java Script]]></category>
		<category><![CDATA[Offset]]></category>
		<category><![CDATA[Posicionamento]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=77</guid>
		<description><![CDATA[Anteriormente escrevi sobre maneiras de otimizar o carregamento das páginas.
Umas destas maneiras, é colocar todas as chamadas de scripts na parte de baixo da página, mas aí tem um problema. Aqui na empresa as publicidades são dinamicas e exibidas através de script, logo, para eu exibir um superbanner na posição correta, eu deveria chamar o [...]]]></description>
			<content:encoded><![CDATA[<p>Anteriormente escrevi sobre maneiras de otimizar o carregamento das páginas.</p>
<p>Umas destas maneiras, é colocar todas as chamadas de scripts na parte de baixo da página, mas aí tem um problema. Aqui na empresa as publicidades são dinamicas e exibidas através de script, logo, para eu exibir um superbanner na posição correta, eu deveria chamar o JS externo no head da página, mas é oposto ao que devemos práticar aqui.</p>
<p>Alguns de você dirão, basta que você coloque um posicionamento reletivo(relative) na div container e coloque a publicidade na parte do código e posicione a div com a publicidade em absoluto(absolute).</p>
<p>Isso funciona, desde que a publicidade seja sempre no mesmo local, mas se a publicidade é um island, por exemplo que é no meio do conteúdo, o que fazer?</p>
<p>É aí que surge o Offset da página.</p>
<p>Com o Offse, Você consegue descobrir onde exatamente, em Pixels, está o elemebto que você quer encontrar.</p>
<p>Por exemplo. Eu tenho um campo de busca e quero ao clicar nele, abrir um suggest, é com o Offset.</p>
<p>Ou no caso do Banner, como eu fiz:</p>
<p>Criei uma div com o <strong>id bannerposicao </strong>nessa div eu joguei o tamanho do banner (height:240px;width:120px). Com isso eu criei um espaço vazio que eu posso preencher porexemplo com o endereço da central de relacionamentos (bom para efeito de SEO).</p>
<p>No final do código eu criei uma outra div com o <strong>id banner </strong>e joguei (via CSS) o tamanho da publicidade (height:240px;width:120px) e a posicionei como absoluto (position:absolute).</p>
<p>Depois disso, eu usei a função abaixo para posicionar a publicidade no lugar dela.</p>
<p><strong>HTML</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;bannerposicao&quot;&gt; &lt;a href=&quot;http://www.leandrogarcia.com/blog&quot;&gt; Blog do Garcia &lt;/a&gt; &lt;/div&gt;
&lt;br class=&quot;clear&quot; /&gt;
&lt;div id=&quot;corpo&quot;&gt;Corpo&lt;/div&gt;
Aqui abaixo esta o banner
&lt;div id=&quot;banner&quot;&gt; &lt;img src=&quot;http://www.leandrogarcia.com/blog/wp-content/uploads/2009/03/puboffset.gif&quot; alt=&quot;publicidade&quot; /&gt; &lt;/div&gt;
&lt;br class=&quot;clear&quot; /&gt;
&lt;button onclick=&quot;alert(document.getElementById('bannerposicao').offsetHeight);&quot;&gt; offsetHeight &lt;/button&gt;
&lt;button onclick=&quot;alert(document.getElementById('bannerposicao').offsetWidth);&quot;&gt; offsetWidth &lt;/button&gt;
&lt;button onclick=&quot;alert(document.getElementById('bannerposicao').offsetLeft);&quot;&gt; offsetLeft &lt;/button&gt;
&lt;button onclick=&quot;alert(document.getElementById('bannerposicao').offsetTop);&quot;&gt; offsetTop &lt;/button&gt;
</pre>
<p><strong>CSS</strong></p>
<pre class="brush: css; title: ; notranslate">
#bannerposicao{float:left; width:120px; height:240px; background:#ccc}
#banner{display:block; position:absolute; width:120px; height:240px; background:#ccc}
#corpo{clear:both; height:400px}
</pre>
<p><strong>JS</strong></p>
<pre class="brush: jscript; title: ; notranslate">
function exibepublicidade(){
var $arg = document.getElementById('bannerposicao'); //Essa linha pega os dados da div
var $curTop=0,$curLeft=0,$curWidth=0; // Essa, cria as variáveis de largura, left e top
if($arg.offsetParent) {
do {
$curLeft += $arg.offsetLeft;
$curTop += $arg.offsetTop;
}while($arg = $arg.offsetParent)
} //O if acima, pega a posição da Div em relação à janela
var $posicao = document.getElementById('banner');
$posicao.style.top = $curTop + &quot;px&quot;;
$posicao.style.left = $curLeft + &quot;px&quot;;
}
exibepublicidade();
</pre>
<p>Com o Offset conseguimos pegar a Altura, a Largua a Posição Left e Top do elemento.</p>
<p>Altura (offsetHeight), Largura (offsetWidth), Left (offsetLeft) e Top(offsetTop);</p>
<p><a title="Offset" href="http://tutoriais.leandrogarcia.com/offset/offset.html" target="_blank">Veja o exemplo</a></p>
<p><a href="http://tutoriais.leandrogarcia.com/offset/offset.zip" target="_blank">Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/offset-descobrindo-o-posicionamento-absoluto-de-um-elemento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Galeria de fotos</title>
		<link>http://www.leandrogarcia.com/blog/galeria-de-fotos/</link>
		<comments>http://www.leandrogarcia.com/blog/galeria-de-fotos/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 15:26:10 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[Projetos]]></category>
		<category><![CDATA[fotos]]></category>
		<category><![CDATA[galeria de fotos]]></category>
		<category><![CDATA[imagens]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JS]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=78</guid>
		<description><![CDATA[Recentemente, precisei fazer uma galeria de fotos, onde se pudesse navegar entre as fotos e entre os thumbnails. Eu havia feito algo muito parecido com isso anteriormente, porém em FLASH. Como não sou um ÁS em Action Script, a maneira como fiz, é muito ruim para atualizar.
Desta vez, pensei, preciso de uma em Javascript. Procurei [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente, precisei fazer uma galeria de fotos, onde se pudesse navegar entre as fotos e entre os thumbnails. Eu havia feito algo muito parecido com isso anteriormente, porém em FLASH. Como não sou um ÁS em Action Script, a maneira como fiz, é muito ruim para atualizar.</p>
<p>Desta vez, pensei, preciso de uma em Javascript. Procurei muito web a fora, porém não encontrei uma que se encaixasse com o que eu precisava, então resolvi desenvolver uma.</p>
<p>Comecei definindo o layout e as funcionalidades que eu queria.</p>
<p>Defini que eu queria uma galeria com thumbnails abaixo da foto principal, deveria haver uma navegação entre as fotos, e nos thumbs, poderia haver mais do que o exibido sem para isso quebrar o layout, deveria haver uma legenda e uma subleganda.</p>
<p>A partir disso, desenvolvi o layout e em seguida o script.</p>
<p>Em seguida, testei nos Browsers</p>
<p><strong>Resultado&#8230;</strong></p>
<p><img src="http://gallery.leandrogarcia.com/gal.gif" alt="Galeria" width="400" height="403" /></p>
<p><strong>O Código</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;pksgal&quot;&gt;
	&lt;div id=&quot;palco&quot;&gt;
		&lt;div id=&quot;pict&quot;&gt;&lt;!-- --&gt;&lt;/div&gt;
		&lt;a href=&quot;#&quot; onclick=&quot;return avancaImage()&quot; class=&quot;sail fow&quot;&gt; avançar &lt;/a&gt;
		&lt;a href=&quot;#&quot; onclick=&quot;return retrocedeImage()&quot; class=&quot;sail back&quot;&gt; voltar &lt;/a&gt;
	&lt;/div&gt;
	&lt;div id=&quot;title&quot;&gt;
		&lt;div id=&quot;titulo&quot;&gt;&lt;!-- --&gt;&lt;/div&gt;
		&lt;div id=&quot;deta&quot;&gt;&lt;!-- --&gt;&lt;/div&gt;
	&lt;/div&gt;
	&lt;div class=&quot;nav mr5&quot;&gt; &lt;a href=&quot;#&quot; onclick=&quot;retrocedeThumb()&quot;&gt; &lt;img src=&quot;images/voltar.gif&quot; alt=&quot;voltar&quot; /&gt; &lt;/a&gt; &lt;/div&gt;
	&lt;div id=&quot;thumbs&quot;&gt;
		&lt;div id=&quot;thumbgall&quot;&gt;
			&lt;a href=&quot;images/1.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;Stewie|Family Guy&quot;&gt; &lt;img src=&quot;images/1.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/2.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;American DAD|10x20&quot;&gt; &lt;img src=&quot;images/2.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/3.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;American DAD 2&quot;&gt; &lt;img src=&quot;images/3.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/4.png&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;Bart|The Simpsons&quot;&gt; &lt;img src=&quot;images/4.png&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/5.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;Peter|Family Guy&quot;&gt; &lt;img src=&quot;images/5.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/6.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;Fry|Futurama&quot;&gt; &lt;img src=&quot;images/6.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/7.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;Leela|Futurama&quot;&gt; &lt;img src=&quot;images/7.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/8.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;Homer|The Simpsons&quot;&gt; &lt;img src=&quot;images/8.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/9.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;Marge | The Simpsons&quot;&gt; &lt;img src=&quot;images/9.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/5.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;Peter|Family Guy&quot;&gt; &lt;img src=&quot;images/5.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
			&lt;a href=&quot;images/7.jpg&quot; onclick=&quot;return abrefoto(this)&quot; title=&quot;Leela|Futurama&quot;&gt; &lt;img src=&quot;images/7.jpg&quot; width=&quot;50&quot; height=&quot;50&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	&lt;div class=&quot;nav ml5&quot;&gt; &lt;a href=&quot;#&quot; onclick=&quot;avancaThumb()&quot;&gt; &lt;img src=&quot;images/avancar.gif&quot; alt=&quot;avançar&quot; /&gt; &lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;selecionaP();&lt;/script&gt;
</pre>
<p><strong>Como usar</strong></p>
<p>Baixe o arquivo, copie todo o conteúdo entre o Body cole onde você quer que a galeria fique. Para alterar os thumbs, altere o código &lt;img src=<strong>&#8220;images/1.jpg&#8221;</strong> width=&#8221;50&#8243; height=&#8221;50&#8243; alt=&#8221;" /&gt;, colocando o caminho da sua imagem, coloque quantas você quiser ou precisar.</p>
<p>Para alterar a imagem de destino, altere o &lt;a title=&#8221;Stewie|Family Guy&#8221; onclick=&#8221;return abrefoto(this)&#8221; href=<strong>&#8220;images/1.jpg</strong>&#8220;&gt;, esse é o caminhop onde a imagem está.</p>
<p>Para alterar a legenda, altere o &lt;a title=&#8221;<strong>Stewie|Family Guy</strong>&#8221; onclick=&#8221;return abrefoto(this)&#8221; href=<strong>&#8220;</strong>images/1.jpg&#8221;&gt;, onde o que vem antes de | é a legenda e o que vem depois é a Sublegenda</p>
<p>Vejam funcionando.</p>
<p><a title="PKS-Gallery By Leandro garcia" href="http://gallery.leandrogarcia.com/" target="_blank">http://gallery.leandrogarcia.com/</a></p>
<p>E&#8230; Aproveitem.</p>
<p>Release V 0.1 02/03/2009</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/galeria-de-fotos/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Yslow (Porque está devagar) &#8211; Como medir performance de carregamento das páginas&#8230;</title>
		<link>http://www.leandrogarcia.com/blog/yslow-porque-esta-devagar-como-medir-performance-de-carregamento-das-paginas/</link>
		<comments>http://www.leandrogarcia.com/blog/yslow-porque-esta-devagar-como-medir-performance-de-carregamento-das-paginas/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 19:43:36 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[Complementos do Firefox]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Praticas]]></category>
		<category><![CDATA[css sprites]]></category>
		<category><![CDATA[redução de peso]]></category>
		<category><![CDATA[redução do tamanho]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=75</guid>
		<description><![CDATA[Volto eu aqui para escrever sobre performance de websites.
No mundo atual, as pessoas tem cada vez menos tempo e paciência para esperar por alguma coisa, muito menos se o que devem esperar é uma página ser carregada. Motivo este pelo qual nós, desenvolvedores para internet, devemos pensar na praticidade e velocidade que a página é [...]]]></description>
			<content:encoded><![CDATA[<p>Volto eu aqui para escrever sobre performance de websites.</p>
<p>No mundo atual, as pessoas tem cada vez menos tempo e paciência para esperar por alguma coisa, muito menos se o que devem esperar é uma página ser carregada. Motivo este pelo qual nós, desenvolvedores para internet, devemos pensar na praticidade e velocidade que a página é carregada pelo usuário.</p>
<p>Existem algumas práticas que podem fazer com que seu código mais rapidamente carregado:</p>
<p><strong>Diminua a quantidade de requisições http.</strong></p>
<p>Em cada requisição que um site faz ao servidor, seja qual for (CSS, JS, Imaem, etc), há um trafego de informações, ou seja, sua página envia uma requisição e depois recebe a resposta do servidor, quanto menos requisições você fizer, menor será esse trafego, logo, mais rápido seu site carregará;</p>
<p>Você pode diminuir a rquisição de imagens background através de CSS sprites, já expliquei como fazê-los <a title="CSS Sprites" href="http://www.leandrogarcia.com/blog/css-sprites-a-arte-de-posicionar-imagens/" target="_blank">neste post</a>.</p>
<p>Utilizar o menor número possível de arquivos CSSs, O ideal é usar apenas um, eventualmente um segundo, mas evitar o terceiro, o quarto a todo custo.</p>
<p>Se possível utilizar apenas um arquivo JS.</p>
<p><strong>Cachear a página ou Header Expires</strong></p>
<p>A inconveniência deste é que ele é server-side, ou seja, é feita através do servidor, mas serve para guardar na memória do usuário os arquivos das páginas que ele visitou, ou seja, um re-acesso ao site seria bem mais rápido.</p>
<p><strong>Compressão de componentes (Gzip Components)</strong></p>
<p>Esta é uma outra técnica de redução server-side. Com ela, o servidor entende que deve comprimir (ou &#8220;zipar&#8221;) os código, os CSSs os JSs e, inclusive o HTML.</p>
<p><strong>Colocar as folhas de estilo no Header</strong></p>
<p>Uma outra maneira eficaz de ganhar tempo no carregamento das páginas é, além de usar uma única folha de estilos, chamá-la de um arquivo externo e através da tag link posicionada dentro do header</p>
<p><strong>Colocar os Scripts na parte inferior<br />
</strong></p>
<p>O ideal é colocar os scripts logo antes da tag &lt;/body&gt;, pois desta a página é carregada mais rapidamente. Quando o script está no header, a página primeiro carrega o script depois as demais informações, agora quando esle está posicionado abaixo, a página tem toda a informação carregado e só após isso os scripts são carregados.</p>
<p><strong>Evite expressões em CSSs</strong></p>
<p>Embora existam, as expressões em CSS não são a maneira mais eficaz de criar o seu layout, pois exigem demasiado tempo para serem entendidas pelos navegadores.</p>
<pre><em>ex. background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );</em></pre>
<p><strong>Folhas de Estilo (CSS) e Scripts (JS) externo</strong></p>
<p>Evite colocar estilos e scripts em qualquer lugar no HTML, prefira sempre chama-los através de um arquivo externo. CSSs e JSs, são geralmente caheados pelo browser, o que significa que em uma próxima vista o usuário já terá esses arquivos preveamente carregados.</p>
<p><strong>Otimize seus CSSs e JSs.</strong></p>
<p>Quanto menor for seus códigos, menor tamanho eles terão, logo, mais rápido serão carregado.</p>
<p><a title="Redução do peso nas páginas" href="http://www.leandrogarcia.com/blog/a-importancia-da-reducao-do-peso-das-paginas-e-afins/" target="_blank">Neste link</a>, eu escrevi como se pode otimizar os códigos CSSs</p>
<p><strong>Evite redirecionamentos</strong></p>
<p>Evite ao máximo que suas páginas redirecionem para uma outra, pois desta maneira seu usuário terá que carregar duas ou mais páginas ao invés de uma.</p>
<p><strong>Remova scripts duplicados</strong></p>
<p>Remova todos os scripts duplicados, afinal, não há a necessidade de se carregar duas vezes a mesma coisa.</p>
<p><strong>Reduza o número de DOMs</strong></p>
<p>Reduza ao máximo as &#8220;firulas&#8221; via DOM do seu código.</p>
<p><strong>Iframes</strong></p>
<p>Se necesário for utilizá-los, utilize o menos possível, pois um ifram,e é uma outra página a ser carregada.</p>
<p><strong>Escolha &lt;link&gt; ao invés de @import</strong></p>
<p>Há duas maneiras de se carregar uma folha de estilo externa, através das tags &lt;link&gt; e @import. Prefira sempre a &lt;link&gt;, pois o @import se comporta da mesma maneira como se você colocasse o &lt;link&gt; lá embaixo.</p>
<p>E tem várias outras maneiras.</p>
<p>O Yahoo, disponibiliza um link onde eles explicam maneiras de se melhorar a performance. Além dessas que eu listei acima, há algumas outras. O line é <a href="http://developer.yahoo.com/performance/rules.html" target="_blank">este</a>.</p>
<p><strong>Como verificar como está  o carregamento de meu site?</strong></p>
<p>Não sei dizer quantas maneiras há para se fazer isso, a única que eu conheço, e acredito que a mais eficaz, é o <strong>YSLOW</strong> (Uái islou)  (Porque está devagar).</p>
<p>O YSLOW, é um complemento para o Firefox que pode ser encontrado <a title="YSLOW" href="https://addons.mozilla.org/pt-BR/firefox/addon/5369" target="_blank">neste link</a>.</p>
<p>No Próximo Post eu vou explicar como funciona o Yslow.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/yslow-porque-esta-devagar-como-medir-performance-de-carregamento-das-paginas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Desabilitar o Enter em um form com Javascript</title>
		<link>http://www.leandrogarcia.com/blog/desabilitar-o-enter-em-um-form-com-javascript/</link>
		<comments>http://www.leandrogarcia.com/blog/desabilitar-o-enter-em-um-form-com-javascript/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 19:24:19 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Java Script]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=76</guid>
		<description><![CDATA[Recentemente, estive trabalhando em um sistema com cadastros, quando me deparei com um problema, o Enter.
Não podia Permitir que o usuário desse o action do form ao pressionar o enter, geralemente para mudar de campo.
Pesquisei na Internet, achei algumas opções, mas acabei criando a minha do jeito que eu realmente precisava. Cheguei ao script abaixo.
Linha [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente, estive trabalhando em um sistema com cadastros, quando me deparei com um problema, o Enter.</p>
<p>Não podia Permitir que o usuário desse o action do form ao pressionar o enter, geralemente para mudar de campo.</p>
<p>Pesquisei na Internet, achei algumas opções, mas acabei criando a minha do jeito que eu realmente precisava. Cheguei ao script abaixo.</p>
<pre class="brush: jscript; title: ; notranslate">

function arrumaEnter (field, event) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
var i;
for (i = 0; i &lt; field.form.elements.length; i++)
if (field == field.form.elements[i])
break;
i = (i + 1) % field.form.elements.length;
field.form.elements[i].focus();
return false;
}
else
return true;
}
</pre>
<pre class="brush: jscript; title: ; notranslate">
&lt;input onkeypress=&quot;return arrumaEnter(this, event)&quot; maxlength=&quot;60&quot; name=&quot;emitente&quot; type=&quot;text&quot; /&gt;
</pre>
<p>Linha a linha</p>
<blockquote><p><strong>function arrumaEnter (field, event) { </strong>- Nome da funcção, que recebe o campo e o evento utilizado</p>
<p><strong>var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;</strong> &#8211; Recebe o evento utilizado</p>
<p><strong>if (keyCode == 13) {</strong> &#8211; Se a tecla é o Enter</p>
<p><strong>var i; </strong>- Cria a variável</p>
<p><strong>for (i = 0; i &lt; field.form.elements.length; i++)</strong> &#8211; Roda todos os camposdo form</p>
<p><strong>if (field == field.form.elements[i]) </strong>- Se o campo utilizado é o atual</p>
<p><strong>break;</strong> Para</p>
<p><strong>i = (i + 1) % field.form.elements.length;</strong> &#8211; Adiciona 1 ao campo atual</p>
<p><strong>field.form.elements[i].focus();</strong> &#8211; Dá um foco no próximo campo</p>
<p><strong>return false;</strong> &#8211; Retorna Falso, ou seja, não permite o submit</p>
<p><strong>else</strong> &#8211; Caso contrário</p>
<p><strong>return true;</strong> &#8211; Permite o Submit</p></blockquote>
<blockquote><p><strong><span class="attribute-name">onkeypress</span>=</strong><span class="attribute-value"><strong>&#8220;return arrumaEnter(this, event)&#8221;</strong> &#8211; Chama a função</span></p></blockquote>
<p><a title="Veja" href="http://tutoriais.leandrogarcia.com/arrumaEnter/arrumaEnter.html" target="_blank">Veja</a></p>
<p><a title="download" href="http://tutoriais.leandrogarcia.com/arrumaEnter/arrumaEnter.zip" target="_blank">download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/desabilitar-o-enter-em-um-form-com-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

