<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>PTTutoriais</title>
	
	<link>http://www.pttutoriais.com</link>
	<description>Tutoriais no mundo web</description>
	<lastBuildDate>Fri, 24 Dec 2010 19:01:39 +0000</lastBuildDate>
	<language>pt-PT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Pttutoriais" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="pttutoriais" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Barra de navegação em CSS3 e jQuery</title>
		<link>http://www.pttutoriais.com/507/barra-de-navegacao-em-css3-e-jquery</link>
		<comments>http://www.pttutoriais.com/507/barra-de-navegacao-em-css3-e-jquery#comments</comments>
		<pubDate>Fri, 17 Dec 2010 07:42:22 +0000</pubDate>
		<dc:creator>Jota</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=507</guid>
		<description><![CDATA[<p>Depois da publicação de um excelente pacote em Photoshop de barras de navegação pelo o Eduardo, fiquei a pensar será que consigo fazer o mesmo sem usar imagens?</p>]]></description>
			<content:encoded><![CDATA[<p>O objectivo é simples, fazer um menu de navegação o mais parecido possível ao pacote de navegação em Photoshop que o Eduardo <a href="http://www.pttutoriais.com/490/pacote-barras-de-navegacao" title="Pacote de barras de navegação">publicou</a>.</p>
<p>Mas não posso usar nenhuma imagem. Nada, zero, nothing!</p>
<p>Claro podia subir a parada e dizer que tem que ser compatível com todos os navegadores! Mas não, vamos deixar esse pequeno detalhe de lado, porque iria ser um pouco mais difícil.</p>
<p>Neste tutorial vamos usar CSS3, por isso qualquer navegador que suporte CSS3 deve funcionar como deve ser. Eu testei esta solução em:</p>

<ul>
  <li>Firefox</li>
  <li>Google Chrome</li>
</ul>

<p>Agora que já sabemos o que queremos fazer, vamos pôr mãos à obra.</p>

<h2>HTML</h2>

<p>Vamos começar pelo o nosso HTML.</p>

<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;Navegacao&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;#undefined&quot; title=&quot;Página Inicial&quot;&gt;Página Inicial&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#undefined&quot; title=&quot;Sobre&quot;&gt;Sobre&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#undefined&quot; title=&quot;Contactos&quot;&gt;Contactos&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#undefined&quot; title=&quot;Negócios&quot; class=&quot;selecionado&quot;&gt;Negócios&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#undefined&quot; title=&quot;Suporte&quot;&gt;Suporte&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#undefined&quot; title=&quot;Link Muito Grandeeeeeeeeeeeeeeee&quot;&gt;Link Muito Grandeeeeee&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;div id=&quot;Caixa&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>

<div class="exemplo">
<ul>
    <li><a href="#undefined" title="Página Inicial">Página Inicial</a></li>
    <li><a href="#undefined" title="Sobre">Sobre</a></li>
    <li><a href="#undefined" title="Contactos">Contactos</a></li>
    <li><a href="#undefined" title="Negócios" class="selecionadoEx">Negócios</a></li>
    <li><a href="#undefined" title="Suporte">Suporte</a></li>
    <li><a href="#undefined" title="Link Muito Grandeeeeeeeeeeeeeeee">Link Muito Grandeeeeee</a></li>
  </ul>
</div>
<p>Nada de complicado, como podemos ver é um markup bastante simples e correcto.</p>

<p>Temos um <span class="c_html">div</span> com o <span class="c_html">ID</span><span class="c_nota">Navegacao</span> vai servir de contentor para a barra de navegação.</p>

<p>Temos uma lista com links, e por fim temos um <span class="c_html">div</span> com o <span class="c_html">ID</span><span class="c_nota">Caixa</span> que vai servir para criar uns quantos efeitos que vamos ver mais tarde.</p>

<p>Se repararem no design do Edumicro podem ver que o link que esta seleccionado tem uma cor de fundo diferente, para tentarmos criar o mesmo efeito vamos usar o <span class="c_nota">Caixa</span>.</p>

<p>Mas antes de começarmos a pensar em funcionalidade, vamos tentar criar esta barra de navegaçãoa mais parecida possível ao design do Edumicro, para tal começamos com CSS.</p>

<h2>Explicar um pouco o CSS</h2>

<p>No design em Photoshop podemos ver que certos detalhes são um pouco mais difíceis em CSS, mas mesmo assim possíveis, mesmo sem ter o mesmo resultado final podemos quase imitar o original.</p>

<p>Cantos redondos, com o CSS3 já é possível conseguir sem ter que recorrer a grandes truques ou a imagens para tal usamos <span class="c_css">border-radius</span>.</p>

<img src="http://www.pttutoriais.com/wp-content/uploads/2010/12/borderradius.jpg" alt="Border Radius" title="Border Radius" width="563" height="217" class="size-full wp-image-564" />

<p>Gradientes também já é possível, apesar de ainda ser necessário usar uns quantos truques, e o resultado final não ser bem igual para todos os navegadores.</p>
<p>Especialmente porque temos que criar o efeito em três formas diferentes para suportar cada navegador ( FF / Motor Webkit / IE).</p>

<p>Para o firefox usamos:</p>

<pre class="brush: css; title: ; notranslate">
  background: -moz-linear-gradient(top, #2E6FC0 0%, #4491D6 50%, #3A86CA 51%, #2D6FBE 100%); 
</pre>

<p>O <span class="c_css">top</span> é usado para indicar onde queremos começar, o ponto de partida do nosso gradiente.</p>
<p>O resto usamos para indicar as cores dos gradientes, as posições que começam e acabam.</p>

<img src="http://www.pttutoriais.com/wp-content/uploads/2010/12/ffgradiente.jpg" alt="Gradientes no firefox" title="Gradientes no firefox" width="169" height="300" class="size-full wp-image-566" />

<p>Para mais informações visitar <a href="https://developer.mozilla.org/en/CSS/-moz-linear-gradient" title="Centro do Mozilla">Mozilla</a>.</p>

<p>Para navegadores baseados no motor WebKit (Safari por exemplo), usamos:</p>

<pre class="brush: css; title: ; notranslate">
  -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2E6FC0), color-stop(50%,#4491D6), color-stop(51%,#3A86CA), color-stop(100%,#2D6FBE)); 
</pre>

<p>O primeiro argumento é o tipo de gradiente e pode ser <span class="c_css">linear</span> ou <span class="c_css">radial</span>.</p>

<p>O segundo e o terceiro argumento é a posição, e por fim as cores onde começam e onde acabam.</p>

<img src="http://www.pttutoriais.com/wp-content/uploads/2010/12/webkitgradiente.jpg" alt="WebKit" title="WebKit" width="178" height="300" class="size-full wp-image-568" />

<p>Para mais informações visitar o <a href="http://webkit.org/blog/175/introducing-css-gradients/" title="WebKit">WebKit</a>.</p>

<p>Por fim temos a solução para o Internet Explorer, que mais uma vez não corresponde aos standards, mas para também não ser tão mauzinho, acho que o Internet Explorer já suporta gradientes desde a versão 5.5.</p>

<pre class="brush: css; title: ; notranslate">
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2E6FC0', endColorstr='#2D6FBE',GradientType=0 );
</pre>

<p>Como podemos ver o IE não suporta a possibilidade de controlarmos as posições onde queremos começar uma cor e acabar com outra cor.</p>

<p>Temos também o <span class="c_css">GradientType</span>, que pode ser 0 para vertical e 1 para horizontal.</p>

<img src="http://www.pttutoriais.com/wp-content/uploads/2010/12/iegradiente.jpg" alt="IE" title="IE" width="104" height="300" class="size-full wp-image-569" />

<p>Para mais informações visitar o site da <a href="http://msdn.microsoft.com/en-us/library/ms532997(VS.85,loband).aspx" title="Microsoft">Microsoft</a>.</p>

<p>Uma forma mais fácil de fazeres os gradientes é através do site <a href="http://www.colorzilla.com/gradient-editor/" title="Colorzilla">Colorzilla</a>.</p>

<p>Vamos então construir o CSS.</p>

<h2>CSS</h2>

<pre class="brush: css; title: ; notranslate">
#Navegacao{
  border: 1px solid #004FAA;
  padding: 15px 30px 15px 30px;
  font-family: arial, serif;
  font-size: 18px;
  
  /* Cantos redondos */
  -moz-border-radius: 6px; 
  border-radius: 6px;
				
  /* A posicao e o z-index queremos que a nossa caixa esteja por baixo da barra de navegacao */
  position:absolute;
  z-index: 2;
				
  /* Gradiente */
  /* browsers antigos */
  background: #2E6FC0; 
  /* firefox */
  background: -moz-linear-gradient(top, #2E6FC0 0%, #4491D6 50%, #3A86CA 51%, #2D6FBE 100%); 
  /* webkit */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2E6FC0), color-stop(50%,#4491D6), color-stop(51%,#3A86CA), color-stop(100%,#2D6FBE)); 
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2E6FC0', endColorstr='#2D6FBE',GradientType=0 ); /* ie */
				
}

#Navegacao ul{
  list-style-type: none;
  padding:0;
  margin:0;
}
			
#Navegacao ul li{
  display: block;
  float:left;
  padding-right:20px;
}
			
#Navegacao a:link{
  text-decoration: none;
  color: #FFFFFF;	
}

#Navegacao a:visited{
  color: #FFFFFF;	
}
		
#Caixa{
  /* z-index para a caixa estar por baixo da navegacao */
  position: absolute;
  z-index:-1;
  border:1px solid #265FB1;
  background: #2E6FC0; /* browsers antigos */
  background: -moz-linear-gradient(top, #3374C5 0%, #7CB3E2 50%, #74ABDA 51%, #6396CF 100%); /* firefox */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3374C5), color-stop(50%,#7CB3E2), color-stop(51%,#74ABDA), color-stop(100%,#6396CF));
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3374C5', endColorstr='#7CB3E2',GradientType=0 ); /* ie */
  padding:20px 10px 20px 10px;
  /* Cantos redondos */
  -moz-border-radius: 3px; 
  border-radius: 3px;
}

</pre>
<div class="clear"></div>
<div class="exemplo" style="height:70px; display:block;">
  <div id="NavegacaoEx">
    <ul>
      <li><a href="#undefined" title="Página Inicial">Página Inicial</a></li>
      <li><a href="#undefined" title="Sobre">Sobre</a></li>
      <li><a href="#undefined" title="Contactos">Contactos</a></li>
      <li><a href="#undefined" title="Negócios" class="selecionadoEx">Negócios</a></li>
      <li><a href="#undefined" title="Suporte">Suporte</a></li>
      <li><a href="#undefined" title="Link Muito Grandeeeeeeeeeeeeeeee">Link Muito Grandeeeeee</a></li>
    </ul>
    <div id="CaixaEx"></div>
  </div>
</div>
<div class="clear"></div>

<p>Podemos notar que em termos de estilo a barra de navegação está completa, mas o efeito que foi dado na <span class="c_nota">Caixa</span> de momento não faz sentido.</p>

<p>Para tal vamos usar javascript com ajuda do jQuery, para criar uma animação. Basicamente queremos que a <span class="c_nota">Caixa</span> se mova conforme o rato do usuário.</p>

<p>Se o o usuário passar com o rato pelo o link "Negócios" então queremos que a nossa <span class="c_nota">Caixa</span> se mova até esse link.</p>

<p>Queremos também que a posição inicial da <span class="c_nota">Caixa</span> seja o link que tenha a referência à classe <span class="c_css">selecionado</span></p>

<p>Um pequeno aviso, o javascript que vou apresentar é bom já terem um pouco de conhecimento de jQuery.</p>

<p>Vamos então começar o nosso Javascript.</p>

<h2>Javascript</h2>

<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() { // Documento esta pronto
  $(&quot;#Navegacao ul li&quot;).mouseenter(function(evento) { // O usuario passa com o rato nos nossos links
    // Cache
    var elemento = $(this);
    // Posicao e tamanho do elemento
    var Largura = $(elemento).width(); // Largura do li
    var PosicaoEsquerda = $(elemento).position().left - 10; // Posicao do li menos 10, pois estamos a adicionar no padding no CSS
    var PosicaoTop = $(elemento).position().top - 10; // Posicao do li menos 10, pois estamos a adicionar no padding no CSS 
    // Animacao
    $(&quot;#Caixa&quot;).stop().animate({ &quot;top&quot;: PosicaoTop + &quot;px&quot;, &quot;left&quot;: PosicaoEsquerda + &quot;px&quot;, &quot;width&quot;: Largura + &quot;px&quot; }, &quot;slow&quot;);
  });

  // Se o rato sair da barra de navegacao entao chamar a nossa funcao PosicaoSelecionado
  $(&quot;#Navegacao&quot;).mouseleave(function(evento) {
    PosicaoSelecionado(false);
  });

  // Para quando a pagina arranca pela a primeira vez ou o usuario tira o rato da nossa barra de navegacao
  function PosicaoSelecionado(PrimeiraVez) {
    // cache o elemento selecionado
    var Selecionado = $(&quot;.selecionado&quot;);
    //Mover para essa posicao
    var PosicaoEsquerda = $(Selecionado).position().left - 10;
    var PosicaoTop = $(Selecionado).position().top - 10;
    var Largura = $(Selecionado).width();

    // Se for a primeira vez que o script arranca então mudar logo para essa posição, senão usar uma animação
    if (PrimeiraVez == true) {
      $(&quot;#Caixa&quot;).css({ &quot;top&quot;: PosicaoTop + &quot;px&quot;, &quot;left&quot;: PosicaoEsquerda + &quot;px&quot;, &quot;width&quot;: Largura + &quot;px&quot; });
    } else {
      $(&quot;#Caixa&quot;).stop().animate({ &quot;top&quot;: PosicaoTop + &quot;px&quot;, &quot;left&quot;: PosicaoEsquerda + &quot;px&quot;, &quot;width&quot;: Largura + &quot;px&quot; }, &quot;slow&quot;);
   }
  }

  // Quando a pagina arranca pela a primeira vez e queremos a nossa caixa no link correcto
  PosicaoSelecionado(true);

});
</pre>

<div class="clear"></div>
<div class="exemplo" style="height:70px; display:block;">
  <div id="Navegacao">
    <ul>
      <li><a href="#undefined" title="Página Inicial">Página Inicial</a></li>
      <li><a href="#undefined" title="Sobre">Sobre</a></li>
      <li><a href="#undefined" title="Contactos">Contactos</a></li>
      <li><a href="#undefined" title="Negócios" class="selecionado">Negócios</a></li>
      <li><a href="#undefined" title="Suporte">Suporte</a></li>
      <li><a href="#undefined" title="Link Muito Grandeeeeeeeeeeeeeeee">Link Muito Grandeeeeee</a></li>
    </ul>
    <div id="Caixa"></div>
  </div>
</div>
<div class="clear"></div>



<h2>Conclusão</h2>

<p>Estou contente com o resultado final, mas a verdade tem que ser dita e existe vários pormenores que não consegui igual ao pacote que o Eduardo publicou.</p>
<p>Os gradientes no Photoshop resultam melhor, e os detalhes que o Eduardo deu nas barras de navegação são difíceis de replicar na minha solução.</p>
<p>Porém foi um desafio interessante, fiquei a saber um pouco mais de gradientes em CSS3.</p>
<p>Para uma solução mais realista, acho que se misturarmos este tutorial com o pacote de barras de navegação, acho que é mesmo a melhor solução.</p>
<p>Espero que tenham gostado deste tutorial.</p>

<div class="clear"></div>
<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/BarraDeNavegacaoHTMLjQuery.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>
]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/507/barra-de-navegacao-em-css3-e-jquery/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pacote Login LightBox</title>
		<link>http://www.pttutoriais.com/520/pacote-login-lightbox</link>
		<comments>http://www.pttutoriais.com/520/pacote-login-lightbox#comments</comments>
		<pubDate>Tue, 14 Dec 2010 13:48:15 +0000</pubDate>
		<dc:creator>Eduardo Santos</dc:creator>
				<category><![CDATA[Freebies]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=520</guid>
		<description><![CDATA[<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de login lightbox, criado exclusivamente para o PT Tutoriais.</p>]]></description>
			<content:encoded><![CDATA[<p>Devido a um atraso com um tutorial de jQuery, apresentamos outro freebie de grande qualidade.</p>
<p>O próximo artigo será um tutorial de programação.</p>
<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de login lightbox, criado exclusivamente para o PT Tutoriais.</p>
<img src="http://www.pttutoriais.com/wp-content/uploads/2010/12/pack5.png" alt="Login Lightbox Photoshop" title="Login Lightbox Photoshop" width="600" height="600" class="size-full wp-image-522" />
<div class="clear"></div>
<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/pack5.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/520/pacote-login-lightbox/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Pacote Elementos de Interface</title>
		<link>http://www.pttutoriais.com/538/pacote-elementos-de-interface</link>
		<comments>http://www.pttutoriais.com/538/pacote-elementos-de-interface#comments</comments>
		<pubDate>Fri, 10 Dec 2010 10:18:45 +0000</pubDate>
		<dc:creator>Cosmin Negoita</dc:creator>
				<category><![CDATA[Freebies]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=538</guid>
		<description><![CDATA[<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de elementos de interface, criado exclusivamente para o PT Tutoriais.</p>]]></description>
			<content:encoded><![CDATA[<p>PT Tutoriais apresenta mais um novo designer.</p>
<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de elementos de interface, criado exclusivamente para o PT Tutoriais.</p>

<img src="http://www.pttutoriais.com/wp-content/uploads/2010/12/preview1.jpg" alt="Pacote Elementos de Interface" title="Pacote Elementos de Interface" width="848" height="543" class="size-full wp-image-539" />

<div class="clear"></div>
<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/cnpack1.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/538/pacote-elementos-de-interface/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pacote Botões Brilhantes</title>
		<link>http://www.pttutoriais.com/527/pacote-botoes-brilhantes</link>
		<comments>http://www.pttutoriais.com/527/pacote-botoes-brilhantes#comments</comments>
		<pubDate>Mon, 06 Dec 2010 21:46:44 +0000</pubDate>
		<dc:creator>Adis Hasanic</dc:creator>
				<category><![CDATA[Freebies]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=527</guid>
		<description><![CDATA[<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de botões brilhantes, criado exclusivamente para o PT Tutoriais.</p>]]></description>
			<content:encoded><![CDATA[<p>PT Tutoriais esta internacional! Um novo designer que oferece um pacote brilhante de botões.</p>
<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de botões brilhantes, criado exclusivamente para o PT Tutoriais.</p>

<img src="http://www.pttutoriais.com/wp-content/uploads/2010/12/freebie.jpg" alt="Botões brilhantes" title="Botões brilhantes" width="800" height="516" class="size-full wp-image-528" />

<div class="clear"></div>
<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/ahpack1.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>
]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/527/pacote-botoes-brilhantes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pacote Barras de Navegação</title>
		<link>http://www.pttutoriais.com/490/pacote-barras-de-navegacao</link>
		<comments>http://www.pttutoriais.com/490/pacote-barras-de-navegacao#comments</comments>
		<pubDate>Sat, 04 Dec 2010 20:25:32 +0000</pubDate>
		<dc:creator>Eduardo Santos</dc:creator>
				<category><![CDATA[Freebies]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=490</guid>
		<description><![CDATA[<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de barras de navegação, criado exclusivamente para o PT Tutoriais.</p>]]></description>
			<content:encoded><![CDATA[<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de barras de navegação, criado exclusivamente para o PT Tutoriais.</p>
<p>E não percam o próximo tutorial onde vamos tentar criar o mesmo efeito mas sem usar imagens e sim apenas CSS e um pouco de jQuery.</p>
<img src="http://www.pttutoriais.com/wp-content/uploads/2010/11/pack4.png" alt="Barras de navegação" title="Barras de navegação" width="800" height="600" class="size-full wp-image-492" />
<div class="clear"></div>
<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/pack4.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/490/pacote-barras-de-navegacao/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>jQuery – Templates</title>
		<link>http://www.pttutoriais.com/465/jquery-templates</link>
		<comments>http://www.pttutoriais.com/465/jquery-templates#comments</comments>
		<pubDate>Tue, 30 Nov 2010 10:48:47 +0000</pubDate>
		<dc:creator>Jota</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=465</guid>
		<description><![CDATA[<p>Quem diria, a Microsoft dá uma ajudinha no jQuery e oferece um plugin fantástico.</p>
<p>Neste tutorial vamos dar umas voltinhas com o jQuery template.</p>]]></description>
			<content:encoded><![CDATA[<p>Em 4 de Outubro jQuery tornou oficial o suporte de três plugins criados pela Microsoft.</p>

<p>Podem ver o anúncio no blog do <a href="http://weblogs.asp.net/scottgu/archive/2010/10/04/jquery-templates-data-link-and-globalization-accepted-as-official-jquery-plugins.aspx" title="jQuery Template">Scott Guthrie</a>, por parte da Microsoft, e o anúncio oficial por parte da equipa do <a href="http://blog.jquery.com/2010/10/04/new-official-jquery-plugins-provide-templating-data-linking-and-globalization/" title="jQuery Template">jQuery</a>.</p>

<p>Os plugins são:</p>

<ul>
<li>jQuery Templates</li>
<li>jQuery Data Link</li>
<li>jQuery Globalization</li>
</ul>

<p>Há pouco tempo tenho começado a brincar com o jQuery Templates, e neste tutorial vou tentar explicar como usar e para que serve.</p>

<h2>O que é? Como usar?</h2>

<p>Em geral usando jQuery Template permite-te uma forma fácil de interpretar HTML e substituir o conteúdo com data criado ou recebido em javascript, como por exemplo data no formato JSON.</p>
<p>Com o crescimento de JSON, especialmente em serviços de Web, e também em aplicações Ajax, sem dúvida que este plugin, criado pela Microsoft, vai dar muito jeito.</p>

<p>Como sempre começamos por referenciar o jQuery e também o plugin. Podem encontrar o plugin no site CDN da Microsoft.</p>

<pre class="brush: xml; title: ; notranslate">
&lt;script src=&quot;http://ajax.microsoft.com/ajax/jquery/jquery-1.4.4.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>

<p>Vamos começar então agora a brincar um pouco. Vamos começar pelo o javascript, vamos criar alguma data sobre livros, e depois vamos usar esta data para popular uma template.</p>

<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {
  var livros = [
{ Titulo: &quot;A Cabana&quot;, 
   Preco: &quot;€10&quot;, 
   Editora: &quot;Sextante&quot;, 
   NumeroDePaginas: &quot;240&quot;, 
   ISBN: &quot;9788599296363&quot;, 
   Descricao: &quot;A filha mais nova de Mackenzie Allen Philip foi raptada durante as férias em família e há evidências de que ela foi brutalmente assassinada e abandonada numa cabana.&quot; },
{ Titulo: &quot;O Simbolo Perdido&quot;, 
   Preco: &quot;€18&quot;, 
   Editora: &quot;Sextante&quot;, 
   NumeroDePaginas: &quot;496&quot;, 
   ISBN: &quot;9788599296554&quot;, 
   Descricao: &quot;Depois de ter sobrevivido a uma explosão no Vaticano e a uma caçada humana em Paris, Robert Langdon está de volta com seus profundos conhecimentos de simbologia e sua brilhante habilidade para solucionar problemas.&quot; },
{ Titulo: &quot;Crepúsculo&quot;, 
   Preco: &quot;€18&quot;, 
   Editora: &quot;Intrínseca&quot;, 
   NumeroDePaginas: &quot;416&quot;, 
   ISBN: &quot;9788598078304&quot;, 
   Descricao: &quot;Isabella Swan chega à nublada e chuvosa cidadezinha de Forks - último lugar onde gostaria de viver.Tenta se adaptar à vida provinciana na qual aparentemente todos se conhecem, lidar com sua constrangedora falta de coordenação motora e se habituar a morar com um pai com quem nunca conviveu.&quot; }
];
});
</pre>

<p>Como podemos ver criámos apenas data que contem a informação de um livro. Neste exemplo temos três livros que contêm o título, preço, editora, número de páginas, o código ISBN e uma pequena descrição do livro.</p>

<p>Neste exemplo eu especifico a data, mas normalmente esta informação viria de um serviço web, ou mesmo de uma base dados em que usamos ajax para trazer a informação.</p>

<p>Vamos agora ver como podemos usar a data com o novo plugin da microsoft templates.</p>

<h2>.tmpl()</h2>

<p>Este método permite fazermos a combinação de uma template com a data, sem dúvida uma das partes importantes para usarmos este plugin.</p>

<p>Mas afinal o que é um template? Para tal temos que analisar o nosso HTML.</p>

<pre class="brush: xml; title: ; notranslate">
&lt;body&gt;
  &lt;h2&gt;Livros&lt;/h2&gt;
  &lt;div id=&quot;LivrosContainer&quot;&gt;&lt;/div&gt;
				
  &lt;!-- Template --&gt;
  &lt;script id=&quot;LivrosTemplate&quot; type=&quot;text/html&quot;&gt;
    &lt;div class=&quot;Livro&quot;&gt;
      &lt;p&gt;&lt;span&gt;Titulo: &lt;/span&gt;{{= Titulo }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;Preco: &lt;/span&gt;{{= Preco }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;Editora: &lt;/span&gt;{{= Editora }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;Numero De Paginas: &lt;/span&gt;{{= NumeroDePaginas }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;ISBN: &lt;/span&gt;{{= ISBN }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;Descricao: &lt;/span&gt;{{= Descricao }}&lt;/p&gt;
    &lt;/div&gt;
  &lt;/script&gt;
  &lt;!-- / Template --&gt;
&lt;/body&gt;
</pre>

<p>Simples? Eu acho que sim. A ideia é usar a nossa template por cada livro que temos na nossa data.</p>

<p>Podemos ver algo novo neste HTML, primeiro declaramos o <span class="c_html">div</span> <span class="c_nota">LivrosContainer</span>, que vai servir como recipiente para a template.</p>

<p>Podemos ver também o uso <span class="c_javascript">{{= }}</span>, que faz parte das tags disponíveis no plugin, existe várias tags, mas <span class="c_javascript">{{= }}</span> é uma das mais importantes.</p>

<p>Ao especificarmos <span class="c_javascript">{{= Titulo }}</span> o plugin trata de ir buscar a data que definimos com esse valor.</p>

<p>O próximo passo será como fazer a ligação entre a data e o nosso template.</p>

<pre class="brush: jscript; highlight: [23]; title: ; notranslate">
$(document).ready(function() {
  var livros = [
{ Titulo: &quot;A Cabana&quot;, 
   Preco: &quot;€10&quot;, 
   Editora: &quot;Sextante&quot;, 
   NumeroDePaginas: &quot;240&quot;, 
   ISBN: &quot;9788599296363&quot;, 
   Descricao: &quot;A filha mais nova de Mackenzie Allen Philip foi raptada durante as férias em família e há evidências de que ela foi brutalmente assassinada e abandonada numa cabana.&quot; },
{ Titulo: &quot;O Simbolo Perdido&quot;, 
   Preco: &quot;€18&quot;, 
   Editora: &quot;Sextante&quot;, 
   NumeroDePaginas: &quot;496&quot;, 
   ISBN: &quot;9788599296554&quot;, 
   Descricao: &quot;Depois de ter sobrevivido a uma explosão no Vaticano e a uma caçada humana em Paris, Robert Langdon está de volta com seus profundos conhecimentos de simbologia e sua brilhante habilidade para solucionar problemas.&quot; },
{ Titulo: &quot;Crepúsculo&quot;, 
   Preco: &quot;€18&quot;, 
   Editora: &quot;Intrínseca&quot;, 
   NumeroDePaginas: &quot;416&quot;, 
   ISBN: &quot;9788598078304&quot;, 
   Descricao: &quot;Isabella Swan chega à nublada e chuvosa cidadezinha de Forks - último lugar onde gostaria de viver.Tenta se adaptar à vida provinciana na qual aparentemente todos se conhecem, lidar com sua constrangedora falta de coordenação motora e se habituar a morar com um pai com quem nunca conviveu.&quot; }
];

  $(&quot;#LivrosTemplate&quot;).tmpl(livros).appendTo(&quot;#LivrosContainer&quot;);

});
</pre>

<p><a href="http://exemplos.pttutoriais.com/jQueryTemplating/jQuery-Templating-Demo1.html" title="jQuery Templating Exemplo 1">Exemplo</a></p>
<p>Simples não? Com apenas uma linha conseguimos misturar a nossa data com HTML, sem estarmos com grandes complicações em fazer o loop da data e criar strings e strings de HTML em javascript e depois adicionar no DOM.</p>

<p>Vamos agora analisar algumas das tags disponíveis no plugin.</p>

<h2>{{html}}</h2>

<p>No nosso exemplo podem ver que temos a descrição do livro, mas sem nenhum HTML. Porém algumas vezes a data vem com HTML. Por exemplo:</p>

<pre class="brush: jscript; title: ; notranslate">
Descricao: &quot;&lt;p&gt;Isabella Swan chega à nublada e chuvosa cidadezinha de Forks - último lugar onde gostaria de viver.&lt;/p&gt;&lt;p&gt;Tenta se adaptar à vida provinciana na qual aparentemente todos se conhecem, lidar com sua constrangedora falta de coordenação motora e se habituar a morar com um pai com quem nunca conviveu.&lt;/p&gt;&quot;
</pre>

<p>Podemos ver que adicionamos dois parágrafos usando <span class="c_html">&lt;p&gt;</span>.</p>

<p>Ao usarmos a template no exemplo em cima, podemos verificar que o navegador não interpreta o HTML, e mostra os nossos <span class="c_html">&lt;p&gt;</span> como texto.</p>

<p>Nestes casos podemos usar <span class="c_javascript">{{html}}</span> para obrigar a render o HTML.</p>

<pre class="brush: xml; highlight: [9]; title: ; notranslate">
  &lt;!-- Template --&gt;
  &lt;script id=&quot;LivrosTemplate&quot; type=&quot;text/html&quot;&gt;
    &lt;div class=&quot;Livro&quot;&gt;
      &lt;p&gt;&lt;span&gt;Titulo: &lt;/span&gt;{{= Titulo }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;Preco: &lt;/span&gt;{{= Preco }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;Editora: &lt;/span&gt;{{= Editora }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;Numero De Paginas: &lt;/span&gt;{{= NumeroDePaginas }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;ISBN: &lt;/span&gt;{{= ISBN }}&lt;/p&gt;
      &lt;p&gt;&lt;span&gt;Descricao: &lt;/span&gt;{{html Descricao }}&lt;/p&gt;
    &lt;/div&gt;
  &lt;/script&gt;
</pre>

<p><a href="http://exemplos.pttutoriais.com/jQueryTemplating/jQuery-Templating-Demo2.html" title="jQuery Templating Exemplo 2">Exemplo</a></p>

<h2>{{if}} e {{else}}</h2>

<p>Usando estas tags, podemos mostrar conteúdo alternativo.</p>

<p>Vamos supor que por vezes alguns livros não contêm a descrição e não queremos ter um espaço em branco, preferindo mostrar uma frase a informar que o conteúdo não se encontra disponível.</p>

<p>Para tal modificamos a nossa template.</p>

<pre class="brush: xml; title: ; notranslate">
{{if Descricao}}
  &lt;span&gt;Descricao: &lt;/span&gt;{{html Descricao }}
{{else}}
  &lt;span&gt;Nao disponivel&lt;/span&gt;
{{/if}}
</pre>

<p>Podemos também comparar com um valor. Por exemplo se o número de páginas do livro for maior que 250 então queremos mostrar uma mensagem a dizer "muitas páginas".</p>

<pre class="brush: xml; title: ; notranslate">
{{if NumeroDePaginas &lt; 250}}
  &lt;p&gt;&lt;span&gt;Numero De Paginas: &lt;/span&gt;{{= NumeroDePaginas }}&lt;/p&gt;
{{else}}
  &lt;p&gt;&lt;span&gt;Numero De Paginas: &lt;/span&gt;Muitas Paginas&lt;/p&gt;
{{/if}}
</pre>

<p><a href="http://exemplos.pttutoriais.com/jQueryTemplating/jQuery-Templating-Demo3.html" title="jQuery Templating Exemplo 3">Exemplo</a></p>

<h2>{{each}}</h2>

<p>Serve para reiterar uma matriz de dados.</p>
<p>Vamos supor que o <span class="c_nota">ISBN</span> pode ter vários valores, para tal modificamos a nossa data.</p>

<pre class="brush: jscript; title: ; notranslate">
ISBN: [&quot;9788599296363&quot;, &quot;783987389&quot;, &quot;389738973&quot;] // Livro 1
ISBN: [&quot;9788599296554&quot;] // Livro 2
ISBN: [&quot;9788598078304&quot;, &quot;323423566&quot;] // Livro 3
</pre>

<p>Usando o <span class="c_javascript">{{each}}</span>, podemos reiterar cada valor na nossa template.</p>

<pre class="brush: xml; title: ; notranslate">
{{each ISBN}}
  &lt;p&gt;&lt;span&gt;ISBN:&lt;/span&gt;${$value}&lt;/p&gt;
{{/each}}
</pre>

<p><a href="http://exemplos.pttutoriais.com/jQueryTemplating/jQuery-Templating-Demo4.html" title="jQuery Templating Exemplo 4">Exemplo</a></p>

<h2>{{tmpl}}</h2>

<p>Em simples palavras permite-te criar templates dentro de templates.</p>

<p>Por exemplo se quisermos em vez de usarmos o <span class="c_javascript">{{each}}</span> no exemplo em cima, podemos criar outra template.</p>

<pre class="brush: xml; title: ; notranslate">
&lt;!-- Template --&gt;
&lt;script id=&quot;LivrosTemplate&quot; type=&quot;text/html&quot;&gt;
  &lt;div class=&quot;Livro&quot;&gt;
    &lt;p&gt;&lt;span&gt;Titulo: &lt;/span&gt;{{= Titulo }}&lt;/p&gt;
    &lt;p&gt;&lt;span&gt;Preco: &lt;/span&gt;{{= Preco }}&lt;/p&gt;
    &lt;p&gt;&lt;span&gt;Editora: &lt;/span&gt;{{= Editora }}&lt;/p&gt;
    &lt;p&gt;&lt;span&gt;Numero De Paginas: &lt;/span&gt;{{= NumeroDePaginas }}&lt;/p&gt;
    &lt;span&gt;Descricao: &lt;/span&gt; {{html Descricao}}
    {{tmpl(ISBN) &quot;#LivrosISBN&quot;}}
  &lt;/div&gt;
&lt;/script&gt;
		
&lt;!-- Nova Template --&gt;
&lt;script id=&quot;LivrosISBN&quot; type=&quot;x-jquery-tmpl&quot;&gt;
  &lt;p&gt;&lt;span&gt;ISBN: &lt;/span&gt;{{= }}&lt;/p&gt;
&lt;/script&gt;
</pre>

<p><a href="http://exemplos.pttutoriais.com/jQueryTemplating/jQuery-Templating-Demo5.html" title="jQuery Templating Exemplo 5">Exemplo</a></p>

<p>O troque é chamar a nossa nova template através da template original, para isso usamos <span class="c_javascript">{{tmpl(ISBN) "#LivrosISBN"}}</span>.</p>
<p>Basicamente, estamos a dizer para passar a data ISBN e usar a nova template que chamamos <span class="c_html">LivrosISBN</span>.</p>

<p>Acabamos assim algumas das tags mais importantes neste plugin.</p>

<p>Mas o plugin ainda oferece algo mais.</p>

<h2>.tmplItem()</h2>

<p>Aqui esta um método que ajuda bastante quando queremos começar a fazer aplicações um pouco mais complicadas, e com efeitos mais engraçados.</p>

<p>Usando <span class="c_javascript">.tmplItem()</span>, dá acesso ao item de uma template já rendida no navegador.</p>

<p>A melhor forma para explicar é com um exemplo. Vamos supor que queremos mostrar apenas o nome do livro, mas quando o usuário clickar no nome do livro queremos mostrar o preço.</p>

<p>A nossa template fica assim:</p>

<pre class="brush: xml; title: ; notranslate">
&lt;script id=&quot;LivrosTemplate&quot; type=&quot;text/html&quot;&gt;
  &lt;div class=&quot;Livro&quot;&gt;
    &lt;p&gt;&lt;span&gt;Titulo: &lt;/span&gt;{{= Titulo }}&lt;/p&gt;
  &lt;/div&gt;
&lt;/script&gt;
</pre>

<p>Agora vamos criar um evento para quando o usuário clickar na caixa, usando o <span class="c_javascript">.tmplItem()</span> vamos buscar o preço e mostrar ao usuário.</p>

<pre class="brush: jscript; title: ; notranslate">
$(&quot;.Livro&quot;).click(function() {
  var livroEscolhido = $.tmplItem(this).data;
  alert(&quot;O livro escolhido: &quot; + livroEscolhido.Titulo + &quot; / Preco: &quot; + livroEscolhido.Preco);
});
</pre>

<p><a href="http://exemplos.pttutoriais.com/jQueryTemplating/jQuery-Templating-Demo6.html" title="jQuery Templating Exemplo 6">Exemplo</a></p>

<p>Mais simples seria impossível!</p>


<h2>Conclusão</h2>
<p>Gosto muito deste plugin, já que oferece uma forma fácil de interpretar HTML e substituir o conteúdo com data criado ou recebido em javascript.</p>
<p>Este tutorial é uma pequena introdução em como usar alguns dos métodos e tags do plugin, e espero ter mostrado o potencial deste plugin.</p>

<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/jQuery_Templating.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>



]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/465/jquery-templates/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pacote Calendário</title>
		<link>http://www.pttutoriais.com/485/pacote-calendario</link>
		<comments>http://www.pttutoriais.com/485/pacote-calendario#comments</comments>
		<pubDate>Sun, 28 Nov 2010 10:42:02 +0000</pubDate>
		<dc:creator>Eduardo Santos</dc:creator>
				<category><![CDATA[Freebies]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=485</guid>
		<description><![CDATA[<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de um calendário, criado exclusivamente para o PT Tutoriais.</p>]]></description>
			<content:encoded><![CDATA[<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de um calendário, criado exclusivamente para o PT Tutoriais.</p>
<img src="http://www.pttutoriais.com/wp-content/uploads/2010/11/pack3.png" alt="Calendário" title="Calendário" width="400" height="600" class="size-full wp-image-487" />
<div class="clear"></div>
<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/pack3.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/485/pacote-calendario/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Canvas aplicação de desenho – Parte 2</title>
		<link>http://www.pttutoriais.com/448/canvas-aplicacao-de-desenho-%e2%80%93-parte-2</link>
		<comments>http://www.pttutoriais.com/448/canvas-aplicacao-de-desenho-%e2%80%93-parte-2#comments</comments>
		<pubDate>Thu, 25 Nov 2010 22:00:24 +0000</pubDate>
		<dc:creator>Jota</dc:creator>
				<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=448</guid>
		<description><![CDATA[<p>Parte dois desta mini serie de tutoriais em como fazer uma aplicação de desenho usando o canvas e novas funções API do javascript.</p>]]></description>
			<content:encoded><![CDATA[<p>Depois de termos preparado grande parte do nosso script na <a href="http://www.pttutoriais.com/352/canvas-aplicacao-de-desenho-parte-1" title="Canvas Aplicação">primeira parte deste tutorial</a>, podemos agora começar a melhorar o nosso código com mais funções.</p>
<p>A primeira parte serviu para criarmos a base de como o sistema funcionava, agora vamos apenas adicionar novas funções e aumentar assim as opções para os nossos usuários.</p>
<p>Devido a ter explicado a maioria do sistema na primeira parte do tutorial, neste vamos ver mais código do que explicação.</p>

<h2>Novos formatos</h2>

<p>Como vimos na primeira parte, criamos um objecto <span class="c_nota">Formatos</span>, onde queremos oferecer ao usuário da nossa aplicação uma forma de ter possibilidade de escolher formatos pré-definidos para desenhar. Na primeira parte o único formato disponível é a linha livre, um formato que o usuário pode usar para desenhar à vontade sem nenhuma restrição.</p>

<p>Quando analisamos pela a primeira vez o elemento <a href="http://www.pttutoriais.com/185/html-5-canvas" title="HTML 5 Canvas">canvas</a> vimos como fazer um rectângulo, um círculo e uma linha. Agora vamos aplicar esse conhecimento nesta aplicação.</p>

<h2>Rectângulo</h2>

<pre class="brush: jscript; title: ; notranslate">
  // O visitante quer desenhar um rectângulo 
  Formatos.Rectangulo = function(evento) {
    var Formato = this;
    this.comecou = false;

    this.mousedown = function(evento) { // Posição do rato em que o evento começou
      Formato.comecou = true;
      Formato.x0 = evento._x;
      Formato.y0 = evento._y;
    };

    this.mousemove = function(evento) {
      if (!Formato.comecou) {
        return;
      }

      // Calcular matematicamente 
      var x = Math.min(evento._x, Formato.x0), // Posição X
      y = Math.min(evento._y, Formato.y0), // Posição Y
      w = Math.abs(evento._x - Formato.x0), // A largura do rectângulo
      h = Math.abs(evento._y - Formato.y0); // A altura do rectângulo

      NovoCanvasContexto.clearRect(0, 0, NovoCanvas.width, NovoCanvas.height); // Apagar qualquer desenho que tenhamos no canvas.

      if (!w || !h) {
        return;
      }

      NovoCanvasContexto.strokeStyle = &quot;#000000&quot;;
      NovoCanvasContexto.strokeRect(x, y, w, h); // posição X, posição Y, largura, altura
    };
    
    // Desenha o rectângulo no canvas original
    this.mouseup = function(evento) {

      if (Formato.comecou) {
        Formato.mousemove(evento);
        Formato.comecou = false;
        Desenhar();
      }
    };

  };
</pre>

<p>Como podemos ver usámos o mesmo esqueleto para criar um novo formato, mas usámos o <span class="c_javascript">strokeRect()</span> para criar um rectângulo.</p>

<p>A lógica funciona da mesma maneira, usamos três eventos, o primeiro <span class="c_javascript">mousedown</span> onde salvamos a posição do rato. O <span class="c_javascript">mousemove</span> onde calculamos o rectângulo e desenhamos no <span class="c_html">canvas</span> temporário.</p>
<p>E em último o <span class="c_javascript">mouseup</span> onde copiamos o <span class="c_html">canvas</span> temporário, para o <span class="c_html">canvas</span> inicial.</p>

<h2>Círculo</h2>
<p>Usando mais uma vez o nosso esqueleto vamos agora adicionar o círculo.</p>

<pre class="brush: jscript; title: ; notranslate">
//Um circulo
  Formatos.Circulo = function(evento) {
    var Formato = this;
    this.comecou = false;

    this.mousedown = function(evento) {
      Formato.comecou = true;
      Formato.x0 = evento._x;
      Formato.y0 = evento._y;
    };

    this.mousemove = function(evento) {
      if (!Formato.comecou) { return; }

      NovoCanvasContexto.beginPath();

      NovoCanvasContexto.clearRect(0, 0, NovoCanvas.width, NovoCanvas.height);
      var Radius = Math.abs(Formato.x0 - evento._x)

      // Coordenadas X, Coordenadas Y, Raio, Inicio do ângulo, Fim do ângulo , No sentido do relógio / Contra o sentido do relógio
      NovoCanvasContexto.arc(Formato.x0, Formato.y0, Radius, 0, Math.PI * 2, false)
      NovoCanvasContexto.strokeStyle = &quot;#000000&quot;;
      NovoCanvasContexto.stroke();
    };

    this.mouseup = function(evento) {
      Formato.mousemove(evento);
      Formato.comecou = false;
      Desenhar();
    };

  };
</pre>

<p>Para criarmos o círculo usamos o <span class="c_javascript">.arc()</span>, já explicado na nossa <a href="http://www.pttutoriais.com/185/html-5-canvas" title="Introdução ao canvas">introdução ao canvas</a>.</p>

<h2>Linha</h2>

<pre class="brush: jscript; title: ; notranslate">
// Uma linha
  Formatos.Linha = function(evento) {
    var Formato = this;
    this.comecou = false;

    this.mousedown = function(evento) {
      Formato.comecou = true;
      Formato.x0 = evento._x;
      Formato.y0 = evento._y;
    };
    this.mousemove = function(evento) {
      if (!Formato.comecou) { return; }

      NovoCanvasContexto.clearRect(0, 0, NovoCanvas.width, NovoCanvas.height);
      NovoCanvasContexto.beginPath();
      NovoCanvasContexto.moveTo(Formato.x0, Formato.y0);
      NovoCanvasContexto.lineTo(evento._x, evento._y);
      NovoCanvasContexto.strokeStyle = &quot;#000000&quot;;
      NovoCanvasContexto.stroke();
      NovoCanvasContexto.closePath();
    };
    this.mouseup = function(evento) {
      if (Formato.comecou) {
        Formato.mousemove(evento);
        Formato.comecou = false;
        Desenhar();
      }
    };
  };
</pre>

<p>E assim completamos os nossos formatos para a nossa aplicação, sendo assim o usuário tem agora as opções de:</p>
<ul>
<li>Rectângulo</li>
<li>Círculo</li>
<li>Linha</li>
<li>Linha Livre</li>
</ul>

<p>Mas ainda falta umas modificações. De momento temos o nosso script preparado, mas falta uma maneira de deixarmos o nosso usuário escolher estes formatos.</p>
<p>Para tal adicionamos quatro botões na nossa aplicação e um evento para cada botão.</p>
<p>Vamos começar pelo o HTML</p>

<pre class="brush: xml; highlight: [13,14,15,16]; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Aplicação canvas&lt;/title&gt;
    &lt;script src=&quot;jquery-1.4.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id=&quot;Container&quot;&gt;
      &lt;canvas id=&quot;Canvas&quot; width=&quot;450&quot; height=&quot;300&quot;&gt;
        &lt;p&gt;O teu navegador não suporta canvas&lt;/p&gt;
      &lt;/canvas&gt;
    &lt;/div&gt;
    &lt;a href=&quot;#&quot; id=&quot;forCirculo&quot;&gt;Circulo&lt;/a&gt;&lt;br/&gt;
    &lt;a href=&quot;#&quot; id=&quot;forRectangulo&quot;&gt; Rectângulo &lt;/a&gt;&lt;br/&gt;
    &lt;a href=&quot;#&quot; id=&quot;forLinha&quot;&gt;Linha&lt;/a&gt;&lt;br/&gt;
    &lt;a href=&quot;#&quot; id=&quot;forLapis&quot;&gt;Lapis&lt;/a&gt;&lt;br/&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>

<p>Como podemos ver adicionámos quatro novos links nos quais agora vamos adicionar eventos usando jQuery.</p>
<p>Assim quando um usuário clicar num link, activamos esse formato.</p>

<pre class="brush: jscript; title: ; notranslate">
// O usuário escolheu o circulo
$(&quot;#forCirculo&quot;).click(function() {
  if (Formatos[&quot;Circulo&quot;]) {
    Formato = new Formatos[&quot;Circulo&quot;]();
  }
});

// O usuário escolheu o rectângulo
$(&quot;#forRectangulo&quot;).click(function() {
  if (Formatos[&quot;Rectangulo&quot;]) {
    Formato = new Formatos[&quot;Rectangulo&quot;]();
  }
});

// O usuário escolheu a linha
$(&quot;#forLinha&quot;).click(function() {
  if (Formatos[&quot;Linha&quot;]) {
    Formato = new Formatos[&quot;Linha&quot;]();
  }
});

// O usuário escolheu a linha livre/lápis
$(&quot;#forLapis&quot;).click(function() {
  if (Formatos[&quot;LinhaLivre&quot;]) {
    Formato = new Formatos[&quot;LinhaLivre&quot;]();
  }
});
</pre>

<h2>Cores</h2>

<p>Para completarmos a nossa aplicação falta apenas a opção de cores e a opção de salvar o nosso desenho.</p>
<p>Vamos começar pelas as cores, neste momento quero só adicionar umas quantas cores, para ver como funciona.</p>
<p>Mais uma vez modificamos o HTML e adicionamos o seguinte:</p>

<pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;#&quot; id=&quot;corFFFFFF&quot;&gt;Branco&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;#&quot; id=&quot;cor000000&quot;&gt;Preto&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;#&quot; id=&quot;cor7c0608&quot;&gt;Vermelho&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;#&quot; id=&quot;corf3c421&quot;&gt;Amarelo&lt;/a&gt;&lt;br /&gt;
</pre>

<p>No nosso javascript, vamos adicionar uma nova variável, onde vamos guardar o valor da cor.</p>

<pre class="brush: jscript; highlight: [6]; title: ; notranslate">
$(document).ready(function() {
  var NovoCanvasContexto;
  var Canvas, CanvasContexto, NovoCanvas;
  var Formato;
  var FormatoOriginal = &quot;LinhaLivre&quot;;
  var Cor = &quot;#000000&quot;;
</pre>

<p>Usando eventos outra vez, adicionamos no nosso javascript.</p>

<pre class="brush: jscript; title: ; notranslate">
// Cores
$(&quot;#cor000000&quot;).click(function() {
  Cor = &quot;#000000&quot;;
});
$(&quot;#corFFFFFF&quot;).click(function() {
  Cor = &quot;#FFFFFF&quot;;
});
$(&quot;#cor7c0608&quot;).click(function() {
  Cor = &quot;#7c0608&quot;;
});
$(&quot;#corf3c421&quot;).click(function() {
  Cor = &quot;#f3c421&quot;;
});
</pre>

<p>Por fim temos que modificar o nosso objecto formatos e adicionar esta variável.</p>

<p>No linha livre:</p>

<pre class="brush: jscript; highlight: [3]; title: ; notranslate">
this.mousemove = function(evento) {
  if (Formato.comecou) {
    NovoCanvasContexto.strokeStyle = Cor; // Cor da linha
    NovoCanvasContexto.lineTo(evento._x, evento._y);
    NovoCanvasContexto.stroke();
  }
};
</pre>

<p>No rectângulo:</p>

<pre class="brush: jscript; highlight: [4]; title: ; notranslate">
  if (!w || !h) {
    return;
  }
  NovoCanvasContexto.strokeStyle = Cor; // Cor da linha
  NovoCanvasContexto.strokeRect(x, y, w, h);
</pre>

<p>No círculo:</p>

<pre class="brush: jscript; highlight: [2]; title: ; notranslate">
  NovoCanvasContexto.arc(Formato.x0, Formato.y0, Radius, 0, Math.PI * 2, false)
  NovoCanvasContexto.strokeStyle = Cor; // Cor da linha
  NovoCanvasContexto.stroke();
</pre>

<p>Por fim na linha:</p>

<pre class="brush: jscript; highlight: [2]; title: ; notranslate">
  NovoCanvasContexto.lineTo(evento._x, evento._y);
  NovoCanvasContexto.strokeStyle = Cor; // Cor da linha
  NovoCanvasContexto.stroke();
</pre>

<h2>Salvar imagem</h2>
<p>Por fim vamos adicionar a opção de salvar o desenho, começando pelo HTML onde vamos adicionar o link.</p>

<pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;#&quot; id=&quot;opcSalvar&quot;&gt;Salvar&lt;/a&gt;
</pre>

<p>No javascript apenas vamos adicionar o evento click, e usar o <span class="c_javascript">toDataURL()</span>, para transformar o nosso canvas numa imagem em .png.</p>

<pre class="brush: jscript; title: ; notranslate">
$(&quot;#opcSalvar&quot;).click(function() {
  var dataURL = Canvas.toDataURL(&quot;image/png&quot;);
  document.location.href = dataURL;
});
</pre>

<h2>Exemplo Final</h2>
<div class="exemplo" style="height:320px; display:block;">
<div id="Menu">
			<strong>Cores</strong><br />
			<a href="#undefined" id="corFFFFFF">Branco</a><br />
			<a href="#undefined" id="cor000000">Preto</a><br />
			<a href="#undefined" id="cor7c0608">Vermelho</a><br />
			<a href="#undefined" id="corf3c421">Amarelo</a><br />
			<strong>Formatos</strong><br />
			<a href="#undefined" id="forCirculo">Circulo</a><br />
			<a href="#undefined" id="forRectangulo">Rectângulo</a><br />
			<a href="#undefined" id="forLinha">Linha</a><br />
			<a href="#undefined" id="forLapis">Lapis</a><br />
			<strong>Opções</strong><br />
			<a href="#undefined" id="opcSalvar">Salvar</a>
		</div>
		<div id="Container">
			<canvas id="Canvas" width="450" height="300">
				<p>O teu navegador nao suporta canvas</p>
			</canvas>
		</div>
</div>

<h2>Conclusão</h2>

<p>E chegámos ao fim desta pequena serie de dois tutoriais sobre como criar uma aplicação de desenho usando o canvas.</p>
<p>No primeiro tutorial foi sugerido, nos comentários, novas funcionalidades que não estava a contar para esta série de tutoriais, tais como layers/camadas, filtros, e borracha.</p>
<p>Por isso, pode ser que daqui a uns dias apareça uma parte três desta série.</p>
<p>Espero que este tutorial tenha servido para aprenderem alguma das novas funcionalidades do HTML 5 e do novo API de javascript.</p>

<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/CanvasAplicacaoParte2.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>
]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/448/canvas-aplicacao-de-desenho-%e2%80%93-parte-2/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Pacote Planos de Preços</title>
		<link>http://www.pttutoriais.com/441/pacote-planos-de-precos</link>
		<comments>http://www.pttutoriais.com/441/pacote-planos-de-precos#comments</comments>
		<pubDate>Mon, 15 Nov 2010 09:14:22 +0000</pubDate>
		<dc:creator>Eduardo Santos</dc:creator>
				<category><![CDATA[Freebies]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=441</guid>
		<description><![CDATA[<p>Ficheiro photoshop de um design muito bem conseguido de planos de preços, em que podes usar nos teus projectos facilmente.</p>]]></description>
			<content:encoded><![CDATA[<p>PT Tutoriais oferece a todos os visitantes este pacote em photoshop de planos de preços, criado exclusivamente para o PT Tutoriais.</p>

<p>Podem usar e modificar a vontade para os vossos projectos.</p>

<img src="http://www.pttutoriais.com/wp-content/uploads/2010/11/pack2.png" alt="Pacote Planos de Preços" title="Pacote Planos de Preços" width="800" height="600" class="size-full wp-image-442" />

<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/pack2.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>

<p>As fontes usadas neste exemplo foram:</p>

<ul>
<li>Gotham Rounded</li>
<li>Helvetica Neue</li>
<li>Georgia</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/441/pacote-planos-de-precos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Efeito menu mais artigos a deslizar horizontal</title>
		<link>http://www.pttutoriais.com/396/efeito-menu-mais-artigos-a-deslizar-horizontal</link>
		<comments>http://www.pttutoriais.com/396/efeito-menu-mais-artigos-a-deslizar-horizontal#comments</comments>
		<pubDate>Thu, 11 Nov 2010 22:26:13 +0000</pubDate>
		<dc:creator>Jota</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.pttutoriais.com/?p=396</guid>
		<description><![CDATA[<p>Ando a procura de uma solução para mostrar aos nossos visitantes mais artigos relacionados com o artigo que estão a ler.</p>
<p>Com ajuda do jQuery aqui está uma solução.</p>]]></description>
			<content:encoded><![CDATA[<p>A verdade seja dita, por vezes não faço ideia que nome dar aos meus tutoriais.</p>

<p>Como podem ver o PT Tutoriais foi criado com um design bastante simples, há quem diga simples demais.</p>

<p>E agora com o crescimento do número de tutoriais quero introduzir uma forma de mostrar artigos relacionados com o artigo que estás correntemente a ler.</p>

<p>Até aqui nada de novo, mas com um design tão simples como é que vou introduzir esta funcionalidade?</p>

<p>Existe várias soluções, visitei uns quantos sites para ter uma ideia como outros sites o estão a fazer.</p>

<p>Ainda não decidi de que forma fazer aqui no PT Tutoriais, mas uma das soluções que gostei, vi no <a href="http://www.publico.pt" title="Público">Público</a>.</p>

<p>A ideia é simples, o usuário quando faz scroll para baixo quando chega quase ao fim do artigo e uma caixa aparece a deslizar do lado esquerdo com novos artigos.</p>

<img src="http://www.pttutoriais.com/wp-content/uploads/2010/11/exemplo.jpg" alt="Exemplo" title="Exemplo" width="200" height="400" class="size-full wp-image-400" />

<p>Como podemos ver, temos o conteúdo e quando o usuário chegar à linha encarnada queremos que uma caixa deslize da esquerda para a direita com os artigos relacionados.</p>

<p>Queremos também que quando o usuário faz o scroll para cima a caixa desapareça da direita para a esquerda.</p>

<p>Gosto do factor de não ocupar espaço no site, e só aparecer quando chegas a uma parte do site.</p>

<p>De seguida claro, como fazer?</p>

<h2>HTML</h2>

<p>Como sempre começar com o HTML.</p>

<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;Artigo&quot;&gt;
  Texto do artigo
&lt;/div&gt;

&lt;div id=&quot;ComecarAqui&quot;&gt;&amp;nbsp;&lt;/div&gt;
		
&lt;div id=&quot;Comentarios&quot;&gt;
  Comentarios		
&lt;/div&gt;

&lt;div id=&quot;MaisArtigos&quot;&gt;
  &lt;h2&gt;Mais artigos&lt;/h2&gt;
  &lt;p&gt;Notamos que acabaste de ler este artigo. Se gostaste deste artigo ve estes:&lt;/p&gt;
  &lt;p&gt;Outro artigo&lt;/p&gt;
  &lt;p&gt;Outro artigo&lt;/p&gt;
&lt;/div&gt;

</pre>

<p>Os pontos mais importantes no nosso HTML são o <span class="c_html">div</span> <span class="c_nota">ComecarAqui</span> e o <span class="c_nota">MaisArtigos</span>.</p>

<p>O <span class="c_html">div</span> <span class="c_nota">ComecarAqui</span> vai servir como guia, assim que a barra de scroll do navegador chegar a este <span class="c_html">div</span> queremos que o <span class="c_html">div</span> <span class="c_nota">MaisArtigos</span> apareça da direita a deslizar para a esquerda.</p>

<p>Os outros dois <span class="c_html">div</span> são apenas para fingir conteúdo neste momento. Cada site tem a sua estrutura por isso o ponto que tens que tirar daqui e que precisas de adicionar um <span class="c_html">div</span> para servir de guia e outro que vai ser a caixa com a informação que queres mostrar.</p>

<h2>Vamos ao CSS</h2>

<pre class="brush: css; title: ; notranslate">
#Artigo, #Comentarios { 
  width: 500px; 
  height:2000px; 
  display:block; 
  margin: 0 auto; 
  border:1px solid #000;
}
			
#ComecarAqui {
  width: 500px; 
  height:1px; 
  display:block; 
  margin: 0 auto; 
  border:1px solid #000;
}
						
#MaisArtigos {
  width:400px; /* Queremos que a nossa caixa tenha 400px de largura */
  height:250px; /* Queremos que a nossa caixa tenha 250px de altura */
  position:fixed; /* Queremos que a sua posicao seja fixa */
  left:-400px; /* -400px isto obriga a caixa estar escondida quando comeca */
  bottom:10px; /* 10px a partir do fim da janela do navegador */
  border:1px solid #999; 
}
</pre>

<p>A parte mais importante do CSS é o <span class="c_css">#MaisArtigos</span>, os outros são apenas para encher a minha página de exemplo.</p>

<p>Começo por definir a largura da minha caixa de mais artigos, <span class="c_css">width: 400px;</span>, de seguida defino a altura usando <span class="c_css">height:250px;</span> é um ponto importante porque vamos usar este valor no nosso javascript.</p>

<p>A posição vai ser fixa, <span class="c_css">position:fixed;</span> isto obriga ao elemento a ficar sempre na mesma posição mesmo quando o usuário usa a barra de scroll.</p>

<p>Por fim o <span class="c_css">left:-400px;</span> obriga ao nosso elemento estar escondido quando a página arranca pela primeira vez.</p>

<p>Podem ver o <a href="http://exemplos.pttutoriais.com/ScrollExemplo1/scroll.html" title="Scroll exemplo 1">exemplo do que temos até agora</a>.</p>

<p>Nada de especial, podemos verificar que apenas temos uma página longa, mas podemos notar também que a nossa caixa de <span class="c_css">#MaisArtigos</span> não aparece, isto porque escondemos lo lado esquerdo.</p>

<p>Para aparecer precisamos de um pouco de magia com javascript e ajuda do jQuery.</p>

<h2>Javascript</h2>

<pre class="brush: jscript; title: ; notranslate">

$(document).ready(function() { // Evento pagina carregada
  var Visivel = false; // A nossa caixa de mais artigos encontra-se visível?
  var AlturaDaCaixa = 250; // A altura da nossa caixa de mais artigos, 250px como especificamos no CSS
  // Posição do nosso elemento onde queremos começar a mostrar a caixa de mais artigos
  var PosicaoDoElementoReferencia = Math.abs($(&quot;#ComecarAqui&quot;).position().top);

  $(window).scroll(function() {
    
    var AlturaDaJanela = Math.abs($(window).height()); // Altura do nosso navegador
    var PosicaoDoScroll = Math.abs($(this).scrollTop()); // Posição da scrollbar
   
    // Calcular o valor real onde queremos começar a mostrar a nossa caixa de mais artigos
    var MostrarCaixa = PosicaoDoElementoReferencia - AlturaDaJanela + AlturaDaCaixa;

    // Se a posição da nosso barra de scroll for maior que a posição onde queremos começar mostrar a caixa, então começa a nossa animação de mostrar
    if (PosicaoDoScroll &gt; MostrarCaixa) {

      if (Visivel == false) { // A nossa caixa já esta visível?
        $(&quot;#MaisArtigos&quot;).stop(true, true).animate({ &quot;left&quot;: &quot;15px&quot; }, &quot;slow&quot;); // Se não esta visível então começa a animação 
      }
      
      Visivel = true; // Mudar a nossa variável visível para verdadeiro

    } else { // 

      if (Visivel == true) { // A caixa esta visível?
        $(&quot;#MaisArtigos&quot;).stop(true, true).animate({ &quot;left&quot;: &quot;-400px&quot; }, &quot;slow&quot;); // Se estiver então e porque o usuário esta a fazer scroll para cima, esconder a caixa
      }
    
      Visivel = false; // A caixa não esta visível mudar a variável para falso

    }

  });

});

</pre>

<p>Começo por definir três variáveis importantes, a primeira <span class="c_nota">Visivel</span> vai servir para manter o estado da nossa caixa, se está visível ou não.</p>

<p>A razão pela qual uso esta variável é para não causar a animação da caixa a surgir e desaparecer cada vez que o usuário faz o scroll da página nem que seja apenas um scroll de 1 pixel de distância.</p>

<p>A segunda variável <span class="c_nota">AlturaDaCaixa</span> é o tamanho do nosso <span class="c_html">div</span>, <span class="c_css">MaisArtigos</span> que definimos no nosso CSS.</p>

<p>Por fim <span class="c_nota">PosicaoDoElementoReferencia</span> é a posição onde se encontra o nosso elemento de referencia onde queremos começar a mostrar a nossa caixa.</p>

<p>Vamos ao resto <span class="c_javascript">$(window).scroll(function()</span> é o evento que queremos capturar, assim cada vez que o usuário fazer scroll esta função lida com esse factor.</p>

<p>Começamos por calcular o ponto exacto em que queremos começar a mostrar a nossa caixa.</p>

<p>Para tal usamos a seguinte fórmula:</p>

<p>A posição em que o nosso elemento de referencia o <span class="c_html">ComecarAqui</span> se encontra menos a altura da janela do navegador do nosso usuário mais a altura da nossa caixa de mais artigos.</p>

<p>De seguida é fácil, se a posição do nosso scroll for maior que a posição em que queremos começar a mostrar a caixa e a caixa não estiver visível então começamos a animação e movemos a caixa de -400px para 15px, o inverso acontece se, a posição do nosso scroll for menor que a posição em que queremos começar a mostrar a caixa e a caixa encontra-se visível, então começamos a animação de mover a caixa de 15px para -400px escondendo assim a caixa do nosso usuário.</p>

<p>Podemos ver aqui o <a href="http://exemplos.pttutoriais.com/ScrollExemplo2/scroll.html" title="Exemplo 2">exemplo</a>.</p>

<h2>Por fim</h2>

<p>Falta apenas um pormenor para a funcionalidade estar concluída, falta termos um botão de fechar a caixa no caso do usuário não querer ver a caixa.</p>

<p>Para tal, vamos criar um botão "Fechar Caixa" no nosso HTML, criamos também uma variável nova no nosso javascript.</p>

<p>Se o usuário carregar no botão mudamos o valor da variável para verdadeiro, e impedimos assim a caixa de se mostrar.</p>

<p>Usando o evento click, fica fácil de apanharmos o clique do nosso usuário.</p>

<p>Uma pequena modificação no nosso HTML</p>

<pre class="brush: xml; highlight: [6]; title: ; notranslate">
&lt;div id=&quot;MaisArtigos&quot;&gt;
  &lt;h2&gt;Mais artigos&lt;/h2&gt;
  &lt;p&gt;Notamos que acabaste de ler este artigo. Se gostaste deste artigo ve estes:&lt;/p&gt;
  &lt;p&gt;Outro artigo&lt;/p&gt;
  &lt;p&gt;Outro artigo&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;#&quot; title=&quot;Fechar&quot; id=&quot;FecharMaisArtigos&quot;&gt;Fechar&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</pre>

<p>E por fim o javascript</p>

<pre class="brush: jscript; highlight: [6,10,36,37,38,39,40,41,42]; title: ; notranslate">
$(document).ready(function() { // Evento pagina carregada
  var Visivel = false; 
  var AlturaDaCaixa = 250; 
  var PosicaoDoElementoReferencia = Math.abs($(&quot;#ComecarAqui&quot;).position().top);

  var UsuarioFechar = false; // Nova variável para controlar se o usuário fechou a caixa ou não

  $(window).scroll(function() {
   
   if (UsuarioFechar == false) {

      var AlturaDaJanela = Math.abs($(window).height()); 
      var PosicaoDoScroll = Math.abs($(this).scrollTop()); 
      var MostrarCaixa = PosicaoDoElementoReferencia - AlturaDaJanela + AlturaDaCaixa;

      if (PosicaoDoScroll &gt; MostrarCaixa) {

        if (Visivel == false) { 
          $(&quot;#MaisArtigos&quot;).stop(true, true).animate({ &quot;left&quot;: &quot;15px&quot; }, &quot;slow&quot;); 
        }
      
        Visivel = true;

      } else {

        if (Visivel == true) { 
          $(&quot;#MaisArtigos&quot;).stop(true, true).animate({ &quot;left&quot;: &quot;-400px&quot; }, &quot;slow&quot;); 
        }
    
        Visivel = false;

      }
    }
  });

  $(&quot;#FecharMaisArtigos&quot;).click(function(evento) { // Evento o usuário clicou em fechar
    UsuarioFechar = true;
    if (Visivel == true) { // Se a caixa estiver visível quando o usuário carregar em fechar, fazer animação de esconder
      $(&quot;#MaisArtigos&quot;).stop(true, true).animate({ &quot;left&quot;: &quot;-400px&quot; }, &quot;slow&quot;);
    }
    evento.preventDefault(); // Preveni a acção padrão do evento, neste caso tentar linkar para outra pagina
  });

});
</pre>

Podem ver agora o <a href="http://exemplos.pttutoriais.com/ScrollExemplo3/scroll.html" title="Resultado final">resultado final</a>.

<h2>Conclusão</h2>

<p>Como podemos ver um script interessante para mostrarmos certas mensagens quando o usuário atinge certas zonas da nossa página.</p>

<p>Neste tutorial, usei para mostrar artigos relacionados com o artigo que o usuário se encontra a ler, mas nada impede de mostrar, ou activar seja o que for quando o usuário atinge um sítio da tua página que tu especificas.</p>

<p>Claro a caixa não tem beleza nenhuma, mas isso e algo que poderás modificar apenas com CSS.</p>

<a title="Download" href="http://www.pttutoriais.com/index.php?sdmon=DownloadsTut/Scroll.zip" target="_blank">
<img src="http://www.pttutoriais.com/wp-content/themes/PTT1/images/download.jpg" alt="Download Exemplo" width="277" height="81" />
</a>
]]></content:encoded>
			<wfw:commentRss>http://www.pttutoriais.com/396/efeito-menu-mais-artigos-a-deslizar-horizontal/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
