<?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>GUJS - Grupo de Usuários Javascript &#187; Downloads e Exemplos</title>
	<atom:link href="http://gujs.com.br/blog/categoria/downloads-e-exemplos/feed/" rel="self" type="application/rss+xml" />
	<link>http://gujs.com.br/blog</link>
	<description>O Maior Site Javascript do Brasil</description>
	<lastBuildDate>Tue, 27 Oct 2009 14:12:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Contagem regressiva</title>
		<link>http://gujs.com.br/blog/2007/04/contagem-regressiva/</link>
		<comments>http://gujs.com.br/blog/2007/04/contagem-regressiva/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 00:02:43 +0000</pubDate>
		<dc:creator>Matheus Zeuch</dc:creator>
				<category><![CDATA[Cross-browser]]></category>
		<category><![CDATA[Downloads e Exemplos]]></category>
		<category><![CDATA[Tutoriais Intermediários]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/04/contagem-regressiva/</guid>
		<description><![CDATA[Hoje vamos aprender a fazer um contador regressivo simples para uma data e hora futura. Nosso contador deve mostrar o resultado em um formato texto, numa tag span, para que seu estilo possa ser configurado. O resultado é interessante.
O código abaixo é a parte principal do nosso contador. Observe que utilizei variáveis para setar qual [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje vamos aprender a fazer um contador regressivo simples para uma data e hora futura. Nosso contador deve mostrar o resultado em um formato texto, numa tag span, para que seu estilo possa ser configurado. O resultado é interessante.<span id="more-18"></span></p>
<p>O código abaixo é a parte principal do nosso contador. Observe que utilizei variáveis para setar qual a data e hora futura. A vantagem disso é que essas variáveis podem ser atualizadas por uma outra função javascript, fazendo com que o nosso contador possa ser atualizado em tempo real (veremos isso em funcionamento no exemplo prático).</p>
<pre class="prettyprint">
var YY = 2007;
var MM = 12;
var DD = 31;
var HH = 23;
var MI = 59;
var SS = 59; 

function atualizaContador() {
  var hoje = new Date();
  var futuro = new Date(YY,MM-1,DD,HH,MI,SS); 

  var ss = parseInt((futuro - hoje) / 1000);
  var mm = parseInt(ss / 60);
  var hh = parseInt(mm / 60);
  var dd = parseInt(hh / 24); 

  ss = ss - (mm * 60);
  mm = mm - (hh * 60);
  hh = hh - (dd * 24); 

  var faltam = '';
  faltam += (dd &amp;&amp; dd &gt; 1) ? dd+' dias, ' : (dd==1 ? '1 dia, ' : '');
  faltam += (toString(hh).length) ? hh+' hr, ' : '';
  faltam += (toString(mm).length) ? mm+' min e ' : '';
  faltam += ss+' seg'; 

  if (dd+hh+mm+ss &gt; 0) {
    document.getElementById('contador').innerHTML = faltam;
    setTimeout(atualizaContador,1000);
  } else {
    document.getElementById('contador').innerHTML = 'CHEGOU!!!!';
    setTimeout(atualizaContador,1000);
  }
}</pre>
<p>A função <code>atualizaContador()</code> foi escrita de maneira que possa ser alterada facilmente. Você pode, por exemplo, alterar o código para que retorne o contador em vez de exibí-lo.</p>
<p>Abaixo está o código html que utilizei para demonstrar o funcionamento. Fiz com que o evento <code>onchange</code> dos campos atualizem as variáveis da data futura.</p>
<pre class="prettyprint">
&lt;body onload="atualizaContador()"&gt;
&lt;input size="1" onchange="DD=this.value" style="text-align: center" /&gt; /
&lt;input size="1" onchange="MM=this.value" style="text-align: center" /&gt; /
&lt;input size="4" onchange="YY=this.value" style="text-align: center" /&gt; às
&lt;input size="1" onchange="HH=this.value" style="text-align: center" /&gt; :
&lt;input size="1" onchange="MI=this.value" style="text-align: center" /&gt; :
&lt;input size="1" onchange="SS=this.value" style="text-align: center" /&gt;
&lt;br /&gt;
Faltam &lt;span id="contador"&gt;&lt;/span&gt;
&lt;/body&gt;</pre>
<p>Você pode ver um exemplo em funcionamento deste código aqui. Ou se preferir, pode baixar o código para estudar melhor.</p>
<p><a href="http://gujs.com.br/demo/contagem-regressiva"><strong>Exemplo</strong></a> | <a href="http://gujs.com.br/blog/wp-content/uploads/2007/04/contagem-regressiva.zip"><strong>Download</strong></a></p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/04/contagem-regressiva/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Barra de rolagem dinâmica com Ajax</title>
		<link>http://gujs.com.br/blog/2007/04/barra-de-rolagem-dinamica-com-ajax/</link>
		<comments>http://gujs.com.br/blog/2007/04/barra-de-rolagem-dinamica-com-ajax/#comments</comments>
		<pubDate>Thu, 12 Apr 2007 00:00:21 +0000</pubDate>
		<dc:creator>Matheus Zeuch</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Downloads e Exemplos]]></category>
		<category><![CDATA[Tutoriais Avançados]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/04/barra-de-rolagem-dinamica-com-ajax/</guid>
		<description><![CDATA[Um recurso muito interessante do Google Reader é a área onde são listados os posts dos feeds que você assina. Quando os posts são carregados, apenas alguns aparecem na tela, e conforme você vai rolando aquela página para baixo, os demais posts vão aparecendo pouco a pouco. Isso é uma forma de navegação pouco utilizada [...]]]></description>
			<content:encoded><![CDATA[<p>Um recurso muito interessante do Google Reader é a área onde são listados os posts dos feeds que você assina. Quando os posts são carregados, apenas alguns aparecem na tela, e conforme você vai rolando aquela página para baixo, os demais posts vão aparecendo pouco a pouco. Isso é uma forma de navegação pouco utilizada na web, mas muito útil em alguns casos.<span id="more-16"></span></p>
<p>Além da vantagem de não precisar carregar mais itens que o necessário, o usuário também não perde de vista os posts que já estavam carregados quando os novos são exibidos. Este é um problema que acontece naquele conhecido modelo de paginação com os links das páginas e os de próxima página e página anterior.</p>
<p>O objetivo é carregar somente o número de mensagens que preencha o espaço na tela do usuário e, caso o usuário baixe até o final a barra de rolagem, o sistema carregue novas mensagens, mantendo na tela as anteriores. </p>
<p>No <a href="http://gujs.com.br/demo/scroll-ajax">exemplo deste artigo</a>, você pode ver na prática como funciona este modelo de paginação. Se preferir, <a href="http://gujs.com.br/blog/wp-content/uploads/2007/04/scroll-ajax.zip">baixe os códigos fontes</a> para fazer seus estudos e alterações.</p>
<p><strong>Como funciona?</strong> </p>
<p>Não vou me aprofundar explicando a utilização da classe Ajax utilizada no projeto, deixo isso para um futuro post. No momento, veremos as funções essenciais do exemplo, e a primeira delas é a função <code><strong>addLine()</strong></code>, que insere (via DOM) uma nova linha no div dos itens.</p>
<p>A função recebe como parâmetro um objeto contendo os atributos id e text e monta a linha que será inserida logo em seguida. Note que a função também controla a variável global <code>id</code> que será passada como parâmetro em todas as requisições dos notos itens. No nosso caso, apenas para que cada mensagem tenha um número maior que a anterior.</p>
<p>As funções <code><strong>paginationComplete()</strong></code> e <code><strong>pagination()</strong></code> são as responsáveis por fazer as requisições das próximas mensagens.</p>
<p>A função <code><strong>onScroll()</strong></code> verifica se a barra de rolagem está no rodapé da página. Se estiver, executa a função <code>pagination()</code>, que como vimos, fará a requisição das novas mensagens.</p>
<p>A função <code><strong>init()</strong></code> é quem chama pela primeira vez a função <code>pagination()</code>. Ela também atribui aos eventos <code>window.onscroll</code> e <code>window.onresize</code>, para que no sistema faça requisições sempre que ainda tiver espaço para novas mensagens.</p>
<p><strong>Onde utilizar o método?</strong></p>
<p>Utilizei este método (e estes mesmos códigos) em um sistema de monitoramento de mensagens, onde o usuário abria a tela de via as últimas mensagens, e conforme ia baixando a tela as mensagens antigas eram carregadas (até que não houvessem mais mensagens antigas no banco). Outro sistema de refresh fazia as requisições das novas mensagens, que eram exibidas no topo. Com isso consegui um bom sistema de monitoramento em tempo real de mensagens, e que ao mesmo tempo era prático para visualizar mensagens antigas.</p>
<p>Você pode usar sua imaginação para utilizar estes códigos em seus projetos. Acho que é um bom exemplo de se usar em sistemas de mensagens, leitor de e-mails, agregador de feeds rss, e em qualquer lugar onde o método convencional de paginação não é a melhor opção.</p>
<p><strong>Considerações finais</strong></p>
<p>Testei o exemplo no Firefox e no IE 7, portanto, se você encontrar algum erro por favor me avise que eu corrijo.</p>
<p>Se tiver dúvidas ou quiser fazer algum comentário sobre o artigo e o exemplo, sinta-se à vontade para utilizar o formulário de comentários abaixo ou então <a href="http://gujs.com.br/forum/viewtopic.php?p=502" title="Acompanhe a discussão no Fórum">acompanhar a discussão no fórum</a>.</p>
<p>Divirta-se!</p>
<p><a href="http://gujs.com.br/demo/scroll-ajax" title="Veja o exemplo"><strong>Exemplo</strong></a> | <a href="http://gujs.com.br/blog/wp-content/uploads/2007/04/scroll-ajax.zip" title="Faça o download dos arquivos"><strong>Download</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/04/barra-de-rolagem-dinamica-com-ajax/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ordenando listas com Javascript</title>
		<link>http://gujs.com.br/blog/2007/03/ordenando-listas-com-javascript/</link>
		<comments>http://gujs.com.br/blog/2007/03/ordenando-listas-com-javascript/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 18:26:01 +0000</pubDate>
		<dc:creator>Matheus Zeuch</dc:creator>
				<category><![CDATA[Cross-browser]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Downloads e Exemplos]]></category>
		<category><![CDATA[Orientação à Objetos]]></category>
		<category><![CDATA[Tutoriais Avançados]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/03/ordenando-listas-com-javascript/</guid>
		<description><![CDATA[A classe SortableList é um pequeno exemplo de utilização de métodos DOM sendo utilizados para facilitar a ordenação de itens de uma lista.
Para utilizar a classe, basta importar o arquivo js e instanciar um objeto que estará associado à sua lista. Feito isso você pode criar seus próprios links para manipular os eventos de ordenação [...]]]></description>
			<content:encoded><![CDATA[<p>A classe <code>SortableList</code> é um pequeno exemplo de utilização de métodos DOM sendo utilizados para facilitar a ordenação de itens de uma lista.<span id="more-10"></span></p>
<p>Para utilizar a classe, basta importar o arquivo js e instanciar um objeto que estará associado à sua lista. Feito isso você pode criar seus próprios links para manipular os eventos de ordenação da lista (mover para cima ou para baixo). Veja o exemplo abaixo:</p>
<pre class="prettyprint">var bozo;

function init() { bozo = new SortableList($('list')); } //&lt;ul id="list"&gt;

window.onload = init;</pre>
<p>Ao instanciar o <code>SortableList</code> você também pode definir duas opções interessantes:</p>
<ul>
<li><strong>A primeira é o &#8220;rotate&#8221;</strong>, que define se os itens vão girar ou não (<code>true</code> ou <code>false</code>), ou seja, se o primeiro da lista vai para baixo quando o usuário clicar para cima, e vice-versa, quando o último item se torna o primeira ao clicar para baixo.</li>
<li><strong>E a segunda é o onComplete</strong>, onde você pode setar uma função que será executada toda vez que a lista for reordenada. Nesta função você pode, por exemplo, fazer uma requisição Ajax que salvará a ordenação no seu banco de dados, onde você pode, para isso, acessar o atributo &#8220;<code>list</code>&#8220;, que contém a lista ordenada.</li>
</ul>
<p><strong><a href="http://gujs.com.br/demo/sortable-list/">Exemplo</a></strong> | <strong><a href="http://gujs.com.br/blog/wp-content/uploads/2007/03/sortable-list.zip">Download</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/03/ordenando-listas-com-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.321 seconds -->
<!-- Cached page served by WP-Cache -->
