Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ariane Stela

[Resolvido] Colocar um delay ou timeout no mouseover

Recommended Posts

Olá pessoal, fiz este tópico a algum tempo atrás mas ele acabou morrendo, agora retomei a atualização deste menu e preciso colocar ao passar de um item do menu para outro pq está mudando mto rápido os submenus.

Tentei da seguinte forma, mas ele está caindo no exception:

 

node.onmouseover = function() {
        try {
                setTimeout(controlMenuMethods.view(this, this.id.substr(5)), 10000);
        } catch(e) {
                null;
        }
};

Vcs sabem o q esta acontecendo?

Obrigada.

beijo

 

mensagem do exception: Error: useless setInterval call (missing quotes around argument?)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vixe, moça... não complica... esse bloco try .. catch é totalmente desnecessário.

node.onmouseover = function() {
 try {
 setTimeout(controlMenuMethods.view(this, this.id.substr(5)), 10000);
 } catch(e) {
 null;
 }
};

Existe muita confusão com os métodos setTimeout e setInterval na hora de passar uma função no primeiro parâmetro.

Veja o seguinte:

 

setTimeout(funcao(), 10000); //Errado!!!!!!!!!!!!!!!!!
setTimeout(funcao, 10000); //Certo

Quando você usa o operador () você está CHAMANDO a função naquele exato momento.

Qual o sentido de fazê-lo se você quer esperar 10s?

 

Quando a função possui parâmetros, parece que fica complicado. Só parece...

Há 2 maneiras:

node.onmouseover = function() {
 var self = this;
 setTimeout(function(){
 controlMenuMethods.view(self, self.id.substr(5))
 }, 10000);
};

Note que como você muda de escopo [espero que isso não seja grego pra você], a variável this para a se referir à função dentro do setTimeout.

Então você precia armazenar esse valor em uma outra variável para acessá-la dentro da função.

 

O outro jeito, que poucos conhecem é

node.onmouseover = function() {
 setTimeout(controlMenuMethods.view, 10000, this, this.id.substr(5));
};

Coloque o nome da função, o intervalo e depois coloque os argumentos na ordem normal deles.

 

Espero ter sido claro. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.