Introdução ao JavaScript
Parte 4




Agora eu quero lhe mostrar como escrever um texto na barra de status (a barra que fica na parte de baixo do seu browser, onde são mostradas as URLs) e lhe explicar também como funciona uma barra de rolamento - se bem que elas já são odiadas no cenário do JavaScript (eu lhe direi o porquê depois).
Em primeiro lugar, como se 'direciona' a barra de status? Esse script vai lhe mostrar como se pode escrever um texto simples na barra de status:

Isso não é legal? Aqui está o script:


<html>
<head>
<script language="JavaScript">
<!-- Hide
function statbar(txt) {
   window.status = txt;
}
// -->
</script>
</head>
<body>
<form>
<input type="button" name="look" value="Write!" onclick="statbar('Oi! Essa &eacute; a barra de status!');">
<input type="button" name="erase" value="Erase!" onclick="statbar('');">
</form>
</body>
</html>

Nós criamos dois botões que convocam a função statbar(txt). O txt entre parênteses demonstra que a função adquire uma variável que é colocada na chamada da função. (Eu a chamei de txt, mas poderia ser outra coisa qualquer.) Quando você olha para o tag <form> onde os botões foram criados, pode ver que ali é convocada a função statbar(txt). Mas a gente não escreve txt lá. Nós simplesmente colocamos o texto que queremos que o browser mostre na barra de status. Você pode ver isto desse modo: a função é convocada e define a variável txt - ela assume o 'valor' que você colocou na chamada da função. Desse modo, quando se pressiona o botão 'Escreva!', a função statbar(txt) é convocada e txt armazena a seqüência 'Oi! Essa é a barra de status'. Você pode então usar a variável txt como de costume. Este método de colocar variáveis numa função as torna instrumentos muito flexíveis. Veja o segundo botão, ele convoca a mesma função. Sem a colocação de uma variável nós precisaríamos de duas funções diferentes.
Pois bem, o que é que a função statbar(txt) realiza? Isto é muito simples. Você apenas escreve o conteúdo de txt na variável window.status. Isto é feito através de window.status = txt;. Ao se escrever uma seqüência vazia na barra de status ('') nós simplesmente a apagamos. Observe que nós tivemos que usar estas aspas simples ' porque já usamos as aspas duplas " para definir onClick. O browser precisa saber quais são as aspas que formam par - por isso é necessário alternar aspas simples e duplas. Acho que isso é bastante claro.

Você já conhece a propriedade onMouseOver da parte 2 do meu tutorial:
<a href="stupid.htm" onMouseOver="window.status='Apenas outro link estupido...'; return true">
Você não tem raiva quando vê que a barra de status não se apaga quando a seta do mouse não está mais apontando para o link? Eu tenho uma solução simples para isso. Basta escrever uma pequena função que usa a mesma técnica de apagar a barra de status que foi mostrada acima. Mas como poderíamos convocar a função apagadora? Nós não temos um método ou propriedade que possamos usar para detectar se a seta do mouse está indo embora do link. A solução é colocar um cronômetro.

Tente o seguinte script: aqui. Só posicione o seu mouse sobre ele - não clique!

Isso não é jóia? Dá uma olhadinha no código e você vai ver que é muito mais fácil do que parece à primeira vista.


<html>
<head>
<script language="JavaScript">
<!-- Hide
function moveover(txt) {
   window.status = txt;
   setTimeout("erase()",1000);
}
function erase() {
   window.status="";
}
// -->
</script>
</head>
<body>
<a href="dontclck.htm" onMouseOver="moveover('Desaparecendo!');return true;">
link</a>
</body>
</html>

Você vai reconhecer muitas partes desse script. A função moveover(txt) é só a função statbar(txt) depois de algum trabalho de copiar/colar sobre ela! É quase que a mesma coisa também com a função erase(). Na página HTML nós criamos um link com a conhecida propriedade onMouseOver. A nossa função moveover(txt) é então convocada com a seqüência 'Desaparecendo' sendo colocada na variável txt. O window.status pega o conteúdo de txt. É a mesma coisa que já aconteceu na função statbar(txt). A função setTimeout(...) entretanto é nova. Esta função cria um intervalo. Quem iria esperar uma coisa dessas? A função setTimeout(...) define quanto tempo deve-se decorrer e o que acontecerá quando este tempo se terminar. No nosso exemplo a função erase() é convocada após 1000 milisegundos (isto é equivalente a 1 segundo - para todos os craques de matemática que estão por aí). Este é um aspecto fantástico! A função moveover(txt) acaaba depois que se coloca um cronômetro. O browser chama a função erase() automaticamente depois de 1 segundo. (Você já está imaginando uma página que diga ao usuário: Se você não fizer tal coisa o seu HD será destruído em 10 segundos! ???)
Depois que o intervalo é definido o cronômetro nunca mais se reinicia. Mas você pode convocá-lo novamente, se quiser, na função erase(). Isto nos leva diretamente às barras de rolamento amadas por todos.


Como você já sabe como escrever na barra de status e como trabalha a função setTimeout, as barras de rolamento serão fáceis de se entender.

Pressione este botão para ver a minha barra de rolamento. O script tem que ser carregado a partir do servidor, por isso lhe peço um pouco de paciência se você não vir o texto rolante imediatamente.

Dê uma olhadinha no script:


<html>
<head>
<script language="JavaScript">
<!-- Hide

var scrtxt="Aqui vai a mensagem para os visitantes da sua pagina que "+
"ficarao olhando por horas de pura fascinacao...";
var lentxt=scrtxt.length;
var width=100;
var pos=1-width;

function scroll() {
  pos++;
  var scroller="";
  if (pos==lentxt) {
    pos=1-width;
  }
  if (pos<0) {
    for (var i=1; i<=Math.abs(pos); i++) { scroller="scroller+"" ";} scroller="scroller+scrtxt.substring(0,width-i+1);" } else { scroller="scroller+scrtxt.substring(pos,width+pos);" } window.status="scroller;" setTimeout("scroll()",150); } //-->
</script>
</head>
<body onLoad="scroll();return true;">
Aqui est&aacute; a sua p&aacute;gina bacana!
</body>
</html>

Este script usa as mesmas funções (ou partes delas) que já usamos acima. O setTimeout(...) 'avisa' ao cronômetro para convocar a função scroll() no tempo marcado. O rolamento irá funcionar no passo seguinte. No começo tem um monte de cálculos, mas isso não é importante para se entender como funciona o script. Os cálculos estão ali para indicar a posição em que o texto rolante deve começar. Se isso for logo no começo, o script tem que adicionar alguns espaços para situar o texto corretamente.

Eu disse no início desta parte da minha introdução que os textos rolantes não são muito populares, ou que se eles ainda são populares não ficarão assim por muito tempo. Existem razões para isso. Eu posso listar várias aqui, mas certamente haverá muito mais.
Se você vê esse efeito pela primeira vez ele pode parecer muito legal, mas se você o vir 1 milhão de vezes por aí não vai mais parecer muito divertido. Bem, este não é um bom argumento na verdade porque afeta quase todos os truques que você pode usar em suas páginas.
Mas há problemas mais graves. O que eu não gosto é que ele muda a velocidade quando se movimenta o mouse (ele fica mais rápido!). Pelo menos isso acontece comigo. Esse efeito fica ainda mais forte quando se tenta fazer o texto rolante rodar um pouco mais rápido ao se modificar o valor do setTimeout. Talvez haja algum contorno para esse problema. Mas o pior é que se você deixa este script rodar algum tempo pode acabar recebendo uma mensagem de "Out of memory error" ("erro por falta de memória"). E isso é realmente muito ruim. Parece ser um problema típico do Netscape Navigator 2.0. Talvez uma versão maior tenha já resolvido esse problema.

Existem muitas outras rotinas na Net. Eu já vi alguns textos rolantes escritos em frames. Programar isto não deve ser muito difícil.

Index - Parte 1 - Parte 3 - Parte 5 - Parte 6 - Parte 7