【问题标题】:jQuery - Help combining multiple mouseenter/mouseleave eventsjQuery - 帮助组合多个 mouseenter/mouseleave 事件
【发布时间】:2011-06-24 09:22:50
【问题描述】:

对不起,如果这是一个菜鸟问题,但有没有办法组合这些 mouseenter/mouseleave 事件?

$('.home').mouseenter(function(){
        $('#display_home:hidden').fadeIn(400); 
     }).mouseleave(function(){
         $('#display_home').hide()
     }); 

     $('.about').mouseenter(function(){
         $('#display_about:hidden').fadeIn(400);
     }).mouseleave(function(){
         $('#display_about').hide();
     });

     $('.contact').mouseenter(function(){
         $('#display_contact:hidden').fadeIn(400);
     }).mouseleave(function(){
         $('#display_contact').hide();
     });

     $('.services').mouseenter(function(){
         $('#display_services:hidden').fadeIn(400);
     }).mouseleave(function(){ 
         $('#display_services').hide();
     });

我尝试了各种程序员的各种方法。我试图通过将鼠标悬停在mouseenter函数链接到每个div的li类上来独立隐藏/显示多个div,但我是jQuery新手,似乎找不到解决方案。我知道必须有一种更清洁的方法来做到这一点,但我还没有找到。任何帮助将不胜感激!

example

谢谢

html:

<div id="right_nav">
    <div id='display_home'><img src="images/gallery/home.png" width="605" height="300" /></div>
    <div id='display_about'><img src="images/gallery/about us.png" width="605" height="300" /></div>
    <div id='display_contact'><img src="images/gallery/Contact Us.png" width="605" height="300" /></div>
    <div id='display_services'><img src="images/gallery/Services.png" width="605" height="300" /></div> 
  </div>
<div id="thumb">
      <ul>
        <li class="home"><img src="images/gallery/thumb/home.png" width="82" height="23" /></li>
        <li class="about"><img src="images/gallery/thumb/about us.png" width="130" height="24" /></li>
        <li class="contact"><img src="images/gallery/thumb/Contact Us.png" width="150" height="23" /></li>
        <li class="services"><img src="images/gallery/thumb/Services.png" width="113" height="24" /></li>
      </ul>
    </div>   

【问题讨论】:

    标签: jquery mouseleave mouseenter


    【解决方案1】:
     $('.home, .about, .contact, ,services').hover(function(){
        $('#display_'+$(this).attr('class')+':hidden').fadeIn(400); 
     }, function() {
         $('#display_'+$(this).attr('class')).hide()
     }); 
    

    编辑

    也许使用数据属性而不是类名会更好:

      <ul>
        <li class="home" data-name="home"><img src="images/gallery/thumb/home.png" width="82" height="23" /></li>
        <li class="about" data-name="about"><img src="images/gallery/thumb/about us.png" width="130" height="24" /></li>
        <li class="contact" data-name="contact"><img src="images/gallery/thumb/Contact Us.png" width="150" height="23" /></li>
        <li class="services" data-name="services"><img src="images/gallery/thumb/Services.png" width="113" height="24" /></li>
      </ul>
    
     $('#thumb li').hover(function(){
        $('#display_'+$(this).data('name')+':hidden').fadeIn(400); 
     }, function() {
         $('#display_'+$(this).data('name')).stop().hide();
     }); 
    

    这样您可以更改类或添加类而不会破坏它。

    【讨论】:

    • 我会将$('.home, .about, .contact, ,services').hover(function(){ 更改为$('li', $("#thumb").hover(function(){,这样无论何时更改名称或添加新菜单条目都无关紧要
    • 谢谢。我用你的第二个例子,它没有问题。
    【解决方案2】:
    $('div#thumb li').hover(function(){ // mouseover
        var className = $(this).attr('class');
        var divToShow = $('div#display_'+className);
        divToShow.fadeIn(400);
    },
    function(){ // mouseout
        // just hide all divs
        $('div#right_nav div').stop().hide();
    });
    

    所以在这里,我假设 lis 的类名直接与要隐藏/显示的 div 的 id 相关。

    因此,第一个函数 (mouseover) 获取您鼠标悬停的 li 的类名,然后将其添加到前缀 div#display_ 以构建您要显示的 div 的 id,然后淡入那个元素。

    mouseout 函数只是隐藏了所有的 div。 stop() 停止动画,如果它在淡入的过程中进行。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:
      $('#thumb ul li').mouseenter(function(){
              $('#right_nav div').eq($(this).index()).fadeIn(400); 
           }).mouseleave(function(){
               $('#right_nav div').hide()
           }); 
      

      这是最简单的版本,假设内容的顺序相同,无需返回脚本进行编辑。

      【讨论】:

      • 这假定#right_nav 中的 div 与它们可能并不总是如此的 lis 的顺序相同。如果类与 div 的 id 直接相关,那么根据我的示例,这可能是一种更好的方法。
      • 该示例按此顺序显示它们,因此看起来很合适:P
      • 很公平,我只是想我会指出这一点,以免造成混淆。 :)
      猜你喜欢
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多