2012-02-07 9 views
5

Ho un menu che quando passo con il mouse su un div lo mostrerà e al passaggio del mouse si spegnerà. il problema è che se passi su uno dei bambini del menu il menu sparirà (perché tecnicamente se sei sopra uno dei bambini allora non sei sopra il genitore) c'è un modo per far rotolare i bambini conta come un mouse fuori? ecco il mio codice: http://jsfiddle.net/32bLg/menu jquery in bilico

risposta

5

Questo è un problema molto semplice la maggior parte delle persone tende a complicarsi in modo massivo con timer e controlli caso speciali. La soluzione facile è tramite markup. Colloca il target di passaggio del mouse e il menu sotto lo stesso padre e traccia il passaggio del mouse sul genitore. Like this. Si consiglia inoltre di utilizzare il plug-in jQuery hoverIntent per evitare falsi eventi di hover.

Una nota UX: le animazioni di dissolvenza che superano i 500 ms sono semplicemente maleducate. Per favore, non farlo.

+0

più eccellente. proprio come nella vita la risposta più semplice di solito è quella giusta. anche i 500ms erano solo per testare, questo è troppo veloce per la maggior parte delle persone da notare comunque ... grazie amico. – zero

+0

Sto riscontrando qualche problema quando provo ad entrare e uscire dal menu del mouse .. 'ora prima di fadeOut' .. mouse in examplePic e mouse fuori ora .. e ancora mouse nel caos per l'animazione. –

+0

@SKS sì, utilizzando l'evento normale "hover' + le animazioni lunghe lo farebbero. Passa a 'hoverIntent' e alle animazioni corte e non lo vedresti. –

1

Guarda anche questi bei esempi:

Nice JQuery menus

Una specifica multilivello uno:

Multilevel JQuery menu

HTML dal link 2:

<ul id="nav"> 
    <li><a href="#">1 HTML</a></li> 
    <li><a href="#">2 CSS</a></li> 
    <li><a href="#">3 Javascript</a> 
     <ul> 
      <li><a href="#">3.1 jQuery</a> 
       <ul> 
        <li><a href="#">3.1.1 Download</a></li> 
        <li><a href="#">3.1.2 Tutorial</a></li> 
       </ul> 
      </li> 
      <li><a href="#">3.2 Mootools</a></li> 
      <li><a href="#">3.3 Prototype</a></li> 
     </ul> 
    </li> 
</ul> 

CSS:

#nav, #nav ul{ 
     margin:0; 
     padding:0; 
     list-style-type:none; 
     list-style-position:outside; 
     position:relative; 
     line-height:1.5em; 
    } 

    #nav ul ul{ 
    top:auto; 
    } 

#nav li ul ul { 
    left:12em; 
    margin:0px 0 0 10px; 
    } 

#nav li:hover ul ul, #nav li:hover ul ul ul, #nav li:hover ul ul ul ul{ 
    display:none; 
    } 
#nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li li li li:hover ul{ 
    display:block; 
    } 

JS:

function mainmenu(){ 
$(" #nav ul ").css({display: "none"}); // Opera Fix 
$(" #nav li").hover(function(){ 
     $(this).find('ul:first').css({visibility: "visible",display: "none"}).show(400); 
     },function(){ 
     $(this).find('ul:first').css({visibility: "hidden"}); 
     }); 
} 

$(document).ready(function(){ 
    mainmenu(); 
}); 
2

È necessario contenere il div menù all'interno del div hover. Vedi http://jsfiddle.net/T72jm/2/.

Noterai (almeno in Chrome) che se passi il mouse sopra il tuo passaggio al passaggio del mouse e non fai nulla, il div del menu si dissolverà.

1

questa è la mia correzione

window.menushowing = false; 

$('#menu').hover(

function() { 
    window.menushowing = true; 
}, function() { 
    window.menushowing = false; 
    hideMenu(); 
}); 

function hideMenu() { 
    if (window.menushowing) return; 
    $('#menu').animate({ 
     opacity: 0 
    }, 1500, function() { 
     $('#menu').hide(); 
    }); 
} 

$('#examplePic').hover(

function() { 
    window.menushowing = true; 
    $('#menu').css('display', 'block'); 
    $('#menu').animate({ 
     opacity: 1 
    }, 1500); 

}, function() { 
    hideMenu(); 
}); 
Problemi correlati