【问题标题】:jquery menu hoveringjquery菜单悬停
【发布时间】:2012-02-07 22:28:18
【问题描述】:

我有一个菜单,当我将鼠标悬停在一个 div 上时,它会显示,鼠标移出时它会淡出。问题是,如果您滚动菜单的任何子项,菜单将消失(因为从技术上讲,如果您超过了其中一个子项,那么您就不会超过父项)有没有办法让子项不会滚动算作mouseout?这是我的代码:http://jsfiddle.net/32bLg/

【问题讨论】:

    标签: jquery hover mouseevent


    【解决方案1】:

    这是一个非常简单的问题,大多数人倾向于使用计时器和特殊情况检查来过度复杂化。简单的解决方案是通过标记。将悬停目标和菜单放在同一个父项下,并在父项上跟踪悬停。 Like this。 您可能还想使用hoverIntent jQuery 插件来避免错误的悬停事件。

    用户体验注意事项:持续超过 500 毫秒的淡入淡出动画很粗鲁。请不要那样做。

    【讨论】:

    • 最优秀的。就像生活中最简单的答案通常是正确的一样。 500ms 也只是为了测试,这对大多数人来说太快了……谢谢老兄。
    • 当我尝试将鼠标移入和移出菜单时遇到了一些问题 .. 'now before fadeOut'.. 鼠标在 examplePic 中,然后鼠标移出 .. 再次鼠标进入会弄乱动画.
    • @SKS 是的,使用常规的 hover 事件 + 长动画就可以了。切换到hoverIntent 和短动画,你就看不到了。
    【解决方案2】:

    这是一个简单的解决方案: http://jsfiddle.net/32bLg/16/

    【讨论】:

    • 我喜欢使用 setTimeout +1 的想法。
    【解决方案3】:

    您需要在悬停 div 中包含菜单 div。见http://jsfiddle.net/T72jm/2/

    您会注意到(至少在 Chrome 中),如果您将鼠标悬停在悬停 div 上并且不执行任何操作,菜单 div 将会淡出。

    【讨论】:

      【解决方案4】:

      看看这些很好的例子:

      Nice JQuery menus

      一个特定的多级:

      Multilevel JQuery menu

      来自链接 2 的 HTML:

          <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();
      });
      

      【讨论】:

        【解决方案5】:

        这是我的解决方案

        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();
        });
        

        【讨论】:

          猜你喜欢
          • 2011-01-23
          • 2023-04-01
          • 2010-12-03
          • 1970-01-01
          • 1970-01-01
          • 2011-05-09
          • 2011-07-14
          相关资源
          最近更新 更多