2010-11-08 34 views
21

Ho div blocco che arriva su un passaggio del mouse di un altro div.Come mostrare div per 10 secondi e poi nasconderlo

div1 img // mouse spettacoli div2.

voglio mostrare div2 per 10 secondi e poi nasconderlo, potete per favore dirmi come raggiungere questo

Grazie

+0

Pubblica un campione di HTML per ottenere la risposta migliore. Potrebbero esserci problemi di ordine degli eventi se i div sono nidificati. – Silkster

+0

@silkster, la prossima volta lo farò sicuramente. Ho ricevuto la risposta, grazie mille – kobe

+0

Possibile duplicato di [jQuery show per 5 secondi poi nascondi] (http://stackoverflow.com/questions/3428766/jquery-show-for-5-seconds-then-hide) –

risposta

30
$("#div1").mouseenter(function() { 
    var $div2 = $("#div2"); 
    if ($div2.is(":visible")) { return; } 
    $div2.show(); 
    setTimeout(function() { 
     $div2.hide(); 
    }, 10000); 
}); 

Un altro modo per andare:

$("#div1").mouseenter(function() { 
    var $div2 = $("#div2"); 
    if ($div2.data("active")) { return; } 
    $div2.show().data("active", true); 
    setTimeout(function() { 
     $div2.hide().data("active", false); 
    }, 10000); 
}); 
+0

@ stesso grazie perfetto. – kobe

+0

@sime un'altra cosa, se è visibile dovrebbe nascondersi dopo 10 secondi .. non dovremmo tornare lì a destra. Se è visibile, dobbiamo impostare la funzione setTimout su quello – kobe

+0

@gov Il # div2 è nascosto all'inizio? –

3
$(function() { 
    $("div1 img").hover(
     function() { //mouse over show div 
      $("div2").show(); //.delay(10000).fadeOut(); 
     }, 
     function() { // mouse out, start timer to hide 
      //$("div2").delay(10000).fadeOut(); 
     } 
    );  
}); 
+0

tu significa setTimeout? setInterval si ripeterà ogni 10 s a meno che non venga annullato. – zzzzBov

+0

@ hunter nasconderà questo div 2 dopo 10 secondi? – kobe

+0

voglio mostrare div2 per 10 secondi, dopo 10 secondi dovrebbe sparire fuori – kobe

8

come parte della funzione mouseover:

setTimeout(function(d){ 
    item.hide(); 
}, 10000); 

Ciò presuppone var item è l'oggetto jquery del div che si desidera nascondere. Il parametro 10000 è il ritardo in millisecondi. 10s * 1000ms/1s = 10000ms

+0

Ho votato per questo perché anche se questa domanda è contrassegnata come [jquery] non richiede una soluzione jQuery in particolare. –

1
var $div2 = $('#div2'); 


$('#div1').mouseover(function(){ 
    $div2.show(); 

    setTimeout(function(){ 
    $div2.hide(); 
    }, 1000*10); 

}); 
+0

grazie mille, ha funzionato perfettamente. – kobe

18

Utilizzare il ritardo di jQuery (n); Metodo http://api.jquery.com/delay/

$(function() { 
     $("#div1 img").hover(function(){ 
     $("#div2").show().delay(10000).hide(); 
     }); 
    }); 
+0

+1 per brevità .. – Kasturi

+2

Questa risposta è sbagliata (nonostante tutti i voti). – user113716

+5

Ci sono due errori nel codice: 1. il metodo hover(), quando viene fornito con un solo argomento di funzione, esegue quella funzione su mouseenter ** e mouseleave **, che chiaramente non è ciò che l'OP vuole, 2. il Il metodo delay() funziona solo con le animazioni e non con show() o hide() (Nota: se si fornisce un argomento a show() o hide(), diventa un'animazione e quindi funziona). Il tuo codice 'show(). Delay (10000) .hide()' nasconderà l'elemento ** immediatamente ** e non dopo 10 secondi. –

8

La risposta accettata è l'unica buona qui.

che sto lasciando una risposta perché la maggior parte degli altri non riescono, per vari motivi.

Se si desidera utilizzare .delay(), la voce in ritardo deve essere parte della coda. Il metodo .hide() no. Ma se si dà una durata a .hide(), lo è.

Così si può fare questo:

var $div2 = $('#div2'); 

$('#div1').mouseenter(function() { 
    $div2.show().delay(10000).hide(0); 
}); 

La durata 0 fa .hide() parte della coda. Se non si desidera utilizzare .hover() perché sarà il fuoco una volta per mouseenter e una volta per mouseleave. Questo non è quello che volevamo.

Alcune delle risposte che utilizzano setTimeout() non riescono perché se ci sono più eventi mouseenter, vengono effettuate più chiamate setTimeout(). La risposta accettata aggira questo.

+0

grazie per la tua spiegazione è bello. – kobe

Problemi correlati