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