por Jonas Galvez
O Flash
MX trouxe duas novas funções muito interessantes, setInterval
e clearInterval, que já são presentes no JavaScript e
não deverão surpreender muito aqueles que já conhecem
a linguagem. A função setInterval permite executar uma
função periodicamente dentro de um intervalo de tempo
definido. Esta função retorna uma identificação,
que posteriormente pode ser utilizada para cancelar a execução
através da função clearInterval. Segue abaixo as
opções de sintaxe destes métodos.
setInterval(funcao,
milissegundos);
setInterval(objeto, "metodo", milissegundos);
var id = setInterval(funcao, milissegundos);
var id = setInterval(objeto, "metodo", milissegundos);
clearInterval(id); |
A função setInterval pode ser chamada de duas
maneiras. A primeira forma consiste em dois parâmetros, o nome
da função que será executada e o intervalo de tempo
em milissegundos. A segunda forma permite executar não uma simples
função mas sim um método de um objeto. Para isso,
é preciso passar três parâmetros para a função,
sendo que o primeiro é o nome do objeto onde o método
reside, o segundo é o nome do método entre aspas (o nome
do método deve ser passado como uma string) e o terceiro é
intervalo de tempo em milissegundos. Para sua melhor compreensão,
veja o exemplo abaixo e tente entender e testar seu funcionamento.
function
minuto() { trace("Um minuto se passou!"); };
setInterval(minuto, 60000); |
O exemplo de script acima é bastante óbvio:
definimos uma função que será executada a cada
60 segundos. Este ainda é um uso bastante simples da função
setInterval. Durante minhas pesquisas com o Flash MX, encontrei um problema
que muitos já devem ter percebido. Não é possível
utilizar o evento onEnterFrame de movieclips em outros objetos (em outras
palavras, a classe MovieClip não tem os método addListener
e removeListener). Para contornar este problema, resolvi utilizar a
função setInterval com um intervalo de tempo bastante
próximo ao do frame rate do filme, para que o resultado fosse
o mesmo. O script ao qual me refiro é o de métodos adicionais
para a classe TextField que permitem fazer a rolagem contínua
de texto. Considero estes métodos apenas um experimento, considerando
que seu uso não é mais necessário já que
o Flash MX inclui um componente especial para rolagem de texto.
TextField.prototype.startScrollUp
= function() {
this._scrollUp = function() { this.scroll--; };
this.upInterval = setInterval(this, "_scrollUp", 100);
};
TextField.prototype.startScrollDown = function() {
this._scrollDown = function() { this.scroll++; };
this.downInterval = setInterval(this, "_scrollDown", 100);
};
TextField.prototype.stopScroll = function() {
clearInterval(this.upInterval);
clearInterval(this.downInterval);
}; |
O exemplo acima já pode ser considerado bem
mais avançado, mas se você analisar bem, verá que
não é tão complicado assim. O método startScrollUp
define um método interno chamado _scrollUp, que simplesmente
decrementa o valor da propriedade scroll do campo de texto. Depois,
a função setInterval é utilizada para determinar
que o método _scrollUp deverá ser executado a cada 100
milissegundos, e um identificador (upInterval) é definido para
esta chamada da função setInterval. O mesmo processo é
utilizado no método startScrollDown, só que ao invés
de ser decrementada, a propriedade scroll do campo de texto é
incrementada. No método stopScroll, a execução
dos métodos internos _scrollDown e _scrollUp é cancelada
através da função clearInterval.
Agora
você já viu a utilidade destas funções em
métodos internos, a partir de um exemplo bastante simples. Agora
irei comentar mais um exemplo de uso destas funções, que
pode ser bastante útil. Umas das perguntas mais comuns nas listas
e nos fóruns é sobre como fazer que o filme pare por um
determinado número de segundos depois continue a reproduzir.
Pensando nisso, resolvi criar uma classe chamada Countdown, que executa
um método após uma contagem regressiva com os segundos
definidos. Veja abaixo o código da classe.
_global.Countdown
= function(segundos) {
this._handler = function() {
this.onFinishCountdown();
clearInterval(this._id);
};
this._id = setInterval(this, "_handler", segundos*1000);
}; |
Neste
script, utilizo a palavra-chave _global antes do nome da classe para
torná-la acessível globalmente, ou seja, uma instância
desta classe poderá ser criada em qualquer lugar do filme, assim
como todas as outras classes do Flash MX. O uso do setInterval é
intrigante, pois o método _handler só deverá ser
chamado uma única vez, após que contagem regressiva termine.
Para isso, já chamo o método clearInterval dentro da própria
função, o que anula a execução. Segue abaixo
um exemplo de uso da classe Countdown.
//
contagem regressiva de dez segundos
var contagem = new Countdown(10);
// event handler que será executado quando
// a contagem terminar
contagem.onFinishCountdown = function() {
// código que deverá ser executado
}; |
Para finalizar este artigo, irei passar um recurso
da função setInterval que ainda não comentei. É
possível passar parâmetros para a função
(ou método) que será executada, definindo-os como parâmetros
adicionais na própria chamada da função setInterval.
Para que fique mais claro, analise o exemplo abaixo.
function
minuto(nome) {
trace(nome + ", um minuto se passou!");
};
setInterval(minuto, 60000, "Jonas"); |
O
terceiro parâmetro definido na função setInterval
será passado para a função que será executada.
Na verdade, será difícil encontrar uma oportunidade de
usar este recurso, mas em alguns casos pode ser realmente útil.
|
Devido à reformulação implementada no site, pode ser que você encontre alguns links quebrados. Por favor, ajude-nos a corrigir eventuais problemas nos informando links quebrados
|
|