2012-02-12 69 views
0

我有项目包含在一个无序列表中。我在这个列表之外隐藏了div(使用display:none;)。当你将鼠标悬停在列表项上时,我想要div出现。如果将鼠标从列表项移动到其下的div,它也必须保持可见。只有在悬停菜单项或div时才能显示div。

我打开通过CSS,JavaScript/jQuery完成此操作。另外,我的文档被设置为HTML5。

这是我目前正在使用的。

<nav id="main-menu"> 
     <ul> 
      <li><a class="first-link parent" href="">First Link</a></li> 
      <li><a class="second-link parent" href="">Second Link</a></li> 
      <li><a class="third-link parent" href="">Third Link</a></li> 
      <li><a class="fourth-link parent" href="">Fourth Link</a></li> 
     </ul> 
    </nav><!-- #main-menu !--> 

而在导航下方,当我将鼠标悬停在相应的项目上时,会显示其内容。

 <div id="first-widget" class="widget-container"> 
      <h2>Sub Title</h2>    
      <p>Lorem Ipsum 
      <a href="#">Read More</a></p> 

     </div><!-- .first-widget !--> 


<div id="second-widget" class="widget-container"> 
      <h2>Sub Title</h2>    
      <p>Lorem Ipsum 
      <a href="#">Read More</a></p> 

     </div><!-- .second-widget !--> 

<div id="third-widget" class="widget-container"> 
      <h2>Sub Title</h2>    
      <p>Lorem Ipsum 
      <a href="#">Read More</a></p> 

     </div><!-- .third-widget !--> 



<div id="fourth-widget" class="widget-container"> 
      <h2>Sub Title</h2>    
      <p>Lorem Ipsum 
      <a href="#">Read More</a></p> 

     </div><!-- .fourth-widget !--> 

    </aside><!-- .hidden !--> 

我觉得应该有一个简单的解决方案,这一点,但我尝试到目前为止都没有达到。最大的问题是让div不仅显示悬停菜单项时,而且当你从菜单移动到可见div时。

任何建议表示感谢,感谢您抽出宝贵的时间阅读这些内容。

回答

4

你可以用在div小部件和mouseleave事件附加到它。该解决方案还采用了rel attibute存储部件idDEMO

HTML

<div id="wrap"> 
    <nav id="main-menu"> 
     <ul> 
      <li><a class="first-link parent" rel="first-widget" href="">First Link</a></li> 
      <li><a class="second-link parent" rel="second-widget" href="">Second Link</a></li> 
      <li><a class="third-link parent" rel="third-widget" href="">Third Link</a></li> 
      <li><a class="fourth-link parent" rel="fourth-widget" href="">Fourth Link</a></li> 
     </ul> 
    </nav><!-- #main-menu !--> 

    <div id="first-widget" class="widget-container"> 
       <h2>Sub Title 1</h2>    
       <p>Lorem Ipsum 
       <a href="#">Read More</a></p> 
    </div><!-- .first-widget !--> 
     ... 
</div> 

JS

$('#main-menu a').mouseover(function() { 
    var $this = $(this); 
    var id = $this.attr('rel'); 
    var $currentWidget = $('#' + id); 
    $currentWidget.show().siblings('.widget-container').hide(); 
}); 
$('#wrap').mouseleave(function() { 
    $('.widget-container').hide(); 
}); 
+0

非常感谢!看起来这样做对我来说确实是个诡计 – Ryan 2012-02-12 01:21:03

+0

没问题,请随时将其标记为公认的答案,谢谢 – shaunsantacruz 2012-02-12 01:27:16

+0

哦,嘿,我稍微改进了js。 – shaunsantacruz 2012-02-12 01:50:28

2

像这样的东西应该工作。

使用.hover绑定事件.index.eq以查找要显示/隐藏哪一个以及用于超时的原生JS方法以让您悬停div。

var timeout; // store a timeout here 

$('#main-menu lia ').hover(function() 
{ 
    $('.widget-container').eq($(this).parent().index()).show(); 
}, function() 
{ 
    timeout = setTimeout(function() 
    { 
     $('.widget-container').eq($(this).parent().index()).hide(); 
    }, 1000); 
); 

$('.widget-container').hover(function() 
{ 
    clearTimeout(timeout); 
}, function() 
{ 
    timeout = setTimeout(function() 
    { 
     $(this).hide(); 
    }, 1000); 
}); 
+0

乔,感谢您的及时回复。我在页面中添加了以下内容,但小部件未显示。 '<脚本类型= “文本/ JavaScript的”> $(文件)。就绪(函数(){ \t $( '#家庭NAV UL立一个').hover(函数() { $( '.widget-container')。eq($(this).parent()。index())。toggle(); }); } ' – Ryan 2012-02-12 00:14:15

+0

重大调整:P http://jsfiddle.net/ nx6JY/ – Joe 2012-02-12 00:25:33

+0

乔,非常感谢你抽出时间帮助我,现在我正在尝试这件事,并且会让你知道它是怎么回事 – Ryan 2012-02-12 00:40:58