<?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>desenvolvimento para web &#187; jquery</title> <atom:link href="http://desenvolvimentoparaweb.com/categoria/jquery/feed/" rel="self" type="application/rss+xml" /><link>http://desenvolvimentoparaweb.com</link> <description>desenvolvimento para web trata de jQuery, CSS, usabilidade, performancem, blogs, WordPress, web design e dicas, em geral, para desenvolvimento web</description> <lastBuildDate>Mon, 30 Jan 2012 23:38:52 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /> <item><title>Como otimizar c&#243;digos jQuery e aumentar a performance do front-end</title><link>http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/</link> <comments>http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/#comments</comments> <pubDate>Mon, 26 Dec 2011 12:00:17 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[jquery]]></category> <category><![CDATA[Otimização]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[UX]]></category> <guid
isPermaLink="false">http://desenvolvimentoparaweb.com/?p=745</guid> <description><![CDATA[Dicas simples de como otimizar c&oacute;digos jQuery e aumentar a performance do front-end]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/otimizar-codigos-jquery-aumentar-performance-front-end.jpg" alt="Como otimizar c&oacute;digos jQuery e aumentar a performance do front-end: representa&ccedil;&atilde;o" title="" width="347" height="346" class="aligncenter size-full wp-image-747" /></p><p><strong>Otimizar c&oacute;digos jQuery</strong> em um site significa <strong>aumentar sua performance</strong>. E, como qualquer desenvolvedor web deveria saber, os componentes e recursos do front-end s&atilde;o respons&aacute;veis por, pelo menos, 80% da performance de p&aacute;ginas web!</p><p>O jQuery, em rela&ccedil;&atilde;o a JavaScript &#8220;puro&#8221;, j&aacute; &eacute; bem simples de se aprender e possui uma gama de recursos incr&iacute;vel! Entretanto, principalmente quem est&aacute; come&ccedil;ando e/ou ainda n&atilde;o entendeu bem a din&acirc;mica da biblioteca, desconhece alguma dicas simples que, se aplicadas, garantem que o desempenho seja aumentado escrevendo menos c&oacute;digo! &Eacute; isso que vamos ver neste artigo e aprender como melhorar c&oacute;digos jQuery para conseguir um desempenho melhor.</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original <a
href="http://24ways.org/2011/your-jquery-now-with-less-suck"><span
lang="en">Your jQuery: Now With 67% Less Suck</span></a>, do blog <a
href="http://24ways.org/"><span
lang="en">24 ways</span></a> &#8211; e sofreu pequenas adapta&ccedil;&otilde;es.</div><h2>Otimiza&ccedil;&atilde;o de seletores</h2><p>Para come&ccedil;ar, vejamos como &eacute; poss&iacute;vel otimizar os seletores no jQuery, otimizando as consultas realizadas e aumentando a performance do c&oacute;digo.</p><h3>Velocidade de seletores</h3><p>Muito do poder do jQuery vem de sua capacidade de selecionar elementos DOM e agir/interagir com eles atrav&eacute;s de seus <a
href="http://api.jquery.com/category/selectors/" title="jQuery Selectors">selectors</a> e, atrav&eacute;s deles, o jQuery prov&ecirc; uma tonelada de maneiras de escolher qual(is) elemento(s) em uma p&aacute;gina se quer trabalhar. No entanto, um n&uacute;mero surpreendente de desenvolvedores web n&atilde;o sabe que os seletores n&atilde;o s&atilde;o todos iguais e que &eacute; incr&iacute;vel a diferen&ccedil;a de desempenho entre 2 seletores que, &agrave; primeira vista, parecem quase id&ecirc;nticos.</p><p>Como exemplo, vejamos 2 maneiras de selecionar todas as tags de par&aacute;grafo dentro de uma div com id espec&iacute;fico:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#id p'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#id'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>&Eacute; surpreendente o fato de que a segunda maneira pode ser <strong>2 vezes mais r&aacute;pida</strong>!</p><p>H&aacute; muitas maneiras diferentes de selecionar elementos usando jQuery; estas podem ser (virtualmente) divididas em 5 diferentes m&eacute;todos. Em ordem, do mais r&aacute;pido para o mais lento, s&atilde;o:</p><ul><li><code>$('#id')</code>. Sem d&uacute;vidas, este &eacute; o selector mais r&aacute;pido, j&aacute; que mapeia diretamente o <code>document.getElementbyId()</code> nativo do JavaScript. Sempre que poss&iacute;vel, os seletores descendentes devem ser feitos com um seletor de ID conjuntamente ao m&eacute;todo <a
href="http://api.jquery.com/find/" title="jQuery .find()">.find()</a>, que limita o escopo do que est&aacute; sendo pesquisado (tal como no exemplo <code>$('#id').find('p')</code> anterior).</li><li><code>$('p'), $('input'), $('form'), [...]</code>. Selecionar elementos pelo nome da tag tamb&eacute;m &eacute; r&aacute;pido, j&aacute; que mapeia diretamente para o m&eacute;todo nativo <code>document.getElementsByTagname()</code>.</li><li><code>$(".class")</code>. Selecionar por nome de classes &eacute; um pouco mais custoso. Enquanto isso &eacute; executado muito bem por navegadores modernos, pode ser que uma lentid&atilde;o seja causada em vers&otilde;es do IE baixo da 9. Por qu&ecirc;? Porque o IE9 foi a primeira vers&atilde;o do Internet Explorer a dar suporte para a fun&ccedil;&atilde;o <code>document.getElementsByClassName()</code>, nativa do JavaScript. Para interpretar isso, browsers mais antigos t&ecirc;m de recorrer ao usos de artif&iacute;cios bem mais custosos, que realmente afetam o desempenho do seletor.</li><li><code>$('[attribute="value"]')</code>. N&atilde;o h&aacute; nenhum m&eacute;todo JavaScript nativo para este tipo seletor, ent&atilde;o, a &uacute;nica maneira que pode realizar essa busca, &eacute; procurar por todo o DOM em busca de combina&ccedil;&otilde;es que satisfa&ccedil;am &agrave; condi&ccedil;&atilde;o do seletor. Navegadores modernos que suportam o m&eacute;todo <code>querySelectorAll()</code> ter&atilde;o um desempenho melhor em certos casos, mas, em geral, este tipo de seletor &eacute; bastante lento.</li><li><code>$(':hidden')</code>. Assim como o caso anterior, n&atilde;o existe um m&eacute;todo JavaScript nativo para usar este tipo de seletor. Pseudo-seletores podem ser extremamente lentos, j&aacute; que a consulta tem que ser executada em cada elemento da p&aacute;gina. Novamente, navegadores modernos que suportam o m&eacute;todo <code>querySelectorAll()</code> se saem ligeiramente melhores, mas tente evitar este tipo de sele&ccedil;&atilde;o. Se realmente for necess&aacute;rio, &eacute; poss&iacute;vel amenizar um pouco usando o <code>.find()</code>, como visto anteriormente. Por exemplo: <code>$('#list').find(':hidden')</code>.</li></ul><h3>Encadeamento</h3><p>Quase todos os m&eacute;todos jQuery retornam um <strong>objeto jQuery</strong>. Isto significa que, quando um m&eacute;todo &eacute; executado, seus resultados s&atilde;o retornados e &eacute; poss&iacute;vel continuar a implementa&ccedil;&atilde;o de mais m&eacute;todos em sequ&ecirc;ncia, o que &eacute; conhecido como  encadeamento ou <em>chaining</em>. Ao inv&eacute;s de escrever o mesmo seletor v&aacute;rias vezes, esta caracter&iacute;stica da biblioteca permite que v&aacute;rias a&ccedil;&otilde;es possam ser executadas de uma vez.</p><p>Sem encadeamento:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#object'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#object'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'color'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'#F0F'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#object'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Com encadeamento:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#object'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'color'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'#F0F'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Isto tem um duplo efeito ao tornar seu c&oacute;digo mais curto e mais r&aacute;pido. M&eacute;todos encadeados s&atilde;o executados mais rapidamente do que v&aacute;rios m&eacute;todos de um seletor em cache e, de ambos os jeitos, s&atilde;o muito mais r&aacute;pidos que v&aacute;rios m&eacute;todos atrav&eacute;s de seletores sem cache. Mas, esperem&#8230; &#8220;Seletor em cache&#8221;? O que &eacute; isso?</p><h3>Seletores em cache</h3><p>Outra maneira f&aacute;cil de melhorar a performance do c&oacute;digo jQuery &#8211; e que parece ser um mist&eacute;rio para a maioria dos desenvolvedores &#8211; &eacute; a ideia de fazer <strong>cache de seletores</strong>. Pense em quantas vezes voc&ecirc; acaba escrevendo o mesmo seletor em seus c&oacute;digos. Cada <code>$('.element')</code> tem que varrer todo o DOM procurando por combina&ccedil;&otilde;es o tempo todo, independentemente se este seletor tenha sido executado antes. Executando a sele&ccedil;&atilde;o uma vez e depois guardando o(s) resultado(s) em uma vari&aacute;vel, significa que a busca no DOM tem que ser feita apenas <strong>uma &uacute;nica vez</strong>. Uma vez que os resultados de um seletor tem sido armazenada em cache, &eacute; poss&iacute;vel fazer qualquer coisa com eles.</p><p>Primeiro, executa-se o seletor desejado (como exemplo, pegar todos os <code>li</code> dentro de uma <code>ul</code> de id &#8220;blocks&#8221;):</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> blocks <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#blocks'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'li'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Agora, &eacute; poss&iacute;vel usar a vari&aacute;vel <code>blocks</code> em qualquer lugar que se queira, sem ter que percorrer todo o DOM novamente em cada vez:</p><pre>
$('#hideBlocks').click(function(){
    blocks.fadeOut();
});
$('#showBlocks').click(function(){
    blocks.fadeIn();
});
</pre><p>Portanto, fica essa preciosa dica: qualquer seletor que &eacute; executado mais de uma vez deve ser armazenado em cache! Veja este <a
href="http://jsperf.com/ns-jq-cached/3">teste no jsperf</a> que mostra o qu&atilde;o mais r&aacute;pido e eficiente &eacute; um seletor cacheado em detrimento a um n&atilde;o cacheado.</p><h2>Delega&ccedil;&atilde;o de Evento ou Event Delegation</h2><p><em>Event listeners</em> consomem mem&oacute;ria. Em sites e aplica&ccedil;&otilde;es complexos n&atilde;o &eacute; incomum ter um monte de event listeners implementados e, felizmente, jQuery fornece m&eacute;todos realmente f&aacute;ceis para umaa gest&atilde;o eficiente event listeners atrav&eacute;s da delega&ccedil;&atilde;o.</p><p>Num exemplo extremo, imagine uma situa&ccedil;&atilde;o em que uma tabela 10×10 precisa ter um event listener em cada uma de suas c&eacute;lulas para que, quando ocorrer um clique em alguma delas, seja adiciona ou removida uma classe que define a cor de fundo da respectiva c&eacute;lula. Uma maneira comum de implementar isso (e algo bastante comum de ser visto em c&oacute;digos jQuery) &eacute;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'table'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'td'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggleClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>O jQuery, a partir de sua vers&atilde;o 1.7, passou a oferecer um novo m&eacute;todo de escuta de eventos: <a
href="http://api.jquery.com/on/" title="jQuery .on()">.on()</a>. Ele age como um utilit&aacute;rio que envolve todos os <em>event listeners</em> anteriores do jQuery em um &uacute;nico e conveniente m&eacute;todo e a forma que ele &eacute; implementado determina como ele se comporta. Ao reescrever o exemplo acima usando .on(), tem-se o seguinte:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'table'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'td'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">on</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggleClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Bastante simples, certo? Mas o problema aqui &eacute; que, mesmo com a mudan&ccedil;a, o c&oacute;digo ainda conta com um <em>event listener</em> para cada c&eacute;lula da tabela&#8230; Uma maneira muito melhor de fazer isso funcionar &eacute; criar um <strong>&uacute;nico</strong> <em>event listener</em> para monitorar os eventos na pr&oacute;pria tabela! Uma vez que a maioria dos eventos faz <em>bubbling</em> (vai percorrendo seus ancestrais em sequ&ecirc;ncia) na &aacute;rvore do DOM, &eacute; poss&iacute;vel vincular um &uacute;nico listener para um elemento (neste caso, <code>table</code>) e esperar eventos serem disparados a partir de seus descendentes. A melhor maneira de fazer isso usando o <code>.on()</code> &eacute;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'table'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">on</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'td'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggleClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Com essa mudan&ccedil;a simples, o n&uacute;mero de <em>event listeners</em> passou de 100 (10&#215;10 c&eacute;lulas da tabela) para <strong>1</strong>! Acredite: a diferen&ccedil;a de performance entre os 2 exemplos acima &eacute; impressionante!</p><p>Se voc&ecirc; est&aacute; usando alguma vers&atilde;o do jQuery abaixo da 1.7, &eacute; poss&iacute;vel fazer a mesma coisa usando <a
href="http://api.jquery.com/delegate/" title="jQuery .delegate()">.delegate()</a>. A sintaxe &eacute; diferente, mas uma consulta &agrave; documenta&ccedil;&atilde;o vai esclarecer as coisas.</p><h2>Manipula&ccedil;&atilde;o de DOM</h2><p>Com jQuery &eacute; f&aacute;cil de manipular o DOM. &Eacute; trivial criar novos n&oacute;s, inserir, retirar outros, mudar as coisas ao redor e assim por diante. o c&oacute;digo para fazer isso &eacute; simples de escrever, mas, toda vez que o DOM &eacute; manipulado, o navegador tem que revisar o DOM, o que pode ser muito custoso e impactar a <strong>performance do front-end</strong>. Um exemplo evidente em que isso acontece &eacute; em um loop longo, seja atrav&eacute;s de um loop <code>for()</code>, <code>while()</code> ou <code>$.each()</code>.</p><p>Como exemplo, vamos supor que existe um array cheio de URLs de imagens de um banco de dados ou alguma chamada em AJAX e, o que se pretende, &eacute; colocar todas essas imagens numa lista n&atilde;o ordenada. Comumente, o c&oacute;digo que se encontra para isso &eacute;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> arr <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>reallyLongArrayOfImageURLs<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
$.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>arr<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>count<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">item</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> newImg <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;li&gt;&lt;img src=&quot;'</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">item</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;&gt;&lt;/li&gt;'</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#imgList'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span>newImg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Existem alguns problemas com isso. Para come&ccedil;ar, h&aacute; a sele&ccedil;&atilde;o de <code>$('#ImgList')</code> em cada itera&ccedil;&atilde;o do loop &#8211; e, como vimos anteriormente, isso n&atilde;o &eacute; nada bom para a performance. O outro problema &eacute; que, a cada vez que o loop repete, &eacute; adicionado um novo <code>li</code> ao DOM. Cada uma dessas inser&ccedil;&otilde;es consome recursos e, se o array &eacute; muito grande, isso poderia levar a uma grande <strong>perda de performance</strong> ou, at&eacute; mesmo, ao temido alerta &#8220;Um script desta p&aacute;gina est&aacute; tornando a p&aacute;gina lenta&#8221;&#8230;</p><p>Uma outra maneira de implementar a solu&ccedil;&atilde;o &eacute;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> arr <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>reallyLongArrayOfImageURLs<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    tmp <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>
&nbsp;
$.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>arr<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>count<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">item</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    tmp <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&lt;li&gt;&lt;img src=&quot;'</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">item</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;&gt;&lt;/li&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#imgList'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span>tmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>O que foi feito, aqui, foi a cria&ccedil;&atilde;o de uma vari&aacute;vel <code>tmp</code> para receber cada <code>li</code> criado. Quando o loop termina, a vari&aacute;vel cont&eacute;m todos os itens de lista na mem&oacute;ria e estes podem ser anexados ao <code>ul</code> todos de uma vez! Como navegadores trabalham melhor com opera&ccedil;&otilde;es de objetos na mem&oacute;ria ao inv&eacute;s de diretamente atualizando o DOM a cada vez, este c&oacute;digo &eacute; bem mais r&aacute;pido e eficiente!</p><h2>Conclus&atilde;o</h2><p>Logicamente, estas dicas de como otimizar c&oacute;digos jQuery para aumentar a performance do front-end n&atilde;o s&atilde;o as &uacute;nicas existentes, mas, certamente, est&atilde;o dentre as mais simples de implementar. Embora algumas das mudan&ccedil;as, individualmente, fa&ccedil;am apenas alguns mil&eacute;simos de segundo de diferen&ccedil;a, ao somar isso, dependendo de sua aplica&ccedil;&atilde;o, &eacute; poss&iacute;vel ter um <strong>aumento de performance de quase 70%</strong>!</p><p>Estudos mostram que o olho humano &eacute; capaz de discernir delays de 100ms (!), portanto, fazer algumas mudan&ccedil;as no c&oacute;digo pode, facilmente, ter um efeito not&aacute;vel sobre o modo (e a percep&ccedil;&atilde;o) de qu&atilde;o bem um seu site ou aplicativo &eacute; executado.</p><p>E voc&ecirc;, tem alguma outra dica de otimiza&ccedil;&atilde;o de c&oacute;digo jQuery para compartilhar? Comente!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/" title="5 dicas para temas WordPress melhores">5 dicas para temas WordPress melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/" title="Melhorando a interação em formulários de busca">Melhorando a interação em formulários de busca</a></li><li><a
href="http://desenvolvimentoparaweb.com/xhtml/textarea-dicas-truques-textarea/" title="Textarea: dicas e truques que você sempre quis saber">Textarea: dicas e truques que você sempre quis saber</a></li><li><a
href="http://desenvolvimentoparaweb.com/indicacoes/ferramentas-e-recursos-para-desenvolvimento-web/" title="Ferramentas e recursos para desenvolvimento web">Ferramentas e recursos para desenvolvimento web</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/8-dicas-fazer-codigos-melhores-jquery/" title="8 dicas para fazer códigos melhores com jQuery">8 dicas para fazer códigos melhores com jQuery</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/truques-de-configuracao-do-wordpress/" title="Truques de configuração do WordPress">Truques de configuração do WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/pergunte-se-a-si-mesmo-questoes-para-desenvolver-um-bom-site/" title="Pergunte-se a si mesmo: questões para desenvolver um bom site">Pergunte-se a si mesmo: questões para desenvolver um bom site</a></li><li><a
href="http://desenvolvimentoparaweb.com/php/dicas-para-otimizar-codigos-php/" title="Dicas para otimizar códigos PHP">Dicas para otimizar códigos PHP</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/wireframe-web-guia-completo/" title="Wireframes para web: guia completo de desenvolvimento">Wireframes para web: guia completo de desenvolvimento</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Como fazer loading em conte&#250;dos do site</title><link>http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/</link> <comments>http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/#comments</comments> <pubDate>Thu, 24 Feb 2011 20:12:22 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[jquery]]></category> <category><![CDATA[Usabilidade]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[Plugins]]></category> <category><![CDATA[UX]]></category> <guid
isPermaLink="false">http://desenvolvimentoparaweb.com/?p=696</guid> <description><![CDATA[Muitos desenvolvedores procuram uma solu&ccedil;&atilde;o eficiente para fazer loading em conte&uacute;dos do site. Com jLoader, isso &eacute; simples.]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/02/como-fazer-loading-conteudos-site-300x300.jpg" alt="Como fazer loading em conte&uacute;dos do site: caneca ilustrativa" title="" width="300" height="300" class="aligncenter size-medium wp-image-697" /></p><p>Quando o assunto &eacute; <strong>desenvolvimento web</strong>, os visitantes de sites n&atilde;o t&ecirc;m muita paci&ecirc;ncia para esperar&#8230; Estudos mostram que se o site n&atilde;o apresentar algum feedback (mostrar alguns elementos/conte&uacute;dos) em poucos segundos, a pessoa desiste de esperar e abandona o site &#8211; com grandes probabilidades de n&atilde;o mais retornar.</p><p>Uma das fun&ccedil;&otilde;es mais interessantes &eacute; apresentar um <strong>loading</strong> (vulgo &#8220;carregamento&#8221;) indicando quantos por cento (%) do site est&atilde;o carregados e o que ainda falta, mostrando para o visitante este feedback que ele precisa para ter certeza de que &#8220;coisas&#8221; est&atilde;o acontecendo.</p><p>Depois do advento do AJAX, nos anos 90 do s&eacute;culo passado, e surgimento de muitos bons frameworks para front-end depois disso, tais como <a
href="http://desenvolvimentoparaweb.com/categoria/jquery/">jQuery</a>, os programadores contamos com excelentes <a
title="ferramentas e recursos" href="http://desenvolvimentoparaweb.com/indicacoes/ferramentas-e-recursos-para-desenvolvimento-web/">ferramentas e recursos</a> para acelerar o carregamento e <a
title="melhorar a performance de sites" href="http://desenvolvimentoparaweb.com/miscelanea/8-maneiras-de-melhorar-a-performance-de-um-site/">melhorar a performance de sites</a>, sendo poss&iacute;vel realizar fun&ccedil;&otilde;es, efeitos e intera&ccedil;&otilde;es que, pouco tempo atr&aacute;s, n&atilde;o eram sequer imaginadas.</p><p>Uma das intera&ccedil;&otilde;es &eacute; <strong>fazer loading em conte&uacute;dos do site</strong>, ou, mesmo, em p&aacute;ginas inteiras do site, e uma das maneias de se fazer isso &eacute; usando o plugin para jQuery <strong>jLoader</strong>.</p><h2>jLoader: din&acirc;mica</h2><p>&Eacute; poss&iacute;vel ver no <a
href="http://code.google.com/p/jloader/">site oficial do jLoad</a> que est&aacute; licenciado sob a <a
href="http://www.gnu.org/licenses/gpl.html">GNU GPL v3</a>, ent&atilde;o seu uso &eacute; gr&aacute;tis e pode ser feito sem maiores complica&ccedil;&otilde;es.</p><p>O que o plugin permite &eacute; mostrar uma barra de carregamento para elementos espec&iacute;ficos da p&aacute;gina (lembrando que &#8220;body&#8221; tamb&eacute;m &eacute; um elemento da p&aacute;gina). Quer dizer, &eacute; poss&iacute;vel tanto carregar elementos espec&iacute;ficos da p&aacute;gina (e o jLoader permite fazer m&uacute;ltiplos carregamentos simult&acirc;neos), quanto carregar a p&aacute;gina inteira, colocando o loader no documento inteiro.</p><p>Algumas das caracter&iacute;sticas do jLoader s&atilde;o:</p><ul><li>M&uacute;ltiplos loadings simult&acirc;neos na mesma p&aacute;gina</li><li>Acompanha redimensionamento da janela</li><li>Se o elemento-alvo tiver imagem de background ou for uma imagem, isso &eacute; levado em considera&ccedil;&atilde;o</li><li>Fun&ccedil;&atilde;o para interromper loadings em triggers de eventos</li><li>Dentre outros</li></ul><h2>jLoader: funcionamento</h2><p>O plugin &eacute; leve (8KB) e conta com somente 1 arquivo (nada de CSS externo). Como citado, &eacute; poss&iacute;vel fazer carregamento para v&aacute;rios elementos da p&aacute;gina ao mesmo tempo; para cada um deles, o m&eacute;todo construtor pode receber argumentos de personaliza&ccedil;&atilde;o:</p><ul><li><strong>overlayColor.</strong> Hexadecimal da cor de background do loading (padr&atilde;o &#8220;#000&#8243;).</li><li><strong>userCallback.</strong> Fun&ccedil;&atilde;o para quando o carregamento termina (padr&atilde;o &#8220;null&#8221;).</li><li><strong>showProgress.</strong> Se a barra de loading vai ou n&atilde;o aparecer (padr&atilde;o &#8220;false&#8221;).</li><li><strong>showProgressText.</strong> Se o n&uacute;mero da porcentagem vai ou n&atilde;o aparecer (padr&atilde;o &#8220;false&#8221;).</li><li><strong>progressColor.</strong> Hexadecimal para a cor da barra de progresso (padr&atilde;o &#8220;#FFF&#8221;).</li><li><strong>textColor.</strong> Hexadecimal para a cor dos n&uacute;meros da porcentagem (padr&atilde;o &#8220;#FFF&#8221;).</li><li><strong>textSize.</strong> Tamanho do texto para os n&uacute;meros da porcentagem (padr&atilde;o &#8220;15&#8243;).</li><li><strong>loaderPosition.</strong> Reposiciona o loader no overlay; por padr&atilde;o &eacute; centalizado (usa-se &#8220;loaderPosition:{top:y,left:x}&#8221;).</li></ul><p>N&atilde;o s&atilde;o tantas op&ccedil;&otilde;es, assim, mas j&aacute; d&aacute; para fazer um n&iacute;vel de personaliza&ccedil;&atilde;o bem interessante. Vamos ver em alguns exemplos.</p><h2>jLoader: exemplo 1</h2><p>Como primeiro exemplo, vamos imaginar que queremos fazer loading em um elemento de id &#8220;escopo&#8221;, mostrando a barra de progresso e o texto da porcentagem de carregamento com texto 20 e, ap&oacute;s o fim do carregamento, dar o trigger para a fun&ccedil;&atilde;o showContent().</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td
class="code"><pre class="php" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>ready<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">var</span> loader <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Loader<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#escopo'</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span>
	    showProgress<span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	    showProgressText<span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	    textSize<span style="color: #339933;">:</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span>
	    userCallback<span style="color: #339933;">:</span>showContent
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    loader<span style="color: #339933;">.</span>Start<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><h2>jLoader: exemplo 2</h2><p>Loadin no elemento de id &#8220;noticias&#8221;, com fundo &#8220;#0B274C&#8221; e cor da barra de carregamento &#8220;#F6911E&#8221;.</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td
class="code"><pre class="php" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>ready<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">var</span> loader <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Loader<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#noticias'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#123;</span>
	    showProgress<span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	    showProgressText<span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	    overlayColor<span style="color: #339933;">:</span><span style="color: #0000ff;">'#0B274C'</span><span style="color: #339933;">,</span>
	    progressColor<span style="color: #339933;">:</span><span style="color: #0000ff;">'#F6911E'</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    loader<span style="color: #339933;">.</span>Start<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><h2>jLoader: exemplo 3</h2><p>Loading o site inteiro, com todas as configura&ccedil;&otilde;es padr&atilde;o, exceto o tamanho do texto, que ser&aacute; &#8220;10&#8243;.</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td
class="code"><pre class="php" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>ready<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">var</span> loader <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Loader<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'body'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#123;</span>
	    textSize<span style="color: #339933;">:</span><span style="color: #cc66cc;">10</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    loader<span style="color: #339933;">.</span>Start<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><h2>Outras customiza&ccedil;&otilde;es</h2><p>Estamos falando de arquivos javascript, meus amigos, e, mesmo que n&atilde;o haja uma fun&ccedil;&atilde;o pr&eacute;-definida e/ou voc&ecirc; queira fazer ajustes mais &#8220;pesados&#8221;, diretamente no core do plugin, basta abrir o arquivo que voc&ecirc; baixou e realizar as mudan&ccedil;as que quiser&#8230;</p><p>Por exemplo, se quiser aumentar a espessura da <strong>barra de loading</strong> (que, por padr&atilde;o, &eacute; de 1px), simplesmente abro o arquivo, procura o trecho de c&oacute;digo que especifica essa caracter&iacute;sticas (na atual vers&atilde;o do jLoader, a 1.1.1, esta caracter&iacute;stica est&aacute; na linha 139 do arquivo <a
href="http://jloader.googlecode.com/files/jLoader.js">jLoader.js</a>).</p><p>Assim como foi explicado no artigo sobre <a
title="cria&ccedil;&atilde;o de URLs amig&aacute;veis com slugs" href="http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/">cria&ccedil;&atilde;o de URLs amig&aacute;veis com slugs</a>, o mesmo vale para qualquer script pronto: basta abrir, estudar e fazer as modifica&ccedil;&otilde;es que cabem ao projeto/resultado pretendido.</p><h2>Conclus&atilde;o</h2><p>Certamente, uma das maiores quest&otilde;es de muitos desenvolvedores &eacute; <strong>como fazer loading no site</strong>. Usando o jLoader, isto est&aacute; resolvido.</p><p>Mas, aten&ccedil;&atilde;o: n&atilde;o &eacute; s&oacute; porque existe o recurso de carregamento, que este deve ser usado em todo e qualquer elemento de todos os sites do mundo&#8230; H&aacute; que se levar em considera&ccedil;&atilde;o o escopo do projeto e se, realmente, existe a necessidade e/ou conveni&ecirc;ncia em usar o recurso.</p><p>Se realmente for necess&aacute;rio, use o jLoader para fazer loadings de elementos no site (ou p&aacute;ginas completas) e desfrute das facilidades de fazer isso de forma t&atilde;o simples, aumentando a boa experi&ecirc;ncia que os visitantes ter&atilde;o!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/" title="Como otimizar códigos jQuery e aumentar a performance do front-end">Como otimizar códigos jQuery e aumentar a performance do front-end</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/" title="5 dicas para temas WordPress melhores">5 dicas para temas WordPress melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/otimizacao-wordpress-performance-desempenho-blog-site/" title="Otimização WordPress: aumente a performance e desempenho de seu blog / site">Otimização WordPress: aumente a performance e desempenho de seu blog / site</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-criar-sumarios-dinamicamente-com-o-toc-table-of-contents-jquery-plugin-jquerytoc/" title="Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin">Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin</a></li><li><a
href="http://desenvolvimentoparaweb.com/indicacoes/25-extensoes-para-o-firefox-para-aumentar-a-produtividade-no-dia-a-dia-na-web/" title="25 extensões para o Firefox para aumentar a produtividade no dia-a-dia na web">25 extensões para o Firefox para aumentar a produtividade no dia-a-dia na web</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/wireframe-web-guia-completo/" title="Wireframes para web: guia completo de desenvolvimento">Wireframes para web: guia completo de desenvolvimento</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/" title="Melhorando a interação em formulários de busca">Melhorando a interação em formulários de busca</a></li><li><a
href="http://desenvolvimentoparaweb.com/xhtml/textarea-dicas-truques-textarea/" title="Textarea: dicas e truques que você sempre quis saber">Textarea: dicas e truques que você sempre quis saber</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/8-maneiras-de-melhorar-a-performance-de-um-site/" title="8 maneiras de melhorar a performance de um site">8 maneiras de melhorar a performance de um site</a></li><li><a
href="http://desenvolvimentoparaweb.com/javascript/melhores-editores-wysiwyg-para-seu-projeto/" title="Melhores editores WYSIWYG para seu projeto">Melhores editores WYSIWYG para seu projeto</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/feed/</wfw:commentRss> <slash:comments>13</slash:comments> </item> <item><title>Melhorando a intera&#231;&#227;o em formul&#225;rios de busca</title><link>http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/</link> <comments>http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/#comments</comments> <pubDate>Tue, 03 Aug 2010 19:44:05 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[jquery]]></category> <category><![CDATA[Usabilidade]]></category> <category><![CDATA[Exemplos]]></category> <category><![CDATA[Otimização]]></category> <category><![CDATA[UX]]></category> <guid
isPermaLink="false">http://desenvolvimentoparaweb.com/?p=657</guid> <description><![CDATA[Aprenda a melhorar a intera&ccedil;&atilde;o em formul&aacute;rios de busca com poucas linhas de c&oacute;digo e aumente a usabilidade de seu form de busca]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/08/melhorar-interacao-formularios-busca.jpg" alt="Melhorando a intera&ccedil;&atilde;o em formul&aacute;rios de busca" title="" width="250" height="250" class="aligncenter size-full wp-image-658" /></p><p>Melhorar a intera&ccedil;&atilde;o do campo de busca de um site permite que as pessoas que usam tal formul&aacute;rio para buscar tenham uma melhor experi&ecirc;ncia de uso (leia-se: <strong>usabilidade</strong>). Com pequenos detalhes, um pouquinho de bom-senso e algumas poucas linhas de jQuery, &eacute; poss&iacute;vel promover efeitos interessante no campo de busca.</p><p>Para ficar claro, ser&aacute; abordada a seguinte intera&ccedil;&atilde;o:</p><ul><li>Campo de busca &eacute; &#8220;populado&#8221; com um termo pr&eacute;-definido;</li><li>Quando o campo recebe o foco, caso tenha o termo pr&eacute;-definido, &eacute; limpo para a pessoa escrever o que pretende;</li><li>Quando o campo perde o foco, se o conte&uacute;do for o mesmo do termo pr&eacute;-definido (ou em branco), este termo reaparece;</li><li>Quando o bot&atilde;o &eacute; pressionado, caso o valor seja termo pr&eacute;-definido ou esteja em branco, o form n&atilde;o submete e o foco passa ao campo apropriado.</li></ul><h2>O formul&aacute;rio de busca</h2><p>Um exemplo de um formul&aacute;rio simples de busca, que pode ser usado em &#8220;sites reais&#8221;, profissionalmente, pode ser do tipo:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;get&quot;</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;script.php&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form-input&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form-input&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Snippets ou Scripts&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form-submit&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form-submit&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Buscar&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span></pre></div></div><h2>Termo pr&eacute;-definido</h2><p>A express&atilde;o &#8220;termo pr&eacute;-definido&#8221; &eacute; mais adequada, j&aacute; que cada site pede um &#8220;label&#8221; de indica&ccedil;&atilde;o diferente, conforme as especifica&ccedil;&otilde;es e necessidades deste. Algumas pessoas preferem o termo &#8220;Buscar&#8221; ou &#8220;Procurar&#8221; com um bot&atilde;o de label &#8220;OK&#8221; ou &#8220;Vai&#8221;; j&aacute; alguns sites preferem explicitar a fun&ccedil;&atilde;o da busca com algo do tipo &#8220;Produtos ou Servi&ccedil;os&#8221;, acompanhado de um bot&atilde;o com o label &#8220;Buscar&#8221; (o que &eacute; uma abordagem bem interessante).</p><p>De uma maneira ou de outra, &eacute; preciso definir que termo ser&aacute; esse. Para nosso exemplo, vamos supor que seja um site voltado a <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento web</a> e o termo pr&eacute;-definido ser&aacute; &#8220;<strong>Snippets ou Scripts</strong>&#8220;. Vamos criar uma express&atilde;o regular simples com uma parte do termo pr&eacute; definido:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">patt <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Snippets ou'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>E por que n&atilde;o colocar a express&atilde;o inteira? Tamb&eacute;m poderia ser feito, mas o &#8220;esfor&ccedil;o&#8221; para identificar o padr&atilde;o aumenta em rela&ccedil;&atilde;o ao tamanho/complexidade da mesma. Sinta-se &agrave; vontade para fazer v&aacute;rios testes.</p><h2>Melhorando a intera&ccedil;&atilde;o do formul&aacute;rio de busca</h2><p>A melhora da intera&ccedil;&atilde;o se de duas formas:</p><ul><li>Inter&ccedil;&atilde;o com o campo;</li><li>Intera&ccedil;&atilde;o com o bot&atilde;o;</li></ul><h3>Intera&ccedil;&atilde;o com o campo</h3><p>Segundo o planejamento, o que se pretende &eacute; &#8220;Quando o campo recebe o foco, caso tenha o termo pr&eacute;-definido, &eacute; limpo para a pessoa escrever o que pretende&#8221;. A l&oacute;gica &eacute; testar a express&atilde;o regular: caso o teste seja positivo, o campo &eacute; limpo e recebe o foco para a pessoa escrever. Ao perder o foco, &#8220;se o conte&uacute;do for o mesmo do termo pr&eacute;-definido (ou em branco), este termo reaparece&#8221;.</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>
.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>patt.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
.<span style="color: #000066;">blur</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Snippets ou Scripts'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><h3>Intera&ccedil;&atilde;o com o bot&atilde;o</h3><p>A <strong>intera&ccedil;&atilde;o com o bot&atilde;o</strong> tamb&eacute;m &eacute; importante &#8211; e, infelizmente, &eacute; um ponto esquecido por muitos desenvolvedores. A ideia &eacute;, ao se clicar no bot&atilde;o, testar se a express&atilde;o &#8220;bate&#8221; ou o campo est&aacute; em branco e, caso seja um desses casos, dar o foco no campo.</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-submit'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>patt.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#busca-bottom'</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// Impede que o form seja submetido</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>N&atilde;o &eacute; necess&aacute;rio dar a instru&ccedil;&atilde;o de limpar o campo no foco porque a pe&ccedil;a de script anterior, sobre a intera&ccedil;&atilde;o com o campo, j&aacute; faz isso.</p><h3>JavaScript final</h3><p>Juntando os peda&ccedil;os de c&oacute;digos, j&aacute; devidamente explicados, tem-se o seguinte:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>
.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>patt.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
.<span style="color: #000066;">blur</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Snippets ou Scripts'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-submit'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>patt.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#busca-bottom'</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// Impede que o form seja submetido</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><h2>Conclus&atilde;o sobre a melhora da intera&ccedil;&atilde;o em formul&aacute;rios de busca</h2><p>Certamente essas n&atilde;o s&atilde;o as &uacute;nicas melhorias cab&iacute;veis para a <strong>melhoria de usabilidade</strong> e <strong>intera&ccedil;&atilde;o</strong> de um formul&aacute;rio de busca simples, mas, certamente, s&atilde;o 2 medidas muito bem-vindas para que a experi&ecirc;ncia e &#8220;agradabilidade&#8221; sejam melhoradas.</p><p>Poderia haver, por exemplo, uma <em>tooltip</em> com o que se pode encontrar no site e/ou fornecendo algum exemplo de termo; implementar uma solu&ccedil;&atilde;o de <em>autocomplete</em>; ou, ao inv&eacute;s de limpar o campo, apenas selecionar todo o termo para, j&aacute; digita&ccedil;&atilde;o, substitu&iacute;-lo pelo o que est&aacute; sendo digitado. Depende da necessidade do projeto.</p><p>E voc&ecirc;, tem alguma <strong>dica ou solu&ccedil;&atilde;o interessante</strong> para melhorar a intera&ccedil;&atilde;o em formul&aacute;rios de busca?</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/" title="Como otimizar códigos jQuery e aumentar a performance do front-end">Como otimizar códigos jQuery e aumentar a performance do front-end</a></li><li><a
href="http://desenvolvimentoparaweb.com/xhtml/textarea-dicas-truques-textarea/" title="Textarea: dicas e truques que você sempre quis saber">Textarea: dicas e truques que você sempre quis saber</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-criar-sumarios-dinamicamente-com-o-toc-table-of-contents-jquery-plugin-jquerytoc/" title="Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin">Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/wireframe-web-guia-completo/" title="Wireframes para web: guia completo de desenvolvimento">Wireframes para web: guia completo de desenvolvimento</a></li><li><a
href="http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/" title="JSON &#8211; JavaScript Object Notation">JSON &#8211; JavaScript Object Notation</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/" title="5 dicas para temas WordPress melhores">5 dicas para temas WordPress melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/" title="URLs amigáveis (slug) à WordPress">URLs amigáveis (slug) à WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/javascript/melhores-editores-wysiwyg-para-seu-projeto/" title="Melhores editores WYSIWYG para seu projeto">Melhores editores WYSIWYG para seu projeto</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/15-comandos-sql-wordpress/" title="15 fantásticos comandos SQL para WordPress">15 fantásticos comandos SQL para WordPress</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>8 dicas para fazer c&#243;digos melhores com jQuery</title><link>http://desenvolvimentoparaweb.com/jquery/8-dicas-fazer-codigos-melhores-jquery/</link> <comments>http://desenvolvimentoparaweb.com/jquery/8-dicas-fazer-codigos-melhores-jquery/#comments</comments> <pubDate>Tue, 12 Jan 2010 16:18:58 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[jquery]]></category> <category><![CDATA[Otimização]]></category> <category><![CDATA[Performance]]></category> <guid
isPermaLink="false">http://www.desenvolvimentoparaweb.com/?p=482</guid> <description><![CDATA[8 dicas para fazer c&oacute;digos melhores com jQuery, otimizar seus c&oacute;digos ter uma melhor performance do melhor framework javascript da atualidade!]]></description> <content:encoded><![CDATA[<p><a
href="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2010/01/jquery-dicas-codigos-melhores-jquery.jpg"><img
class="aligncenter size-full wp-image-522" src="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2010/01/jquery-dicas-codigos-melhores-jquery.jpg" alt="" width="450" height="253" /></a></p><p>jQuery &eacute; um <em>framework javascript</em> que <span
style="text-decoration: line-through;">est&aacute; se tornando</span> se tornou incrivelmente popular. &Eacute; r&aacute;pido, f&aacute;cil de usar e criar plugins personalizados e componentes s&atilde;o feitos rapidamente. Atualmente, todo mundo &eacute; um desenvolvedor jQuery e o reposit&oacute;rio de <em>plugins</em> est&aacute; praticamente explodindo com a adi&ccedil;&otilde;es praticamente di&aacute;rias.</p><p>&Agrave; luz de tudo isto, aqui est&atilde;o<strong> 8 excelentes dicas para fazer c&oacute;digos melhores com jQuery</strong> e se tornar um melhor programador em jQuery que voc&ecirc; deve considerar antes de come&ccedil;ar seu pr&oacute;ximo projeto.</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original “<a
href="http://monc.se/kitchen/150/eight-tips-that-makes-you-a-better-jquery-coder">Eight Tips That Makes You a Better jQuery</a>“, do blog <a
href="http://monc.se/kitchen/">David&#8217;s Kitchen</a>, e sofreu pequenas adapta&ccedil;&otilde;es.</div><h2>Mantenha a acessibilidade atrav&eacute;s da degrada&ccedil;&atilde;o</h2><p>Com jQuery ser popular &eacute; assim, mais e mais pessoas est&atilde;o escrevendo <em>plugins</em> e criando pacotes de componentes que est&atilde;o prontos para uso. Mas alguns desenvolvedores tem em mente que projetos <em>online</em> tamb&eacute;m devem funcionar sem <em>javascript</em> ativado. Essa &eacute; uma das principais raz&otilde;es para fazer javascript n&atilde;o obstrusivo. Como exemplo, vejam:</p><p>CSS</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.animate</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #993333;">red</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><p>jQuery</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.animate'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeIn</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Usaria jQuery para dar um fadeIn() com a classe &#8220;animate&#8221;. Mas se o <em>javascript</em> estiver desativado, o navegador ainda analisa a CSS e, naturalmente, os elementos nunca ser&atilde;o mostrados!</p><p>Ao inv&eacute;s disso, tenha sempre o h&aacute;bito de separar &#8220;javascript CSS&#8221; e &#8220;CSS puro&#8221;. Tente isto:</p><p>CSS</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.animate</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #993333;">red</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #6666ff;">.animate_js</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><p>jQuery</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.animate'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'animate_js'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeIn</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Dessa forma, voc&ecirc; pode estilizar os elementos para cada situa&ccedil;&atilde;o e manter a degrada&ccedil;&atilde;o de uma forma sensata. Como sempre, sem testar seu c&oacute;digo <em>javascript </em>ativado antes da implementa&ccedil;&atilde;o.</p><h2>Mover efeitos visuais para a camada de apresenta&ccedil;&atilde;o</h2><p>Quando for escrever <em>javascript</em>, mantenha sempre o foco nos <strong>comportamentos</strong>. jQuery n&atilde;o &eacute; CSS, ent&atilde;o esteja atento as diferen&ccedil;as fundamentais entre a apresenta&ccedil;&atilde;o e comportamento.</p><p>Por exemplo, quase sempre &eacute; uma boa ideia adicionar classes ao inv&eacute;s de trabalhar com somente propriedades CSS. Evite <em>fades</em> e &#8220;glamour&#8221; nas fun&ccedil;&otilde;es. Guarde os efeitos para uma fant&aacute;stica apresenta&ccedil;&atilde;o, mas cuidado no uso em fun&ccedil;&otilde;es <em>javascript </em>- nem todos compartilham seu gosto visual!</p><h2>Usar Firebug e console.log</h2><p><a
href="http://www.getfirebug.com/">Firebug</a> &eacute; seu amigo quando est&aacute; desenvolvendo com<strong> jQuery</strong> &#8211; na verdade, no desenvolvimento <em>web</em>, geral. E assim &eacute; o comando <strong>console.log</strong>, que graciosamente substitui o alert() chato.</p><p>Basta digitar <strong>console.log()</strong> para debugar sempre que voc&ecirc; precisar no seu c&oacute;digo. Mas lembre-se de remover essas instru&ccedil;&otilde;es antes da produ&ccedil;&atilde;o, uma vez que muitos navegadores ter&atilde;o conflitos, incluindo o IE (claro!).</p><p>E, para outras funcionalidades do Firebug, confira a <a
href="http://getfirebug.com/console.html">Console API</a>.</p><h2>Definir padr&otilde;es sensatos e utilizar uma quantidade limitada de par&acirc;metros</h2><p>Quando voc&ecirc; &eacute; mordido pelo inseto jQuery e come&ccedil;a a criar plugins, frequentemente tenta maximizar o n&uacute;mero de par&acirc;metros para tornar o desenvolvimento o mais flex&iacute;vel poss&iacute;vel.</p><p>Isso tudo &eacute; muito nobre, mas que fique claro e que tente n&atilde;o confundir o desenvolvedor <em>web</em> com par&acirc;metros min&uacute;sculos que quase n&atilde;o fazem diferen&ccedil;a (como <em>fades</em>, velocidades, etc.). Ao inv&eacute;s disso, passe par&agrave;metro de objeto e defina padr&otilde;es sens&iacute;veis. Seu c&oacute;digo n&atilde;o precisa fazer literalmente tudo!</p><h2>Encapsular seu pr&oacute;prio <em>alias</em></h2><p>jQuery n&atilde;o &eacute; o &uacute;nico framework que usa a abrevia&ccedil;&atilde;o de d&oacute;lar ($). V&aacute;rios <em>plugins </em>JQuery e trechos de c&oacute;digo tamb&eacute;m o utilizam para definir <em>onDomReady callbacks</em> e fun&ccedil;&otilde;es de seletores CSS, mas voc&ecirc; pode acabar (e evitar) com esse conflitos.</p><p>Voc&ecirc; pode usar seu pr&oacute;prio alias (que pode continuar sendo o &#8220;$&#8221;) desse jeito:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// código usando alias próprio</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>O exemplo acima usa tanto o atalho para $(document).ready(), quanto o argumento para escrever c&oacute;digo jQuery em <em>failsafe</em> usando o <em>alias</em> $, sem contar com o <em>alias</em> global. Voc&ecirc; pode e deve, igualmente, integrar o $ quando for criar plugins:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// código do plugin, usando $ quantas vezes quiser</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><h2>Definir <em>callbacks</em> pr&oacute;prios</h2><p>Quando estiver criando plugins para jQuery, &eacute; uma boa id&eacute;ia deixar o desenvolvedor atribuir <em>callbacks </em>pr&oacute;prios como como par&acirc;metros de fun&ccedil;&otilde;es, tornando poss&iacute;vel personalizar ainda mais o <em>plugin</em>. Ent&atilde;o, ao inv&eacute;s de for&ccedil;ar os efeitos de <em>callback</em> dentro do <em>plugin</em>, engatilhe fun&ccedil;&otilde;es de eventos e defina os efeitos livremente.</p><p>Aqui est&aacute; um exemplo em que passamos a fun&ccedil;&atilde;o onFade para o <em>plugin</em>, escrito como um simples <em>plugin </em>fadeIn:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/*
This plugin fades an element and triggers the onFade when completed
&nbsp;
EXAMPLE USAGE:
  $('.fademe').customFade({
    fadeSpeed: 50,
    onFade: function(elem) {
      console.log(elem+' has faded!')
    }
  });
*/</span>
&nbsp;
jQuery.<span style="color: #660066;">fn</span>.<span style="color: #660066;">customFade</span><span style="color: #009900;">&#40;</span>$params<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #003366; font-weight: bold;">var</span> $defaults <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
    fadeSpeed<span style="color: #339933;">:</span> <span style="color: #CC0000;">1000</span><span style="color: #339933;">,</span>
    onFade<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>element<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
  <span style="color: #003366; font-weight: bold;">var</span> $p <span style="color: #339933;">=</span> $.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>$defaults<span style="color: #339933;">,</span> $params<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeIn</span><span style="color: #009900;">&#40;</span>$p.<span style="color: #660066;">fadeSpeed</span><span style="color: #339933;">,</span>$p.<span style="color: #660066;">onFade</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><h2>Ficar atento com as diferen&ccedil;as entre navegadores</h2><p>jQuery &eacute; bastante propenso a ser <em>crossbrowser</em>. Mas ainda existem falhas, especialmente com os navegadores como o Safari, que tem um <em>trigger</em> diferente para onLoad, e IE, evidentemente. Sempre teste em v&aacute;rios navegadores e preste muita aten&ccedil;&atilde;o em quando e onde as falhas ocorrem.</p><h2>N&atilde;o ser excessivo e definir seu prop&oacute;sito</h2><p>Certifique-se de que n&atilde;o est&aacute; usando jQuery apenas porque voc&ecirc; pode. Sempre analise suas necessidades e tenha uma ideia clara do que voc&ecirc; quer alcan&ccedil;ar antes mesmo de escrever a primeira linha. Fa&ccedil;a <em>sketches </em>de seu c&oacute;digo e discuta suas ideias com seus pares antes da codifica&ccedil;&atilde;o (se n&atilde;o estiver trabalhando sozinho, claro).</p><p>N&atilde;o reinvente a roda a menos que voc&ecirc; esteja fazendo isso para aprender e/ou se educar, analise o c&oacute;digo de <em>plugins</em> de qualidade para inspirar-se e ver o que tem sido feito por bons programadores.</p><p>Bons c&oacute;digos!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/" title="Como otimizar códigos jQuery e aumentar a performance do front-end">Como otimizar códigos jQuery e aumentar a performance do front-end</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/" title="5 dicas para temas WordPress melhores">5 dicas para temas WordPress melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/indicacoes/ferramentas-e-recursos-para-desenvolvimento-web/" title="Ferramentas e recursos para desenvolvimento web">Ferramentas e recursos para desenvolvimento web</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/truques-de-configuracao-do-wordpress/" title="Truques de configuração do WordPress">Truques de configuração do WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/pergunte-se-a-si-mesmo-questoes-para-desenvolver-um-bom-site/" title="Pergunte-se a si mesmo: questões para desenvolver um bom site">Pergunte-se a si mesmo: questões para desenvolver um bom site</a></li><li><a
href="http://desenvolvimentoparaweb.com/php/dicas-para-otimizar-codigos-php/" title="Dicas para otimizar códigos PHP">Dicas para otimizar códigos PHP</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/" title="Melhorando a interação em formulários de busca">Melhorando a interação em formulários de busca</a></li><li><a
href="http://desenvolvimentoparaweb.com/xhtml/textarea-dicas-truques-textarea/" title="Textarea: dicas e truques que você sempre quis saber">Textarea: dicas e truques que você sempre quis saber</a></li><li><a
href="http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/" title="URLs amigáveis (slug) à WordPress">URLs amigáveis (slug) à WordPress</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/8-dicas-fazer-codigos-melhores-jquery/feed/</wfw:commentRss> <slash:comments>9</slash:comments> </item> <item><title>NextGEN Gallery com SexyLightBox: sua galeria de imagens mais sexy</title><link>http://desenvolvimentoparaweb.com/jquery/nextgen-gallery-com-sexylightbox-sua-galeria-de-imagens-mais-sexy/</link> <comments>http://desenvolvimentoparaweb.com/jquery/nextgen-gallery-com-sexylightbox-sua-galeria-de-imagens-mais-sexy/#comments</comments> <pubDate>Fri, 20 Nov 2009 17:38:10 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[indicações]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[jquery]]></category> <category><![CDATA[Plugins]]></category> <category><![CDATA[Web Design]]></category> <guid
isPermaLink="false">http://www.desenvolvimentoparaweb.com/?p=491</guid> <description><![CDATA[Aumente a experi&ecirc;ncia dos visitantes de seu site de forma surpreendente atrav&eacute;s de uma galeria de imagens fant&aacute;stica!]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-494" title="NextGen Gallery com SexLightbox no WordPress" src="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2009/11/nextgen-gallery-sexlightbox-wordpress.jpg" alt="NextGen Gallery com SexLightbox no WordPress" width="400" height="232" /></p><p>&Eacute; fato que o <em>plugin</em> <a
title="NextGEN Gallery." href="http://wordpress.org/extend/plugins/nextgen-gallery/">NextGEN Gallery</a> do WordPress &eacute; o melhor quando o assunto &eacute; <strong>gerenciamento de galerias de imagens</strong>. Com NextGEN Gallery &eacute; poss&iacute;vel criar galerias facilmente, acrescentar/retirar imagens em modo <em>batch</em> (&eacute; poss&iacute;vel enviar um arquivo .zip e ele &#8220;abre&#8221; as imagens numa galeria), d&aacute; pra criar &aacute;lbuns, copiar/transferir imagens entre galerias, inserir marca d&#8217;&aacute;gua automaticamente, enfim, o NextGEN Gallery &eacute; bem conhecido na comunidade WordPress e certamente est&aacute; no &#8220;Top 5&#8243; de plugins!</p><p>Existe, tamb&eacute;m, apesar n&atilde;o ser t&atilde;o conhecido, um script &agrave; &#8220;lightbox&#8221; muito bonito e interessante: <a
title="Site do SexyLightbox" href="http://www.coders.me/web-html-js-css/javascript/sexy-lightbox-2">SexyLightBox</a>. Como &eacute; poss&iacute;vel ver em sua p&aacute;gina, o efeito que ele oferece &eacute; bem interessante e, de certa maneira, diferenciado dos outros <em>lightboxes</em> que encontramos por a&iacute; (&ecirc;nfase ao fato de as imagens serem apresentadas em tamanho completo respeitando a resolu&ccedil;&atilde;o do navegador do visitante).</p><p>Aproveitando que o <strong>NextGEN Gallery</strong> oferece a possibilidade de se utilizar <em>script </em>de terceiros para a exibi&ccedil;&atilde;o de suas galerias e somado ao fato de que o <strong>SexyLightBox</strong> &eacute; realmente interessante&#8230; <strong>NextGEN Gallery + SexyLightBox = Galerias de Imagens Sexy!</strong></p><h2>Baixando, instalando e configurando NextGEN Gallery</h2><p>O primeiro passo &eacute; baixar e instalar NextGEN Gallery no seu WordPress. Devido ao fato de eles serem de &#8220;naturezas&#8221; diferentes (o primeiro &eacute; um plugin do WordPress; o segundo &eacute; um script que pode ser usado em qualquer tipo de site), a maneira de instalar e usar cada um deles &eacute; diferente.</p><p>Para o <strong>NextGEN Gallery</strong>, devido ao fato de ser um <strong>plugin do WordPress</strong>, a instala&ccedil;&atilde;o &eacute; aquela, mesma, que j&aacute; estamos acostumados:</p><ul><li><a
href="http://wordpress.org/extend/plugins/nextgen-gallery/">Baixar o NextGEN Gallery</a>;</li><li>Descompactar em sua pasta <strong>wp-content/plugins</strong>;</li><li>Habilitar o plugin.</li></ul><p>Depois, perceba que aparece em seus menus um novo m&oacute;dulo, &#8220;Gallery&#8221;, com subop&ccedil;&otilde;es para controle do NextGen.</p><p>&Eacute; poss&iacute;vel traduzir as op&ccedil;&otilde;es para v&aacute;rios idiomas, inclusive L&iacute;ngua Portuguesa. <a
href="http://alexrabe.de/wordpress-plugins/nextgen-gallery/languages/">Baixe o pacote Portuguese / Brazilian Portugu&ecirc;s [pt_BR]</a> nas tradu&ccedil;&otilde;es oficiais e fa&ccedil;a upload do arquivo <strong>.mo</strong> para <strong>wp-content/plugins/nextgen-gallery/lang</strong> e, automaticamente, os menus ser&atilde;o traduzidos.</p><div
id="attachment_492" class="wp-caption aligncenter" style="width: 155px"><img
class="size-full wp-image-492" title="Painel NextGen Gallery no WordPress" src="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2009/11/painel-nextgen-gallery-wordpress.gif" alt="Painel NextGen Gallery no WordPress" width="145" height="287" /><p
class="wp-caption-text">Painel NextGen Gallery em L&iacute;ngua Portuguesa</p></div><p>Para j&aacute; preparar o NextGen para trabalhar com o SexyLightBox, acesse em seu painel WordPress <strong>Galeria &gt; Op&ccedil;&otilde;es &gt; Efeitos</strong> e altere as op&ccedil;&otilde;es para:</p><ul><li><strong>Efeito Javascript para miniaturas:</strong> Personalizado;</li><li><strong>Linha de c&oacute;digo do link:</strong> rel=&#8221;sexylightbox&#8221;.</li></ul><div
id="attachment_493" class="wp-caption aligncenter" style="width: 455px"><img
class="size-full wp-image-493" title="Configura&ccedil;&atilde;o NextGen Gallery para SexyLightbox" src="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2009/11/painel-nextgen-gallery-wordpress-sexy-lightbox.gif" alt="Configura&ccedil;&atilde;o NextGen Gallery para SexyLightbox" width="445" height="250" /><p
class="wp-caption-text"></p></div><h2>Baixando, instalando e configurando SexyLighbox</h2><p>V&aacute; at&eacute; o site oficial do SexyLighbox para <a
href="http://www.coders.me/web-html-js-css/javascript/sexy-lightbox-2#download">fazer download do SexyLightbox</a>. Depois, &eacute; preciso subir a pasta descompactada para o servidor.</p><p>N&atilde;o sei voc&ecirc;, mas eu costumo criar uma pasta &#8220;js&#8221; dentro do meu tema para tudo ficar organizado e eu poder usar as fun&ccedil;&otilde;es de caminho relativo do WordPress tranquilamente. Ent&atilde;o, uma estrutura que eu usaria para o caso seria <strong>wp-content/themes/MEU-TEMA/js/sexy-lightbox-2.3</strong> (essa &eacute; a vers&atilde;o mais atual no dia de publica&ccedil;&atilde;o deste artigo).</p><p>Agora &eacute; o momento de chamar o SexyLightbox para que funcione em seu tema. H&aacute; <strong>muitas</strong> maneiras diferentes de mexer com chamadas a scripts no WordPress; no caso, vou mostrar uma delas e, em artigos futuros, vou comentando sobre as outras (essa &eacute; a deixa para voc&ecirc; <a
href="http://www.desenvolvimentoparaweb.com/feed">assinar o feed do desenvolvimento para web</a>).</p><p>Uma coisa importante &eacute; que o SexyLighbox n&atilde;o &eacute; feito para ser usado em <em>standalone</em>, ele deve estar associado a jQuery ou Mootools. Obviamente vamos usar jQuery para o servi&ccedil;o!  ;-)</p><p>Ent&atilde;o, o c&oacute;digo com as respectivas chamadas a scripts e folhas de estilo fica assim:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php print get_bloginfo('template_url') ?&gt;/js/sexy-lightbox-2.3/jQuery/jquery.easing.1.3.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php print get_bloginfo('template_url') ?&gt;/js/sexy-lightbox-2.3/jQuery/sexylightbox.v2.3.jquery.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?php print get_bloginfo('template_url') ?&gt;/js/sexy-lightbox-2.3/jQuery/sexylightbox.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    SexyLightbox.<span style="color: #660066;">initialize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>color<span style="color: #339933;">:</span><span style="color: #3366CC;">'white'</span><span style="color: #339933;">,</span> imagesdir<span style="color: #339933;">:</span> <span style="color: #3366CC;">'&lt;?php print get_bloginfo('</span>template_url<span style="color: #3366CC;">') ?&gt;/js/sexy-lightbox-2.3/jQuery/sexyimages'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div><p>Perceba que alguns par&acirc;metros foram passados na inicializa&ccedil;&atilde;o do script do SexyLightbox. O grande &#8220;trunfo&#8221; &eacute; usar o par&acirc;metro <strong>imagesdir</strong>, porque na documenta&ccedil;&atilde;o est&aacute; errado!</p><h3>Personalizando seu SexyLighbox</h3><p>Uma coisa muito boa &eacute; que h&aacute; uma pasta &#8220;PSDs&#8221; no SexyLighbox para que cada um posso personalizar a apar&ecirc;ncia como quiser. Ent&atilde;o, voc&ecirc; pode alterar a cor de fundo, texto, alterar os elementos (setinhas, etc) e usar da forma que voc&ecirc; quiser. Ent&atilde;o quando voc&ecirc; alterar a cor de fundo para o SexyLighbox ficar com a identidade visual de seu site, voc&ecirc; vai perceber que a parte do meio da moldura ainda permanece intacta. No caso, voc&ecirc; deve fazer um pequeno acr&eacute;scimo de CSS em seu arquivo padr&atilde;o (pode ser ao final):</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#SLB-Contenido</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">border-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#HEXADECIMAL</span> !important<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><h2>Agora voc&ecirc; tem galerias Sexy!</h2><p>Com isso, agora voc&ecirc; galerias de imagens <strong>automatizadas</strong> e <strong>sexy</strong>! Para tirar melhor proveito disso, estude a documenta&ccedil;&atilde;o do NextGen Gallery (al&eacute;m dos <a
href="http://alexrabe.de/forums/">f&oacute;runs</a>, os <a
href="http://dpotter.net/Technical/2008/03/nextgen-gallery-review-introduction/">tutoriais sobre NextGen de David Potter</a> devem ajudar) e do SexyLightbox para incrementar/customizar ainda mais as galerias de imagens de seu site para que fiquem pr&aacute;ticas, bonitas e com excelente performance.</p><p>E capriche nas imagens!  ;-)</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/design/10-erros-basicos-de-web-design/" title="10 erros básicos de web design">10 erros básicos de web design</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/cores-na-web-guia-completo/" title="Cores na web: guia completo">Cores na web: guia completo</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/" title="5 dicas para temas WordPress melhores">5 dicas para temas WordPress melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/gradiente-css-cross-browser-degrades-css-sem-usar-imagens/" title="Gradiente CSS cross browser: degradês em CSS sem usar imagens">Gradiente CSS cross browser: degradês em CSS sem usar imagens</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/ferramentas-criacao-wireframes/" title="Ferramentas para criação de wireframes">Ferramentas para criação de wireframes</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/rolagem-fundo-transparente-css/" title="Rolagem com fundo transparente com CSS">Rolagem com fundo transparente com CSS</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/7-ferramentas-para-web-designs-melhores/" title="7 ferramentas para web designs melhores">7 ferramentas para web designs melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/otimizacao-wordpress-performance-desempenho-blog-site/" title="Otimização WordPress: aumente a performance e desempenho de seu blog / site">Otimização WordPress: aumente a performance e desempenho de seu blog / site</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-criar-sumarios-dinamicamente-com-o-toc-table-of-contents-jquery-plugin-jquerytoc/" title="Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin">Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/nextgen-gallery-com-sexylightbox-sua-galeria-de-imagens-mais-sexy/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>Como criar sum&#225;rios dinamicamente com o TOC (Table of Contents) jQuery plugin</title><link>http://desenvolvimentoparaweb.com/jquery/como-criar-sumarios-dinamicamente-com-o-toc-table-of-contents-jquery-plugin-jquerytoc/</link> <comments>http://desenvolvimentoparaweb.com/jquery/como-criar-sumarios-dinamicamente-com-o-toc-table-of-contents-jquery-plugin-jquerytoc/#comments</comments> <pubDate>Wed, 15 Apr 2009 15:00:12 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[jquery]]></category> <category><![CDATA[Usabilidade]]></category> <category><![CDATA[Conteúdo]]></category> <category><![CDATA[Exemplos]]></category> <category><![CDATA[Plugins]]></category> <category><![CDATA[UX]]></category> <guid
isPermaLink="false">http://www.desenvolvimentoparaweb.com/?p=456</guid> <description><![CDATA[Aprenda como criar sum&aacute;rios din&acirc;micos para incrementar a usabilidade de seu site]]></description> <content:encoded><![CDATA[<p>Determinados tipos de <em>sites</em> (ou somente algumas p&aacute;ginas de <em>sites</em>) &agrave;s vezes precisam de um <strong>sum&aacute;rio</strong> para que o conte&uacute;do fique bem organizado e para oferecer uma vis&atilde;o geral sobre o conte&uacute;do. Um sum&aacute;rio em p&aacute;ginas de <em>web</em> tamb&eacute;m &eacute; muito &uacute;til em rela&ccedil;&atilde;o &aacute; <strong>usabilidade</strong>, dado que facilita a experi&ecirc;ncia do visitante ter um &#8220;apanhado geral&#8221; sobre o que vai encontrar.</p><p>Agora imagine como seria bom se houvesse uma maneira de criar sum&aacute;rios dinamicamente para as p&aacute;ginas de seu <em>site</em>! &#8220;Seria&#8221;, n&atilde;o; &eacute;! &Eacute; poss&iacute;vel <strong>criar sum&aacute;rios de forma din&acirc;mica</strong> atrav&eacute;s do <em>plugin</em> <strong>TOC (Table of Contents) jQuery plugin (jquery.toc)</strong> para jQuery!</p><h2>Sobre o TOC jQuery Plugin</h2><p>Na <a
href="http://code.google.com/p/samaxesjs/wiki/TableOfContentsPlugin">p&aacute;gina oficial do TOC jQuery Plugin</a> &eacute; poss&iacute;vel encontrar informa&ccedil;&otilde;es importantes sobre o funcionamento do <em>plugin</em>, hist&oacute;rico de atualiza&ccedil;&otilde;es, <a
href="http://samaxes-demos.appspot.com/samaxesjs/toc-jquery.html">exemplo de funcionamento</a>, dentre outros. Mas, para voc&ecirc; que est&aacute; lendo este artigo diretamente no <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento para web</a>, &eacute; poss&iacute;vel ver em todos os artigos o <em>plugin</em> em a&ccedil;&atilde;o, j&aacute; que implementei a cria&ccedil;&atilde;o din&acirc;mica de sum&aacute;rios oficialmente aqui no <em>blog</em>! Desabilite o <em>javascript</em> que voc&ecirc; vai ver, ou melhor, <strong>n&atilde;o vai ver o Sum&aacute;rio</strong>! ;-)</p><p>O funcionamento do <em>plugin</em> &eacute; em cima das <em>tags</em> de t&iacute;tulos e subt&iacute;tulos presentes nas p&aacute;ginas do site. Atrav&eacute;s da an&aacute;lise destes o <em>plugin</em>:</p><ul><li>Gera um Sum&aacute;rio (&#8220;Table of Contents&#8221;) dinamicamente (atrav&eacute;s de <em>tags</em> de lista);</li><li>Adiciona automaticamente numera&ccedil;&atilde;o ao Sum&aacute;rio e aos correspondentes t&iacute;tulos e subt&iacute;tulos da p&aacute;gina.</li></ul><p>E, seguindo a &#8220;filosofia&#8221; do jQuery, tudo &eacute; feito de forma bastante autom&aacute;tica e simplificada, bastando somente algumas pouqu&iacute;ssimas linhas de c&oacute;digo para colocar a extens&atilde;o em funcionamento!</p><h2>Funcionamento do jquery.toc</h2><p>A primeira coisa a se fazer, logicamente, &eacute; <a
href="http://code.google.com/p/samaxesjs/downloads/list">baixar o query.toc</a>.  Lembrando que &eacute; sempre aconselh&aacute;vel baixar a &uacute;ltima vers&atilde;o dispon&iacute;vel &#8211; na data de publica&ccedil;&atilde;o deste artigo &eacute; a <strong>v1.0.2</strong>. Em rela&ccedil;&atilde;o a seu tamanho, tamb&eacute;m n&atilde;o h&aacute; nada com o que se preocupar: sua <strong>vers&atilde;o &#8220;normal&#8221; tem 5.3KB</strong> e a <strong>vers&atilde;o compactada tem 2.4KB</strong>. Depois disso, basta fazer a &#8220;chamada&#8221; do <em>script</em> (abaixo da chamada ao jQuery, claro) e come&ccedil;ar a codificar.</p><p>Lembrando que &eacute; conveniente fazer a chamada de todos <em>javascripts</em> e codificar na linguagem ao final do documento, preferencialmente <strong>antes de &#8220;&lt;/body&gt;&#8221;</strong>.</p><h2>Codificando</h2><p>Primeiro &eacute; importante escolher em qual lugar vai aparecer o sum&aacute;rio din&acirc;mico. &Eacute; bom dedicar uma DIV especialmente para isso para evitar erros/conflitos. Para facilitar, neste exemplo a DIV ter&aacute; o ID &#8220;toc&#8221;.</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
</pre></td><td
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;toc&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span> <span style="color: #808080; font-style: italic;">&lt;!-- sim, é uma DIV vazia... --&gt;</span></pre></td></tr></table></div><p>Uma das condi&ccedil;&otilde;es para o correto funcionamento do TOC jQuery Plugin &eacute; que cada t&iacute;tulo/subt&iacute;tulo que se queira incluir no sum&aacute;rio tenha o atributo <strong>id</strong> para ser referenciado e que ser&aacute; usado nos <em>links</em> de &acirc;ncora do Sum&aacute;rio criado. Falando claramente: <strong>todos seus t&iacute;tulos/subt&iacute;tulos t&ecirc;m que ter id</strong>.</p><p>Logicamente que criar manualmente um id para cada t&iacute;tulo/subt&iacute;tulo a fim de gerar dinamicamente o Sum&aacute;rio seria um trabalho extra e, diga-se de passagem, desnecess&aacute;rio, j&aacute; que &eacute; poss&iacute;vel fazer isso via javascript/jQuery. Vamos por partes.</p><p>O primeiro objetivo &eacute; &#8220;pegar&#8221; todos t&iacute;tulo/subt&iacute;tulos da p&aacute;gina (no trecho em que se queira incluir no Sum&aacute;rio din&acirc;mico) e acrescentar um id para cada um. O id pode ser qualquer nome que seja diferente para cada t&iacute;tulo/subt&iacute;tulo; afinal, trata-se de um id (mais informa&ccedil;&otilde;es a respeito, leia o artigo sobre <a
href="http://www.desenvolvimentoparaweb.com/css/diferencas-entre-ids-e-classes/">diferen&ccedil;as entre IDs e Classes</a>):</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#content :header&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// http://tinyurl.com/celarh</span>
        <span style="color: #006600; font-style: italic;">// fazer qualquer coisa com cada título/subtítulo dentro de #content (nome-alvo fictício)</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>No caso da gera&ccedil;&atilde;o autom&aacute;tica de Sum&aacute;rio de conte&uacute;dos com o <em>plugin</em> TOC jQuery, nosso objetivo, como j&aacute; explicado, &eacute; dar um id para cada t&iacute;tulo/subt&iacute;tulo. Poder&iacute;amos criar um nome gen&eacute;rico e fazer um contador para marcar com n&uacute;meros (o resultaria seria &#8220;#id1&#8243;, &#8220;#id2&#8243;, &#8220;#id3&#8243;&#8230;); mas acho mais &#8220;elegante&#8221; manter o texto do t&iacute;tulo e, para enfeitar mais um pouco, inserir &#8220;_&#8221; no lugar de cada espa&ccedil;o (dado que nomes de IDs n&atilde;o podem conter <em>white spaces</em>).</p><p>Vamos gerar um ID para cada t&iacute;tulo/subt&iacute;tulo baseados nas seguintes premissas:</p><ul><li>Nome ser&aacute; o texto do t&iacute;tulo/subt&iacute;tulo;</li><li>Todos caracteres min&uacute;sculos;</li><li>Elimina&ccedil;&atilde;o de qualquer caractere que n&atilde;o seja letra ou n&uacute;mero (incluindo caracteres especiais);</li><li>Substitui&ccedil;&atilde;o de espa&ccedil;os por underscore (&#8220;_&#8221;).</li></ul><p>Ent&atilde;o, estamos assim, por enquanto:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#content :header&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/[^a-zA-Z 0-9]+/g</span><span style="color: #339933;">,</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\s/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'_'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// http://tinyurl.com/dl9z35</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//  http://tinyurl.com/68cxmw</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>Depois disso, j&aacute; temos todos os t&iacute;tulos e subt&iacute;tulos &#8220;alvo&#8221; com um ID. Agora &eacute; o momento de mandar o jquery.toc entrar em a&ccedil;&atilde;o:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#content :header&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/[^a-zA-Z 0-9]+/g</span><span style="color: #339933;">,</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\s/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'_'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#toc'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// #toc é o &quot;container&quot; do Sumário, definido anteriormente</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>O &#8220;grosso&#8221; da coisa &eacute; isso! Pode fazer seus testes e ver que o Sum&aacute;rio foi criado automaticamente e est&aacute; funcional, com todas as &acirc;ncoras apontando para seus respectivos t&iacute;tulos/subt&iacute;tulos.</p><h3>&#8220;Refinando&#8221; o Sum&aacute;rio din&acirc;mico</h3><p>Para obter um resultado mais &#8220;fino&#8221; ainda falta codificar alguns detalhes.</p><p>Por exemplo: vamos supor que, por algum motivo, voc&ecirc; queira que alguns t&iacute;tulos/subt&iacute;tulos n&atilde;o entrem na listagem do Sum&aacute;rio. Consultando a <a
href="http://code.google.com/p/samaxesjs/wiki/TableOfContentsPlugin">documenta&ccedil;&atilde;o oficial do TOC jQuery Plugin</a> &eacute; poss&iacute;vel identificar que isso &eacute; poss&iacute;vel atrav&eacute;s da op&ccedil;&atilde;o <strong><em>exclude</em></strong>. Vamos supor que n&atilde;o queremos que os t&iacute;tulos prim&aacute;rios e o t&iacute;tulo secund&aacute;rio de id &#8220;apresentacao&#8221; entrem na listagem; ent&atilde;o o trecho ficaria:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#toc'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>exclude<span style="color: #339933;">:</span> <span style="color: #3366CC;">'h1, h2#apresentacao'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>Em conversa com <a
href="http://www.samaxes.com/about/">o desenvolvedor do <em>plugin</em></a>, fiquei sabendo que existe uma limita&ccedil;&atilde;o quanto ao n&uacute;mero de elementos poss&iacute;veis no <em>exclude</em>. Ent&atilde;o, caso tenha bastantes elementos que n&atilde;o gostaria que estivesse listados no Sum&aacute;rio, uma boa dica &eacute; criar uma classe qualquer (por exemplo &#8220;toc-exclude&#8221;) e marcar os elementos indesej&aacute;veis com ela. Ent&atilde;o, ficaria algo como:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#toc'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>exclude<span style="color: #339933;">:</span> <span style="color: #3366CC;">'h1, h2#apresentacao, .toc-exclude'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>Aproveitando que estamos querendo fazer um trabalho bem-feito e que jQuery nos permite isso com muita facilidade, n&atilde;o nos custa indicar ao visitante que aquela listagem &eacute; um Sum&aacute;rio, inserindo, via jQuery, um subt&iacute;tulo antes da DIV &#8220;toc&#8221;:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#toc'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>exclude<span style="color: #339933;">:</span> <span style="color: #3366CC;">'h1, h2#apresentacao, .toc-exclude'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">prepend</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;h2&gt;Sum&amp;aacute;rio&lt;/h2&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// http://tinyurl.com/bjlr42</span></pre></td></tr></table></div><p>O <em>script</em> final de nosso exemplo &#8211; que serve de &#8220;base&#8221; para a implementa&ccedil;&atilde;o do jquery.toc em qualquer <em>site</em> &#8211; fica assim:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#content :header&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/[^a-zA-Z 0-9]+/g</span><span style="color: #339933;">,</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\s/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'_'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#toc'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>exclude<span style="color: #339933;">:</span> <span style="color: #3366CC;">'h1, h2#apresentacao, .toc-exclude'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">prepend</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;h2&gt;Sum&amp;aacute;rio&lt;/h2&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><h2>Conclus&otilde;es sobre o Table of Contents jQuery plugin</h2><p>Como foi demonstrado, <strong>criar um sum&aacute;rio autom&aacute;tico-din&acirc;mico com jQuery utilizando o <em>plugin</em> jquery.toc &eacute; algo bastante simples</strong>. E ele pode ser usado em qualquer tipo de <em>site</em>, inclusive os que utilizam CMSs, como os desenvolvidos em WordPress &#8211; vejam que <strong>este <em>blog</em> &eacute; WordPress</strong> e o recurso est&aacute; presente.</p><p>Como &#8220;desafio&#8221;, no site em que for implementar o jquery.toc fa&ccedil;a o seguinte: gere a DIV <strong>#toc</strong> atrav&eacute;s de jQuery ao inv&eacute;s de deix&aacute;-la na marca&ccedil;&atilde;o (X)HTML. Coloque o <em>link</em> para o <em>site</em> nos coment&aacute;rios!  ;-)</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/" title="JSON &#8211; JavaScript Object Notation">JSON &#8211; JavaScript Object Notation</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/" title="Melhorando a interação em formulários de busca">Melhorando a interação em formulários de busca</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/breadcrumbs-guia-completo-exemplos-melhores-praticas/" title="Breadcrumbs: guia completo com exemplos e melhores práticas">Breadcrumbs: guia completo com exemplos e melhores práticas</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/newsletter-no-wordpress-com-o-plugin-ajax-newsletter-wp-ajax-newsletter/" title="Newsletter no WordPress com o plugin Ajax Newsletter (wp-ajax-newsletter)">Newsletter no WordPress com o plugin Ajax Newsletter (wp-ajax-newsletter)</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/wp-syntax-destacar-codigos-fonte-em-artigos-de-blogs-wordpress/" title="WP-Syntax: destacar códigos fonte em artigos de blogs WordPress">WP-Syntax: destacar códigos fonte em artigos de blogs WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/jquery-mais-50-dos-melhores-tutoriais-apostilas-e-exemplos/" title="jQuery: mais 50 dos melhores tutoriais, apostilas e exemplos">jQuery: mais 50 dos melhores tutoriais, apostilas e exemplos</a></li><li><a
href="http://desenvolvimentoparaweb.com/php/como-pegar-parte-do-conteudo-dados-de-outro-site-com-php/" title="Como pegar parte do conteúdo (dados) de outro site com PHP">Como pegar parte do conteúdo (dados) de outro site com PHP</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/estrategia-de-conteudo-content-strategy/" title="Estratégia de Conteúdo ou Content Strategy">Estratégia de Conteúdo ou Content Strategy</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/" title="Como otimizar códigos jQuery e aumentar a performance do front-end">Como otimizar códigos jQuery e aumentar a performance do front-end</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/como-criar-sumarios-dinamicamente-com-o-toc-table-of-contents-jquery-plugin-jquerytoc/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>jQuery: mais 50 dos melhores tutoriais, apostilas e exemplos</title><link>http://desenvolvimentoparaweb.com/jquery/jquery-mais-50-dos-melhores-tutoriais-apostilas-e-exemplos/</link> <comments>http://desenvolvimentoparaweb.com/jquery/jquery-mais-50-dos-melhores-tutoriais-apostilas-e-exemplos/#comments</comments> <pubDate>Fri, 25 Apr 2008 13:03:04 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[indicações]]></category> <category><![CDATA[jquery]]></category> <category><![CDATA[Exemplos]]></category> <category><![CDATA[Plugins]]></category> <guid
isPermaLink="false">http://www.desenvolvimentoparaweb.com/?p=130</guid> <description><![CDATA[Conhe&ccedil;a a compila&ccedil;&atilde;o com mais de 50 dos melhores tutoriais, apostilas, explica&ccedil;&otilde;es e exemplos de jQuery dispon&iacute;vel na internet!]]></description> <content:encoded><![CDATA[<p>O pessoal do <a
title="Visitar o Noupe." rel="home colleague" href="http://www.noupe.com/"><span
lang="en">Noupe</span></a> gosta mesmo de <a
title="Visitar a p&aacute;gina oficial do jQuery." rel="home colleague" href="http://jquery.com/"><span
lang="en">jQuery</span></a>! Al&eacute;m das <a
title="Visitar a categoria sobre o jQuery do Noupe." rel="colleague" href="http://www.noupe.com/category/jquery">diversas compila&ccedil;&otilde;es de <span
lang="en"><em>plugins</em></span> e exemplos do <span
lang="en"><em>framework</em></span> que j&aacute; fizeram</a> (alguns podem ser vistos na <a
title="Visitar a categoria sobre jQuery." href="http://www.desenvolvimentoparaweb.com/category/jquery/">categoria <span
lang="en">jQuery</span></a>, <a
href="http://www.desenvolvimentoparaweb.com/">aqui do <span
lang="en"><em>blog</em></span></a>), agora eles apareceram com uma outra listagem com mais <strong>50 exemplos de aplica&ccedil;&atilde;o de <span
lang="en">jQuery</span></strong>!</p><p>S&atilde;o indica&ccedil;&otilde;es de tutoriais, exemplos, apostilas e macetes de <span
lang="en">jQuery</span>, tanto de tutoriais individuais, quanto <span
lang="en"><em>web sites</em></span> inteiros dedicados ao <span
lang="en"><em>framework</em></span>! Gostei especialmente dos <span
lang="en"><em>links</em></span> sobre <strong>uso de AJAX com <span
lang="en">jQuery</span></strong>!</p><p>Enfim, mais uma bel&iacute;ssima compila&ccedil;&atilde;o do Noupe sobre este <span
lang="en"><em>framework javascript</em></span> que, com certeza, &eacute; o mais leve, f&aacute;cil e eficiente dispon&iacute;vel hoje em dia!</p><div
class="link"><a
rel="colleague" href="http://www.noupe.com/tutorial/51-best-of-jquery-tutorials-and-examples.html">Mais 50 dos melhores tutoriais, apostilas e exemplos de <span
lang="en">jQuery</span></a></div><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-criar-sumarios-dinamicamente-com-o-toc-table-of-contents-jquery-plugin-jquerytoc/" title="Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin">Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/newsletter-no-wordpress-com-o-plugin-ajax-newsletter-wp-ajax-newsletter/" title="Newsletter no WordPress com o plugin Ajax Newsletter (wp-ajax-newsletter)">Newsletter no WordPress com o plugin Ajax Newsletter (wp-ajax-newsletter)</a></li><li><a
href="http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/" title="JSON &#8211; JavaScript Object Notation">JSON &#8211; JavaScript Object Notation</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/" title="5 dicas para temas WordPress melhores">5 dicas para temas WordPress melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/" title="Melhorando a interação em formulários de busca">Melhorando a interação em formulários de busca</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/ferramentas-criacao-wireframes/" title="Ferramentas para criação de wireframes">Ferramentas para criação de wireframes</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/perguntas-cliente-antes-depois-projeto/" title="Perguntas ao cliente para antes e depois de um projeto">Perguntas ao cliente para antes e depois de um projeto</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/otimizacao-wordpress-performance-desempenho-blog-site/" title="Otimização WordPress: aumente a performance e desempenho de seu blog / site">Otimização WordPress: aumente a performance e desempenho de seu blog / site</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/nextgen-gallery-com-sexylightbox-sua-galeria-de-imagens-mais-sexy/" title="NextGEN Gallery com SexyLightBox: sua galeria de imagens mais sexy">NextGEN Gallery com SexyLightBox: sua galeria de imagens mais sexy</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/jquery-mais-50-dos-melhores-tutoriais-apostilas-e-exemplos/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>A melhor lista de plugins para jQuery do mundo!</title><link>http://desenvolvimentoparaweb.com/jquery/a-melhor-lista-de-plugins-para-jquery-do-mundo/</link> <comments>http://desenvolvimentoparaweb.com/jquery/a-melhor-lista-de-plugins-para-jquery-do-mundo/#comments</comments> <pubDate>Tue, 22 Jan 2008 20:03:01 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[indicações]]></category> <category><![CDATA[jquery]]></category> <category><![CDATA[Desempenho]]></category> <category><![CDATA[Produtividade]]></category> <category><![CDATA[UX]]></category> <guid
isPermaLink="false">http://www.desenvolvimentoparaweb.com/jquery/a-melhor-lista-de-plugins-para-jquery-do-mundo/</guid> <description><![CDATA[Diversas listas com excelentes plugins para jQuery! Certamente uma das melhores compila&ccedil;&otilde;es de plugin de jQuery da web!]]></description> <content:encoded><![CDATA[<p>O <a
title="Visitar o Noupe." rel="home colleague" href="http://www.noupe.com/"><span
lang="en">Noupe</span></a> disponibilizou uma <strong>excelente lista com 50 exemplos de <span
lang="en">jQuery</span></strong>! S&atilde;o v&aacute;rios autores que desenvolveram <span
lang="en"><em>plugins</em></span> / t&eacute;cnicas / exemplos de como se fazer um bom uso do <span
lang="en"><em>framework</em></span>!</p><p>Tudo est&aacute; bem separadinho por categorias:</p><p><strong> </strong></p><ul><li><strong>Pain&eacute;is deslizantes;</strong></li><li><strong>Menus;</strong></li><li><strong>Abas;</strong></li><li><strong>&#8220;Acordeons&#8221;;</strong></li><li><span
lang="en"><strong>Shows</strong></span><strong> de <span
lang="en">slides</span>;</strong></li><li><strong>Efeitos de transi&ccedil;&atilde;o;</strong></li><li><strong>Carros&eacute;is;</strong></li><li><strong>Seletores de cores;</strong></li><li><span
lang="en"><strong>Lightboxes</strong></span><strong>;</strong></li><li><strong>Valida&ccedil;&otilde;es de formul&aacute;rios;</strong></li><li><strong>Elementos de formul&aacute;rios;</strong></li><li><span
lang="en"><strong>Tooltips</strong></span><strong>;</strong></li><li><strong>Tabelas;</strong></li><li><strong>Muitos, muitos outros&#8230;</strong></li></ul><p>Ufa! S&atilde;o tantas as categorias e t&atilde;o bons os exemplos que, provavelmente, esta &eacute; a <strong>melhor sele&ccedil;&atilde;o de <span
lang="en"><em>plugins</em></span> para <span
lang="en">jQuery</span> que existe atualmente</strong>!</p><p>Pessoal, &eacute; s&eacute;rio: guardem esta lista com voc&ecirc;s (seja favoritando, adicionando no <a
title="Visitar o del.icio.us." rel="home" href="http://del.icio.us/"><span
lang="en">del.icio.us</span></a>, navegador, ou o que quer que seja), porque, certamente, aqueles que desenvolvem com <span
lang="en">jQuery</span> um dia precisar&atilde;o de algo que est&aacute; nesta lista!</p><p>Abra&ccedil;os e aproveitemos!</p><p><strong>&lt;update&gt;</strong><br
/> Saiu uma lista com mais <a
href="http://www.noupe.com/ajax/37-more-shocking-jquery-plugins.html">37 plugins para jQuery</a>!<br
/> <strong>&lt;/update&gt;</strong></p><div
class="link"><a
href="http://www.noupe.com/ajax/50-amazing-jquery-examples-part1.html">50 fant&aacute;sticos exemplos de <span
lang="en">jQuery</span></a></div><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/" title="Como otimizar códigos jQuery e aumentar a performance do front-end">Como otimizar códigos jQuery e aumentar a performance do front-end</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/wireframe-web-guia-completo/" title="Wireframes para web: guia completo de desenvolvimento">Wireframes para web: guia completo de desenvolvimento</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/" title="Melhorando a interação em formulários de busca">Melhorando a interação em formulários de busca</a></li><li><a
href="http://desenvolvimentoparaweb.com/xhtml/textarea-dicas-truques-textarea/" title="Textarea: dicas e truques que você sempre quis saber">Textarea: dicas e truques que você sempre quis saber</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/8-maneiras-de-melhorar-a-performance-de-um-site/" title="8 maneiras de melhorar a performance de um site">8 maneiras de melhorar a performance de um site</a></li><li><a
href="http://desenvolvimentoparaweb.com/javascript/melhores-editores-wysiwyg-para-seu-projeto/" title="Melhores editores WYSIWYG para seu projeto">Melhores editores WYSIWYG para seu projeto</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/breadcrumbs-guia-completo-exemplos-melhores-praticas/" title="Breadcrumbs: guia completo com exemplos e melhores práticas">Breadcrumbs: guia completo com exemplos e melhores práticas</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/recursos-usabilidade/" title="Recursos de usabilidade grátis">Recursos de usabilidade grátis</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/4-elementos-design-call-to-action/" title="4 elementos de design para um bom call to action">4 elementos de design para um bom call to action</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/a-melhor-lista-de-plugins-para-jquery-do-mundo/feed/</wfw:commentRss> <slash:comments>10</slash:comments> </item> <item><title>jQuery: apresenta&#231;&#227;o</title><link>http://desenvolvimentoparaweb.com/jquery/jquery-apresentacao-introducao/</link> <comments>http://desenvolvimentoparaweb.com/jquery/jquery-apresentacao-introducao/#comments</comments> <pubDate>Fri, 14 Sep 2007 01:30:17 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[jquery]]></category> <guid
isPermaLink="false">http://www.desenvolvimentoparaweb.com/2007/09/13/jquery-apresentacao/</guid> <description><![CDATA[jQuery &eacute; o melhor framework javascript da atualidade. Conhe&ccedil;a suas caracter&iacute;sticas, vantagens de uso e refer&ecirc;ncias de estudo.]]></description> <content:encoded><![CDATA[<p
style="text-align: center;"><img
class="aligncenter size-full wp-image-513" src="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2007/09/jquery-logo-jquery-apresentacao-introducao.gif" alt="jQuery logo: jQuery apresenta&ccedil;&atilde;o introdu&ccedil;&atilde;o" width="259" height="65" /></p><p><strong>jQuery &eacute; o melhor framework javascript </strong>da atualidade (oficialmente &eacute; considerado uma <strong>biblioteca javascript</strong>), isso todos que j&aacute; mexem com <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento web</a> j&aacute; sabem. J&aacute; quem est&aacute; iniciando no mundo do desenvolvimento para <em>web</em> ainda n&atilde;o sabe&#8230; E justamente para explicar um pouco mais sobre o jQuery &eacute; que este artigo foi escrito, visando auxiliar aos que est&atilde;o iniciando a jornada <em>javascript </em>a encontrar um caminho seguro para come&ccedil;ar.</p><h2>Introdu&ccedil;&atilde;o</h2><p>Geralmente desenvolvedores <em>web</em> gostam de colecionar bibliotecas e <span
lang="en"><em>scripts</em></span> prontos das linguagens de programa&ccedil;&atilde;o que utilizam no dia-a-dia. Ter &agrave; disposi&ccedil;&atilde;o in&uacute;meros arquivos de terceiros, desde exemplos e classes, passando por modelos e tudo o mais que possa servir de alguma maneira &#8211; e/ou simplesmente satisfazer a curiosidade acerca determinado modo ou t&eacute;cnica para programar &#8211; &eacute; o <em>modus operandi</em> de quem programa para <em>web</em>.</p><p>Obviamente, todos queremos ter o melhor! E, em se tratando de progra&ccedil;&atilde;o, n&atilde;o poderia ser diferente. Dado que o melhor <em>framework javascript</em> atual &eacute; <strong>jQuery</strong>, ent&atilde;o n&atilde;o h&aacute; nada mais natural do que conhecer e saber usar esta poderos&iacute;ssima ferramenta para desenvolver <em>sites</em>, <em>blogs</em>, produtos virtuais, sistemas <em>online</em> e o que mais voc&ecirc; precisar que tenha <em>javascript</em>!</p><h2>O que &eacute; um <span
lang="en"><em>framework</em></span>?</h2><p>jQuery &eacute; a maneira mais f&aacute;cil, simples, elegante e sofisticada de codificar <span
lang="en"><em>javascript</em></span>; &eacute;, nada mais, nada menos, que, segundo a opini&atilde;o de profissionais do ramo e publica&ccedil;&otilde;es especializadas, um dos melhores <span
lang="en"><em>frameworks</em></span> j&aacute; desenvolvidos!  Para ficar mais claro, <span
lang="en"><em>framework</em></span>, segundo <a
title="defini&ccedil;&atilde;o de Framework, da Wikip&eacute;dia" href="http://pt.wikipedia.org/wiki/Framework">defini&ccedil;&atilde;o encontrada na Wikip&eacute;dia</a>, &eacute;:</p><blockquote><p>No desenvolvimento do <span
lang="en"><em>software</em></span>, um <span
lang="en"><em>framework</em></span> ou arcabou&ccedil;o &eacute; uma estrutura de suporte definida em que um outro projeto de <span
lang="en"><em>software</em></span> pode ser organizado e desenvolvido. Um <span
lang="en"><em>framework</em></span> pode incluir programas de suporte, bibliotecas de c&oacute;digo, linguagens de <span
lang="en"><em>script</em></span> e outros <span
lang="en"><em>softwares</em></span> para ajudar a desenvolver e juntar diferentes componentes de um projeto de <span
lang="en"><em>software</em></span>.</p><p><span
lang="en"><em>Frameworks</em></span> s&atilde;o projetados com a inten&ccedil;&atilde;o de facilitar o desenvolvimento de <span
lang="en"><em>software</em></span>, habilitando <span
lang="en"><em>designers</em></span> e programadores a gastarem mais tempo determinando as exig&ecirc;ncias do <span
lang="en"><em>software</em></span> do que com detalhes tediosos de baixo n&iacute;vel do sistema. (<em>sic</em>)</p></blockquote><h2>Para que serve <span
lang="en">jQuery</span>?</h2><p>Segundo consta no <span
lang="en"><em>web site</em></span> oficial, “<span
lang="en"><em>jQuery is designed to change the way that you write JavaScript</em></span>”, ou seja, <span
lang="en">jQuery</span> &eacute; projetado para mudar sua maneira de escrever <span
lang="en"><em>javascript</em></span> (<em>tradu&ccedil;&atilde;o livre</em>). Por experi&ecirc;ncia pr&oacute;pria, posso afirmar que o objetivo da equipe de desenvolvimento foi atingido com sucesso!</p><p><span
lang="en">jQuery</span> &eacute; disponibilizado das diferentes maneiras:</p><ul><li><strong>Desenvolvimento.</strong> Apresenta todos seus c&oacute;digos completos, identados e de f&aacute;cil entendimento (isso &eacute; relativo). Ideal para quem queira estudar e compreender como as coisas funcionam, essa &#8220;vers&atilde;o sem cortes&#8221; &eacute; ideal para estudo/aprendizado a fundo da biblioteca.</li><li><strong>Produ&ccedil;&atilde;o</strong>. Esta &eacute; a vers&atilde;o para quem se preocupa somente em utilizar o jQuery e usufruir de todo o seu poder atrav&eacute;s de um arquivo compactado, diminuto e ideal para aqueles que querem usar o <span
lang="en"><em>framework</em></span> rapidamente, evitando transfer&ecirc;ncias desnecess&aacute;rias e tempos de carregamento excessivos.</li><li><strong>Google API/CDN.</strong> Atrav&eacute;s da API AJAX de bibliotecas do Google &eacute; poss&iacute;vel, dentre outros frameworks e bibliotecas, incorporar o jQuery a suas p&aacute;ginas web. <a
href="http://code.google.com/intl/pt-BR/apis/ajaxlibs/documentation/index.html#jquery">Leia mais sobre como usar jQuery a partir da API AJAX do Google</a>.</li></ul><p>Quando se usa <span
lang="en">jQuery</span>, realmente a maneira de se escrever <span
lang="en"><em>javascript</em></span> muda! &Eacute; o fim das enormes linhas que servem somente para identificar um elemento; o fim dos la&ccedil;os de repeti&ccedil;&atilde;o que somente identificam quantos elementos de determinada categoria est&atilde;o presentes no documento; o fim de in&uacute;meros &#8220;Ctrl + C, Ctrl + V&#8221;; enfim, &eacute; o t&eacute;rmino do trabalho pesado e perda de tempo na codifica&ccedil;&atilde;o <span
lang="en"><em>javascript</em></span> e o in&iacute;cio da <strong>codifica&ccedil;&atilde;o simples, elegante e eficazmente robusta e de f&aacute;cil entendimento</strong>.</p><p>Com pouqu&iacute;ssimas linhas de c&oacute;digo, &eacute; poss&iacute;vel mexer &agrave; vontade com o <a
title="defini&ccedil;&atilde;o de DOM, da Wikip&eacute;dia" href="http://pt.wikipedia.org/wiki/Modelo_de_Objeto_de_Documentos">DOM</a> (identifica&ccedil;&atilde;o, edi&ccedil;&atilde;o, inser&ccedil;&atilde;o, dele&ccedil;&atilde;o, etc), manipular eventos <span
lang="en"><em>javascript</em></span>, alterar regras CSS, aplicar efeitos visuais (<span
lang="en"><em>fade in</em> / <em>fade out</em>, <em>drag and drop</em>, <em>slides</em></span>, movimentos, etc) e muito mais coisas interessantes, &uacute;teis e <em><a
title="defini&ccedil;&atilde;o de cross browser, da Wikip&eacute;dia" href="http://pt.wikipedia.org/wiki/Cross-browser">cross browser</a></em>. E quando digo “pouqu&iacute;ssimas linhas de c&oacute;digo”, refiro-me, por exemplo, a 3 ou 4 linhas  para requisi&ccedil;&otilde;es AJAX!<span
lang="en"> </span></p><p>Quer mais? <span
lang="en">jQuery</span> &eacute; projetado para aceitar <a
title="visualizar lista oficial de plugins do jQuery" href="http://docs.jquery.com/Plugins">extens&otilde;es de terceiros</a>, quer dizer, qualquer um com certa habilidade em programa&ccedil;&atilde;o pode criar funcionalidades <em>extra</em> para a biblioteca<span
lang="en"><em></em></span>, extendendo suas potencialidades nativas e/ou aproveitando seu poder de funcionamento.</p><div
class="recapitulacao"><h2>Recapitula&ccedil;&atilde;o jQuery</h2><p><span
lang="en">jQuery</span> &eacute; uma biblioteca (ou <span
lang="en"><em>framework</em></span>) &#8220;projetado para mudar sua maneira de escrever <span
lang="en"><em>javascript</em></span>&#8220;; atualmente &eacute; a melhor biblioteca <em>javascript</em> dispon&iacute;vel e est&aacute; sempre nas listas das mais usadas no mundo. Algumas de suas caracter&iacute;sticas s&atilde;o:</p><ul><li><span
lang="en"><em>Cross browser;</em></span></li><li>Controle total sobre o DOM;</li><li>Manipula&ccedil;&atilde;o de eventos <span
lang="en"><em>javascript;</em></span></li><li>Manipula&ccedil;&atilde;o de regras CSS;</li><li>Aplica&ccedil;&atilde;o de efeitos visuais;</li><li>Uso de AJAX;</li><li>Muito, muito mais!</li></ul></div><div
class="referenciasInternacionais"><h2>Refer&ecirc;ncias Internacionais</h2><p><a
title="visitar o web site oficial do jQuery" href="http://jquery.com/">jquery.com</a><br
/> Este &eacute; o <span
lang="en"><em>web site</em></span> oficial da biblioteca (ou <span
lang="en"><em>framework</em></span>). H&aacute; tamb&eacute;m o <span
lang="en"><a
title="visitar o blog oficial do jQuery" href="http://jquery.com/blog/"><em>blog</em> oficial</a></span>.</p><p><a
title="visitar 15daysofjquery.com" href="http://15daysofjquery.com/">15daysofjquery.com</a><br
/> Este &eacute; o <span
lang="en"><em>web site</em></span> de <span
lang="en"><a
title="visitar o web site de Jack Born" href="http://www.jackborn.com/">Jack Born</a></span>, que cont&eacute;m tutoriais, exemplos e refer&ecirc;ncias sobre o <span
lang="en">jQuery</span>.</p><p><a
title="visitar visualjquery.com" href="http://visualjquery.com/">visualjquery.com</a><br
/> <a
href="http://remysharp.com/">Remy Sharp</a> e <span
lang="en"><a
title="visitar o web site de Yehuda Katz" href="http://yehudakatz.com/">Yehuda Katz</a></span> fizeram um &oacute;timo guia de refer&ecirc;ncia din&acirc;mico sobre as funcionalidades do <span
lang="en">jQuery</span> (usando o pr&oacute;prio <span
lang="en"><em>framework</em></span> para isso, claro). Nesta p&aacute;gina &eacute; poss&iacute;vel visualizar as caracter&iacute;sticas de cada fun&ccedil;&atilde;o de forma detalhada. Excelente guia de refer&ecirc;ncia!</p><p><a
title="visitar learningjquery.com" href="http://www.learningjquery.com/">learningjquery.com</a><br
/> Esse &eacute; o <span
lang="en"><em>blog</em></span> de <span
lang="en">Brandon, Dan, JonBob, Karl</span> e <span
lang="en">Mike</span>, que postam dicas, t&eacute;cnicas tutoriais e macetes sobre o <span
lang="en">jQuery</span> de forma sistematicamente organizada.</p><h2>Refer&ecirc;ncias Nacionais</h2><p><a
href="http://i18n.2kminterativa.com.br/jquery/jquery-getting-started-pt_br.html">Tutorial &#8211; Por onde come&ccedil;ar com o jQuery</a><br
/> Este tutorial aborda de maneira muito eficiente e competente os primeiros passos com jQuery, mostrando, num passo-a-passo progressivo e exemplos bem did&aacute;ticos como se come&ccedil;ar com jQuery.</p><p><a
href="http://simplesideias.com.br/usando-jquery-na-pratica/">Usando jQuery na pr&aacute;tica</a><br
/> Outro tutorial interessant&iacute;ssimo para se come&ccedil;ar; aborda os conceitos b&aacute;sicos e mostra, de forma progressiva e &#8220;suave&#8221;, o in&iacute;cio do caminho do jQuery.</p><div
class="complementos"><p><a
title="visualizar o tutorial DHTML Crossbrowser F&aacute;cil" href="http://elcio.com.br/crossbrowser/">DHTML <span
lang="en">Crossbrowser</span> F&aacute;cil</a><br
/> Esse &eacute; um artigo bem conhecido no meio. Ele ensina alguns princ&iacute;pios b&aacute;sicos para se entender <a
title="defini&ccedil;&atilde;o de " href="http://pt.wikipedia.org/wiki/DHTML">DHTML</a> (para isso, diversas tecnologias <span
lang="en"><em>web</em></span> e t&eacute;cnicas s&atilde;o abordados). &Eacute; uma &oacute;tima leitura complementar.</div></div><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li>Nenhum artigo relacionado...</li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/jquery-apresentacao-introducao/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
