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.


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().


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/


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/


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.



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


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();
  });

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');

0
<script>
      $(function() {
      $(".hide-it").hide(7000);
    });              
</script>

<div id="hide-it">myDiv</div>

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.