Quero adicionar uma classe, aguarde 2 segundos e adicione outra classe.
.addClass("load").wait(2sec).addClass("done");
Existe alguma maneira?
Quero adicionar uma classe, aguarde 2 segundos e adicione outra classe.
.addClass("load").wait(2sec).addClass("done");
Existe alguma maneira?
Respostas:
setTimeout executará algum código após um atraso de algum período de tempo (medido em milissegundos). No entanto, uma observação importante: devido à natureza do javascript, o resto do código continua a ser executado depois que o cronômetro é configurado:
$('#someid').addClass("load");
setTimeout(function(){
$('#someid').addClass("done");
}, 2000);
// Any code here will execute immediately after the 'load' class is added to the element.
Isso seria .delay()
.
Se você está fazendo coisas com AJAX, você realmente não deve apenas escrever automaticamente "pronto", você realmente deve esperar por uma resposta e ver se está realmente feito.
.removeClass('load')
adicionar de outra forma as classes load e done, o que provavelmente é indesejado. Se você está realmente esperando que uma ação assíncrona seja concluída, sua melhor aposta é fazer .addClass QUANDO for concluída e for bem-sucedida, se não .addClass ('erro') talvez uma ideia
delay () não fará o trabalho. O problema com delay () é que ele faz parte do sistema de animação e só se aplica a filas de animação.
E se você quiser esperar antes de executar algo fora da animação ??
Usa isto:
window.setTimeout(function(){
// do whatever you want to do
}, 600);
O que acontece ?: Nesse cenário, ele espera 600 milissegundos antes de executar o código especificado entre as chaves.
Isso me ajudou muito depois que descobri e espero que ajude você também!
AVISO IMPORTANTE: 'window.setTimeout' acontece de forma assíncrona. Tenha isso em mente ao escrever seu código!
Perceba que esta é uma questão antiga, mas escrevi um plugin para resolver esse problema que alguém pode achar útil.
https://github.com/madbook/jquery.wait
permite que você faça isso:
$('#myElement').addClass('load').wait(2000).addClass('done');
Existe uma função, mas é extra: http://docs.jquery.com/Cookbook/wait
Este pequeno snippet permite que você espere:
$.fn.wait = function(time, type) {
time = time || 1000;
type = type || "fx";
return this.queue(type, function() {
var self = this;
setTimeout(function() {
$(self).dequeue();
}, time);
});
};
Você pode usar a .delay()
função.
Isso é o que você procura:
.addClass("load").delay(2000).addClass("done");
O plugin xml4jQuery fornece o método sleep (ms, callback). A cadeia restante seria executada após o período de sono.
$(".toFill").html("Click here")
.$on('click')
.html('Loading...')
.sleep(1000)
.html( 'done')
.toggleClass('clickable')
.prepend('Still clickable <hr/>');
.toFill{border: dashed 2px palegreen; border-radius: 1em; display: inline-block;padding: 1em;}
.clickable{ cursor: pointer; border-color: blue;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.xml4jquery.com/ajax/libs/xml4jquery/1.1.2/xml4jquery.js"></script>
<div class="toFill clickable"></div>
Usando a função setTimeout, por exemplo Visite aqui por exemplo