2009-05-04 12 views
95

Mi chiedevo, come mai in jQuery riuscirò a nascondere un div dopo qualche secondo? Ad esempio, come i messaggi di Gmail.Nascondi div dopo qualche secondo

Ho fatto del mio meglio ma non riesco a farlo funzionare.

+1

Si nasconde abbastanza bene, o ne hai bisogno per svanire? –

risposta

206

Nasconde il div dopo 1 secondo (1000 millisecondi).

setTimeout(function() { 
    $('#mydiv').fadeOut('fast'); 
}, 1000); // <-- time in milliseconds 

Se si vuole solo nascondere senza sbiadire, utilizzare hide().

+2

** e ** hai battuto pazzamente * Joel Coehoorn * molto bene in un colpo solo! :) – cregox

+3

@James, Di sicuro non c'è differenza nel risultato finale, ma suppongo che l'implementazione usando '.delay()' sia più "nativa" ed elegante per 'jQuery'. –

+0

è possibile sostituire '.fadeOut ('fast')' con '.hide()' per nascondere immediatamente il div. – Raptor

2

Probabilmente il modo più semplice è utilizzare il plug-in timer. http://plugins.jquery.com/project/timers e quindi chiamare qualcosa come

$(this).oneTime(1000, function() { 
    $("#something").hide(); 
    }); 
+1

C'è qualche motivo valido per usare il plug-in timer su setTimeout o setInterval? – spender

+2

Direi che scaricare e collegare un plug-in jquery è * meno * facile rispetto al semplice utilizzo di setTimeout. –

+1

Non penso che sia necessariamente una cosa negativa, ma poiché è raro che io usi mai dei timer nel mio codice, avere quel plugin in giro (leggi: codice extra, gonfia) per quelle poche volte non supera il costo. Se stavi scrivendo un sacco di codice che aveva bisogno di usare i timer, e stavo usando jQuery, posso capire perché questo plugin sarebbe molto utile per mantenere la sintassi jQuery ... –

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

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

(Consente il concatenamento dei metodi)

3

Uso del timer jQuery vi permetterà anche di avere un nome associato con i timer che sono attaccato all'oggetto. In questo modo è possibile associare più timer a un oggetto e arrestarne uno qualsiasi.

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

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

La funzione eval (e dei suoi parenti, funzione, setTimeout e setInterval) forniscono l'accesso al compilatore JavaScript. Questo a volte è necessario, ma nella maggior parte dei casi indica la presenza di codifiche estremamente scadenti. La funzione eval è la funzione più abusata di JavaScript.

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

80

È possibile provare la .delay()

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

chiamata div impostare il tempo di ritardo in millisecondi e impostare la proprietà che si desidera modificare, in questo caso ho usato .fadeOut() in modo che potrebbe essere animato, ma puoi anche usare .hide().

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

+5

Questo è meglio perché non devo usare setTimeoutand code è più facile da leggere. –

+1

+1 perché gestisce l'esecuzione multipla dello stesso codice – Fanckush

10

C'è un modo molto semplice per farlo.

Il problema è che .delay esegue solo animazioni, quindi quello che devi fare è fare in modo che .hide() si comporti come un'animazione dandogli una durata.

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

Dando un bel breve durata, sembra essere immediato, proprio come la funzione .nascosto regolare.

5

jquery offre una varietà di metodi per nascondere il div in modo temporizzato che non richiede l'impostazione e successivamente la cancellazione o il ripristino di timer di intervallo o altri gestori di eventi. Ecco alcuni esempi.

Pure nascondere

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

animato nascondere

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

sfumando

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

Inoltre, i metodi possono prendere un nome di coda o una funzione come secondo parametro (a seconda del metodo di). La documentazione per tutte le chiamate sopra e altre chiamate correlate può essere trovata qui: https://api.jquery.com/category/effects/

Problemi correlati