【问题标题】:jQuery navigation menu mouseover and mouseout second time doesn't workjQuery 导航菜单 mouseover 和 mouseout 第二次不起作用
【发布时间】:2013-07-15 18:00:48
【问题描述】:

我正在用 jQuery 开发一个导航菜单。我来到了可以向下滑动第一个子菜单并向右滑动第二个子菜单的步骤。当我 mouseout 它会淡出。但问题是当我第二次将鼠标悬停时。它不会工作。第一次悬停它工作正常。我无法识别问题。我认为鼠标移出功能在执行后不会停止或完全返回。谁能给我一个关于这个问题的建议

我的 jQuery 代码

  <script type="text/javascript">
       $(document).ready( function() {
           jQuery('.box1').mouseover(function() {
            ///$(".box2").stop().slideDown('slow');
                $('.box2').stop().animate({
                   height: 50
                }, 1000);
            });

            jQuery('.box1').mouseout(function() {
               $('.box2').stop().fadeOut();
               // $(".box2").stop().slideUp('slow');
            });

              jQuery('.box4').mouseover(function() {
              // $(".box3").stop().slideDown('slow');
              //$(".box3").show('slide', {direction: 'left'}, 800);

              $('.box3').stop().animate({
                     width: 200
                  }, 1000);
          });

          jQuery('.box4').mouseout(function() {
              //$(".box3").stop().slideUp('slow');
              // $(".box3").hide('slide', {direction: 'left'}, 800);
              $('.box3').stop().fadeOut();
          });
          });   
</script>

我的 HTML 代码

<ul >
  <li class="box1"  >
    <div  class="box_sub" >Home</div>
    <ul>
      <li style="float:left;" class="box4"   >
        <div  id="box2" class="box2"  style="float:left">Sub 1.0</div>
        <ul style="float:left;">
          <li id="box3" class="box3"  style="float:left;clear:none;"  > Sub Sub 1.1</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

我的 CSS 代码

    .box_sub { 
       width: 200px;
       height: 50px;
       background-color: #0066CC;
       color: #FFF;
       text-align: center; 
       line-height: 50px;
       font: Verdana, Geneva, sans-serif;
       font-size: 14px;
       padding-top: 20px;
       padding-bottom: 20px;
       cursor: pointer;
    }
    .box2 {
       width: 200px;
       height: 0px;
       background-color: #0066CC;
       color: #FFF;
       text-align: center; 
       line-height: 50px;
       font: Verdana, Geneva, sans-serif;
       font-size: 14px;
       cursor: pointer; 
    }
   .box3 {
       width: 0px;
       height: 50px;
       background-color: #0066CC;
       color: #FFF;
       text-align: center; 
       line-height: 50px;
       font: Verdana, Geneva, sans-serif;
       font-size: 14px;
       padding-top: 20px;
       padding-bottom: 20px;
       cursor: pointer; 
   }
   .box1 {
       min-width: 200px;
   }
   ul { 
      list-style: none;
   }
   ul {
      margin: 0;
      padding: 0;
   }
   li {
      margin: 0;
      padding: 0;
   }

My jsFiddle link is here..

【问题讨论】:

  • 首先要注意的是fadeOut() 设置了元素的displaynone。您不会再次设置它,因此它永远不会再次显示。
  • 是的,尝试在动画前添加.show()

标签: jquery


【解决方案1】:

你想要的代码太多

Try This Working Fiddle

$("#nav li").hover(
    function(){
        $(this).children('ul').hide();
        $(this).children('ul').slideDown('slow');
    },
    function () {
        $('ul', this).slideUp('slow');            
    });

【讨论】:

  • 非常感谢。这似乎也很棒。
【解决方案2】:

您的问题如下:

您的框以 0 的高度/宽度开始。 然后,通过将它们的高度/宽度更改为您想要的值来使它们出现。 之后,您使用 jQuery 函数 fadeOut,它不会改变高度或宽度。 然后,您重新修改了高度/宽度,但实际上,您根本没有更改任何内容,因为您已经在第一次这样做了,但是您没有从 jQuery 中删除 fadeOut

所以我认为你有两个解决方案:

  • 第一个,你改变你的显示方式,使它可以与fadeOut 函数匹配,该函数同时修改不透明度和显示css属性(将不透明度更改为1并显示为无)
  • 第二个,你改变了消失的方式,所以你删除了fadeOut,而是使用自定义动画功能,将你的设置改回原来的设置。

【讨论】:

  • 工作小提琴,通过使用.show() 并在fadeOut() 回调中重置高度和宽度:jsfiddle.net/ES4qD/2
  • 这是一个从@Brewal 派生出来的小提琴,我在其中修复了您的鼠标事件(使用 mouseenter/leave 而不是 over/out),因此当悬停在右侧时,下拉菜单将不再被触发box_sub div 但不在其上。
  • 谢谢它的工作原理..你有什么想法没有淡出和把幻灯片左对齐。首先滑动左子菜单 1.1,然后滑动顶部子菜单 1 ..当鼠标移出时。现在它发生在同一时间
  • 对不起,我不明白你在问什么,你可以试试其他方式吗?
  • 当我从子菜单 1.0 悬停时,子菜单 1.1 和子菜单 1.0 同时淡出。我希望它先淡出子菜单 1.1,然后淡出子菜单 1.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多