Eu tenho isso um pedaço de js no meu site para alternar imagens, mas preciso de um atraso quando você clica na imagem uma segunda vez. O atraso deve ser de 1000 ms. Então você clicaria no img.jpg e o img_onclick.jpg apareceria. Você clicaria na imagem img_onclick.jpg e, em seguida, deveria haver um atraso de 1000ms antes que o img.jpg fosse exibido 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();
});
});
javascript
jquery
Azul Laranja
fonte
fonte
setTimeout(function(){/*YourCode*/},1000);
.stop()
embora. Dê uma olhada aqui api.jquery.com/stop #Respostas:
Use
setTimeout()
:Se você quiser fazê-lo sem
setTimeout
: Consulte esta pergunta .fonte
Coloque seu código dentro do
{ }
500
= 0,5 segundos2200
= 2,2 segundosetc.
fonte
Solução ES-6
Abaixo está um código de exemplo que usa aync / waitit para ter um atraso real.
Existem muitas restrições e isso pode não ser útil, mas basta postar aqui por diversão ..
fonte
delay
função seja assíncrona. Esse atraso impressionante funciona quando uma promessa retornada por uma função regular é aguardada no corpo de uma função assíncrona.Existem dois tipos (mais usados) de função de timer em javascript
setTimeout
esetInterval
( outros )Ambos os métodos têm a mesma assinatura. Eles recebem uma função de retorno de chamada e atrasam o tempo como parâmetro.
setTimeout
executa apenas uma vez após o atraso, enquantosetInterval
continua chamando a função de retorno de chamada após cada milissegundo de atraso.esses dois métodos retornam um identificador inteiro que pode ser usado para limpá-los antes que o cronômetro expire.
clearTimeout
eclearInterval
ambos os métodos usam um identificador inteiro retornado das funções acimasetTimeout
esetInterval
Exemplo:
setTimeout
Se você executar o código acima, verá que ele alerta
before setTimeout
e,after setTimeout
finalmente,I am setTimeout
depois de 1 segundo (1000ms)O que você pode notar no exemplo é que o
setTimeout(...)
é assíncrono, o que significa que não espera o tempo decorrido antes de passar para a próxima instrução.alert("after setTimeout");
Exemplo:
setInterval
Se você executar o código acima, verá que ele alerta
before setInterval
e,after setInterval
finalmente, alertaI am setInterval
5 vezes após 1 segundo (1000ms), porque o setTimeout limpa o timer após 5 segundos ou, a cada 1 segundo, você recebe um alertaI am setInterval
infinitamente.Como o navegador faz isso internamente?
Vou explicar em breve.
Para entender que você precisa saber sobre a 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 o seu navegador não tem nada para executar, ele pega um evento da fila e os executa um por um.
Agora, quando você liga
setTimeout
ousetInterval
seu retorno de chamada é registrado em um timer no navegador, ele é adicionado à fila de eventos após o tempo determinado expirar e, eventualmente, o javascript pega o evento da fila e o executa.Isso acontece assim, porque o mecanismo javascript é thread único e eles podem executar apenas uma coisa de cada vez. Portanto, eles não podem executar outro javascript e acompanhar o seu cronômetro. É por isso que esses timers são registrados no navegador (o navegador não possui thread único) e ele pode acompanhar o cronômetro e adicionar um evento na fila após o término do cronômetro.
O mesmo acontece
setInterval
apenas neste caso, o evento é adicionado à fila repetidamente após o intervalo especificado até que seja limpo ou a página do navegador atualizada.Portanto, seu retorno de chamada pode demorar um pouco mais do que o tempo de atraso especificado para ser chamado especialmente quando seu outro código bloqueia o encadeamento e não dá tempo para processar o que há na fila.
E como eu mencionei, o javascript é de thread único. Portanto, se você bloquear o encadeamento por muito tempo.
Como este código
Seu usuário pode receber uma mensagem informando que a página não está respondendo .
fonte
setTimeout
se não deseja comportamento assíncrono.Para chamadas de sincronização, você pode usar o método abaixo:
fonte
Se você precisar de atualização, essa é outra possibilidade:
fonte
Aqui está o que estou fazendo para resolver esse problema. Concordo que isso ocorre por causa do problema de tempo e precisava de uma pausa para executar o código.
Este novo código o pausará por 1 segundo e, enquanto isso, executará seu código.
fonte
Vou dar minha opinião, porque isso me ajuda a entender o que estou fazendo.
Para fazer uma apresentação de slides de rolagem automática com uma espera de 3 segundos, fiz o seguinte:
Lembre-se que ao executar setTimeout () assim; ele executará todas as funções de tempo limite como se fossem executadas ao mesmo tempo, assumindo que em setTimeout (nextImage, delayTime), o tempo de atraso é de 3000 milissegundos estáticos.
O que eu fiz para explicar isso foi adicionar mais 3000 mili / s após cada um para incrementar o loop via
delayTime += timeIncrement;
.Para quem se importa aqui, é como minha nextImage () se parece:
fonte