Como definir o tempo de atraso em javascript
Eu tenho um pedaço de js no meu site para trocar imagens mas preciso de um atraso quando você clica na imagem uma segunda vez. O atraso deve ser de 1000ms. Então você clicaria no img.jpg e então o img_onclick.jpg apareceria. Você então clicaria na imagem img_onclick.jpg e então deveria haver um atraso de 1000ms antes da imagem img.jpg ser mostrada novamente.
Aqui está o código:
jQuery(document).ready(function($) {
$(".toggle-container").hide();
$(".trigger").toggle(function () {
$(this).addClass("active");
$(".trigger").find('img').prop('src', 'http://localhost:8888/images/img_onclick.jpg');
}, function () {
$(this).removeClass("active");
$(".trigger").find('img').prop('src', 'http://localhost:8888/images/img.jpg');
});
$(".trigger").click(function () {
$(this).next(".toggle-container").slideToggle();
});
});
143
3
Utilize **
setTimeout()
***:Se você quiser fazer isso sem o "SetTimeout": Consulte esta pergunta.
Coloque o seu código dentro do `{\ }``.
500
= 0,5 segundos2200
= 2,2 segundosetc.
Existem dois tipos (mais utilizados) de função timer em javascript
setTimeout
esetInterval
(outros)Estes dois métodos têm a mesma assinatura. Eles assumem uma função de retorno de chamada e retardam o tempo como parâmetro.
O
setTimeout
executa apenas uma vez após o atraso, enquanto osetInterval
continua a chamar a função de retorno de chamada após cada milisecs de atraso.ambos os métodos retornam um identificador inteiro que pode ser usado para limpá-los antes que o timer expire.
Estes dois métodos tomam um identificador inteiro retornado das funções acima "setTimeout" e "setInterval".
Exemplo:
setTimeout
Se você executar o código acima você verá que ele alerta
antes de setTimeout
e depoisde setTimeout
finalmente ele alertaEu sou setTimeout
após 1sec (1000ms)O que você pode notar pelo exemplo é que o
setTimeout(...)
é assíncrono, o que significa que não'não espere que o timer expire antes de ir para o próximo comando, ou seja,alert("depois de setTimeout");
Exemplo:
setInterval
Se você executar o código acima você verá que ele alerta
antes de definirInterval
e depois de definirInterval*** finalmente ele alerta **
Eu estou definidoInterval** 5 vezes após 1seg (1000ms) porque o setTimeout limpa o timer após 5 segundos ou então a cada 1 segundo você terá alerta **
Eu estou definidoInterval`** Infinitamente.Como o navegador faz isso internamente?
Eu vou explicar em poucas palavras.
Para entender que você tem que saber sobre fila de eventos em javascript. Há uma fila de eventos implementada no navegador. Sempre que um evento é acionado em js, todos esses eventos (como clique, etc.) são adicionados a essa fila. Quando seu navegador não tem nada para executar, ele pega um evento da fila e os executa um a um.
Agora, quando você chama
setTimeout
ousetInterval
seu retorno de chamada é registrado em um timer no navegador e ele é adicionado à fila de eventos após o tempo determinado expirar e eventualmente o javascript pega o evento da fila e o executa.Isto acontece assim, porque os motores javascript são de rosca única e só podem executar uma coisa de cada vez. Portanto, eles não podem executar outros javascript e manter o controle do seu timer. É por isso que estes temporizadores são registados com o browser (o browser não é de rosca simples) e pode manter o registo do timer e adicionar um evento na fila após o timer expirar.
O mesmo acontece com o
setInterval
somente neste caso o evento é adicionado à fila de novo e novamente após o intervalo especificado até que seja apagado ou a página do navegador seja atualizada.Portanto, a sua chamada de retorno pode, em algum momento, demorar mais do que o tempo especificado para ser chamada especialmente quando o seu outro código bloqueia a linha e não lhe dá tempo para processar o que's lá na fila.
E como eu mencionei o javascript é um único fio. Então, se bloqueares o fio por muito tempo.
Como este código
Seu usuário pode receber uma mensagem dizendo **página não respondendo***.