GustavoPaes.Net

Muita coisa sobre CSS, HTML, Javascript, Search engine optimization (seo), padrões e web

Archive for July, 2007

setTimeout e setInterval

Provavelmente você já precisou executar uma função mais de uma vez, durante um período de tempo ou esperar algum tempo para executá-la pelo menos uma vez.

Se você chegou a pesquisar, provavelmente leu algo sobre setTimeout() e setInterval(). Ambas são funções Javascript que controlam quando uma função deve ser chamada.

setTimeout([função], [tempo de espera, em milisegundos])

O setTimeout() executa a função passada por ele, após o tempo determinado, apenas uma vez. Exemplo:

setTimeout("alert('Olá, apareci depois de 3 segundos.')", 3000);

O código acima faz com que o alert seja executado apenas 3 segundo após a chamada.

setInterval([função], [tempo de repetição, em milisegundos]);

Diferentemente da setTimeout(), a função setInterval() executa repetidamente a função passada por ela, em intervalos de tempo iguais.

setInterval("alert('Olá, irei aparecer a cada 5 segundos.')", 5000);

O resultado será um alert a cada 5 segundos. Porém, em certos casos, isso pode ser um inconveniente. Por isso há o clearInterval(), que finaliza o intervalo entre as chamadas.

var num = 0;
objInter = setInterval(function() {
    if(num > 5)
    {
        clearInterval(objInter);
        return;
    }
    alert("Irei aparecer 5x apenas.");
    num++;
}, 5000);

Repare que o clearInterval() recebe como parâmetro o objeto do setInterval(), por isso é preciso guardar, em uma variável, esse objeto (no caso, a variável é objInter).

Obs.: Muita gente acha que o setTimeout() e o setInterval() interrompem a execução do código, como uma chamada de função, por exemplo. Isso não é verdade. As funções que serão executadas pelo setTimeout() e setInterval() são executadas por traz do código principal. Ou seja, não causam uma pausa.

Leitura recomendada:
Mozilla Developer Center: DOM:window.setTimeout
Mozilla Developer Center: DOM:window.setInterval
Mozilla Developer Center: DOM:window.clearInterval

  • 0 Comments
  • Filed under: Javascript
  • Deixando seu site mais rápido

    O Yahoo! desenvolveu uma extensão para o Firebug, plugin para o Firefox, que analisa a velocidade e peso do seu site e dá dicas de onde você pode melhorar para deixá-lo mais rápido.

    Plugin: YSlow para Firebug.

    No mundo da imaginação

    Quando a Appel lançou o iPhone, ela afirmou que apenas programas da própria Apple é que poderiam ser instalados/executados no iPhone.

    Será que ela estava mesmo levando isso a sério? Em que mundo a Apple vive, para achar que nenhum hacker iria quebrar o esquema de proteção e instalar os softwares que ele bem entender?

    Não demorou muito para que fizessem isso. Saiu no Linha Defensiva, que já rodaram Apache, vim e Python no iPhone. E que rodem mais!

  • 0 Comments
  • Filed under: Geral
  • Um problema comum no Internet Explorer 6 é ele criar espaçamento que não existe entre um item e outro de uma lista. É comum ocorrer também em uma imagem, mas a solução essa é simples, como veremos adiante.

    Espaço entre uma imagem e um bloco

    Se você colocar uma tag img e logo abaixo um bloco p com alguma cor de fundo, perceberá uma linha em branco, separando a imagem do bloco - imagem 1.

    Solução

    A solução para o problema acima é simples. Ou você coloca um bloco - um div, por exemplo - em volta da tag img ou coloca a própria tag img como bloco, pelo CSS:

    div.bloco img { display: block; }

    Com isso, o espaço existente anteriormente passa a não existir mais - imagem 2. Isso só ocorre no IE6 ou anteriores. Na versão 7 o problema foi corrigido.

    Problema de espaçamento entre imagem e bloco Problema de espaçamento entre imagem e bloco
    Imagem sem o display: block Imagem com o display: block

    Espaço entre itens de uma lista

    As listas também costumam apresentar espaçamento entres seus itens. A solução é um parecida com a do espaçamento nas imagens.

    Tem gente que coloca todos os itens da lista em uma única linha. Dessa forma o espaçamento não aparece, mas dependendo da quantidade de itens, essa saída pode-se mostrar um pouco confusa em uma futura manutenção do site.

    O caso

    Vamos primeiro ao código que mostra o espaçamento entre os itens da lista, no IE6.

    Nosso CSS está simples. Setamos apenas um background na tag a e, quando o mouse passar por cima, mudamos a cor para verde.

    ul { padding: 0; margin: 0; width: 250px; }
    ul li { padding: 0; margin: 0; list-style-type: none; }
    ul li a { display: block; background-color: black; color: white; padding: 10px; }
    ul li a:hover { background-color: green; color: black; }

    O código HTML também ficou simples. Uma lista com links - parecendo um menu.

    <ul>
      <li><a href="#1">Item 1</a></li>
      <li><a href="#1">Item 2</a></li>
      <li><a href="#1">Item 3</a></li>
      <li><a href="#1">Item 4</a></li>
    </ul>
    

    O resultado

    Com o código acima obtemos um bom resultado - imagem 1 - no Firefox e IE7. Mas um espaçamento entre os itens - imagem 2 - aparece no IE6:

    Problema de espaçamento entre imagem e bloco Problema de espaçamento entre imagem e bloco
    Resultado no Firefox e Internet Explorer 7 Resultado no Internet Explorer 6

    Solução 1: div entre o a

    A solução para o problema acima é colocar um bloco dentro do li e trabalhar sempre com esse bloco. Ou seja, colocando um div entre as tags li o espaçamento irá sair.

    Dessa forma, nosso código HTML fica da seguinte forma:

    <ul>
      <li><div><a href="#1">Item 1</a></div></li>
      <li><div><a href="#1">Item 2</a></div></li>
      <li><div><a href="#1">Item 3</a></div></li>
      <li><div><a href="#1">Item 4</a></div></li>
    </ul>

    O CSS não precisa ser alterado nesse caso, mas se precisasse seria apenas mudança de cor, borda, espaçamento, ou qualquer atributo de aparência. Mas nada para corrigir o problema, que é solucionado apenas com o div por lá.

    Solução 2: setar altura 100%
    (adicionado em 26/07/2007 as 09h54)

    Como sugerido pelo Renan Bernordi nos comentários, colocando uma altura 100% no elemento a, o espaçamento também irá sumir. Dessa forma, o div entre o a não será necessário e o CSS ficaria da seguinte forma:

    ul { padding: 0; margin: 0; width: 250px; }
    ul li { padding: 0; margin: 0; list-style-type: none; }
    ul li a { display: block; background-color: black; color: white; padding: 10px; _height: 100%; }
    ul li a:hover { background-color: green; color: black; }

    Conclusão

    Use Firefox!
    No Maujor tem um texto que explica porque o problema acontece. É por causa de um tal hasLayout que só atrapalha em vez de ajudar. Viva o IE!

  • 6 Comments
  • Filed under: CSS
  • Sucks ou Rocks

    O que você acha sucks (em bom português, o que não presta)? Ou o que você acha rocks (também em bom português, algo que lhe agradou)?

    O site sucks/rocks permite que você veja quem está levando a melhor, definitivamente, na boca do povo.

    No caso dos browsers, o Opera é bem mais falado que o Internet Explorer. Já nas linguagens de programação, quem leva a melhor é o Ruby.

    E no sistema operacional, quem leva a melhor? Windows? Linux? Não, o mais bem falado é o FreeBSD.

    O calculo do mais badalado e o do mais odiado é feito de forma simples: análise dos resultados de uma busca pelo Yahoo! Ao encontrar algo do tipo “X sucks, X is lame, X is crap, I hate X”, um ponto negativo é dado ao termo.

    Caso seja encontrado algo como “X rocks, X is sweet, X is awesome, I love X”, um ponto positivo é somado - deu pra perceber que o resultado leva em conta apenas os comentários em inglês.

    Os dois resultados são divididos. Quanto mais próximo do 10, mais bem falado.

    Outras pesquisas interessantes

    Você concorda com os resultados?

  • 0 Comments
  • Filed under: Geral