Ocultar div após alguns segundos

123

Fiquei me perguntando, como em jquery eu sou capaz de esconder um div depois de alguns segundos? Como as mensagens do Gmail, por exemplo.

Eu tentei o meu melhor, mas não consigo fazê-lo funcionar.

James
fonte
1
Está apenas se escondendo bem o suficiente ou você precisa desaparecer?
Joel Coehoorn

Respostas:

247

Isso ocultará a div após 1 segundo (1000 milissegundos).

setTimeout(function() {
    $('#mydiv').fadeOut('fast');
}, 1000); // <-- time in milliseconds
#mydiv{
    width: 100px;
    height: 100px;
    background: #000;
    color: #fff;
    text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="mydiv">myDiv</div>

Se você quer apenas se esconder sem desbotar, use hide().

Swilliams
fonte
2
e você venceu Joel Coehoorn muito bem de uma só vez! :)
cregox 18/03/11
3
@ James, Com certeza não há diferença no resultado final, mas suponho que a implementação usando .delay()seja mais "nativa" e elegante jQuery.
Paul T. Rawkeen
você pode substituir .fadeOut('fast')por .hide()para ocultar instantaneamente a div.
Raptor
90

Você pode tentar o .delay()

$(".formSentMsg").delay(3200).fadeOut(300);

chame a div para definir o tempo de atraso em milissegundos e defina a propriedade que você deseja alterar. Nesse caso, usei .fadeOut () para que pudesse ser animado, mas você também pode usar .hide ().

http://api.jquery.com/delay/

peter punk
fonte
7
É melhor porque não preciso usar o código setTimeout e é mais fácil ler o código.
Marek Bar
12

O jquery oferece uma variedade de métodos para ocultar a div de maneira cronometrada que não requer configuração e, posteriormente, limpe ou redefina os cronômetros de intervalo ou outros manipuladores de eventos. Aqui estão alguns exemplos.

Pele pura, atraso de um segundo

// hide in one second
$('#mydiv').delay(1000).hide(0); 

Pele pura, sem demora

// hide immediately
$('#mydiv').delay(0).hide(0); 

Ocultar animado

// start hide in one second, take 1/2 second for animated hide effect
$('#mydiv').delay(1000).hide(500); 

desaparecer

// start fade out in one second, take 300ms to fade
$('#mydiv').delay(1000).fadeOut(300); 

Além disso, os métodos podem usar um nome de fila ou funcionar como um segundo parâmetro (dependendo do método). A documentação para todas as chamadas acima e outras chamadas relacionadas pode ser encontrada aqui: https://api.jquery.com/category/effects/

Robert Mauro
fonte
10

Existe uma maneira realmente simples de fazer isso.

O problema é que .delay afeta apenas animações, então o que você precisa fazer é fazer com que .hide () aja como uma animação, dando-lhe uma duração.

$("#whatever").delay().hide(1);

Ao oferecer uma curta e agradável duração, parece instantâneo, como a função .hide comum.

Oisin Lavery
fonte
6
$.fn.delay = function(time, callback){
    // Empty function:
    jQuery.fx.step.delay = function(){};
    // Return meaningless animation, (will be added to queue)
    return this.animate({delay:1}, time, callback);
}

De http://james.padolsey.com/javascript/jquery-delay-plugin/

(Permite encadeamento de métodos)

Peter Smit
fonte
3

O uso do cronômetro jQuery também permitirá que você tenha um nome associado aos cronômetros anexados ao objeto. Assim, você pode anexar vários cronômetros a um objeto e parar qualquer um deles.

$("#myid").oneTime(1000, "mytimer1" function() {
  $("#something").hide();
}).oneTime(2000, "mytimer2" function() {
  $("#somethingelse").show();  
});

$("#myid").stopTime("mytimer2");

A função eval (e seus parentes, Function, setTimeout e setInterval) fornecem acesso ao compilador JavaScript. Às vezes, isso é necessário, mas na maioria dos casos indica a presença de códigos extremamente ruins. A função eval é o recurso mais mal utilizado do JavaScript.

http://www.jslint.com/lint.html

kamaci
fonte
2

Provavelmente, a maneira mais fácil é usar o plug-in timers. http://plugins.jquery.com/project/timers e chame algo como

$(this).oneTime(1000, function() {
    $("#something").hide();
  });
caules
fonte
1
Existe algum motivo convincente para usar o plug-in timers sobre setTimeout ou setInterval?
Spender #
2
Eu diria que baixar e anexar um plugin jquery é menos fácil do que simplesmente usar setTimeout.
Nathan Ridley
1
Eu não acho que isso seja necessariamente uma coisa ruim, mas como é raro eu usar temporizadores no meu código, ter esse plugin por perto (leia-se: código extra, inchaço) nessas poucas vezes não supera o custo. Se você estivesse escrevendo um monte de código que precisava temporizadores de uso, e estavam usando jQuery, eu posso ver porque este plugin seria muito útil para manter com a sintaxe jQuery ...
Jason Bunting
0

podemos usar diretamente

$('#selector').delay(5000).fadeOut('slow');
subindas pm
fonte
0
<script>
      $(function() {
      $(".hide-it").hide(7000);
    });              
</script>

<div id="hide-it">myDiv</div>
Ch UmarJamil
fonte
Não publique apenas o código como resposta, mas também forneça uma explicação sobre o que seu código faz e como ele resolve o problema da pergunta. As respostas com uma explicação geralmente são mais úteis e de melhor qualidade e têm maior probabilidade de atrair votos positivos.
Mark Rotteveel