【问题标题】:keep submenu showing while mouseover鼠标悬停时保持子菜单显示
【发布时间】:2017-04-30 00:01:37
【问题描述】:

这里有个小问题,

我有一个菜单,我想在 .submenuWrap 类的 div 中显示子菜单。如果菜单项有子菜单,它会在这个.submenuWrap 中显示子菜单,如果菜单项没有子菜单,则.submenuWrap 根本不会显示。

我不知道该怎么做是在我在子菜单中移动时保持这个 .submenuWrap 显示,因为目前,一旦我离开导航,它就会消失。

我把所有东西都放在一个 jsfiddle 中,因为它更容易理解:

html

<nav id="mainNav" role="navigation">
  <div class="container">
    <div id="mainMenu" class="collapse navbar-collapse">
      <ul class="nav">
        <li><a href="#" class="dropdown-toggle" data-toggle="dropdown">Buy Wine</a>
          <div class="dropdown-menu">
            <div class="col-sm-3 col-xs-12">
              <dl>
                <dt><a href="#">By Country</a></dt>
                <dd><a href="#" data-abbr="ar">Argentina</a></dd>
                <dd><a href="#" data-abbr="au">Australia</a></dd>
                <dd><a href="#" data-abbr="it">Italy</a></dd>
                <dd><a href="#" data-abbr="fr">France</a></dd>
                <dd><a href="#" data-abbr="es">Spain</a></dd>
                <dd><a href="#" data-abbr="gb">United Kingdom</a></dd>
              </dl>
            </div>
            <div class="col-sm-3 col-xs-12">
              <dl>
                <dt><a href="#">By Type</a></dt>
                <dd><a href="#">Red</a></dd>
                <dd><a href="#">White</a></dd>
                <dd><a href="#">Rose</a></dd>
                <dd><a href="#">Sparkling</a></dd>
                <dd><a href="#">Port</a></dd>
              </dl>
            </div>
            <div class="col-sm-3 col-xs-12">
              <dl>
                <dt><a href="#">By Something</a></dt>
                <dd><a href="#">Red</a></dd>
                <dd><a href="#">White</a></dd>
                <dd><a href="#">Rose</a></dd>
                <dd><a href="#">Sparkling</a></dd>
                <dd><a href="#">Port</a></dd>
              </dl>
            </div>
            <div class="col-sm-3 col-xs-12">
              <dl>
                <dt><a href="#">By Price</a></dt>
                <dd><a href="#">£0 - £50</a></dd>
                <dd><a href="#">£50 - £100</a></dd>
                <dd><a href="#">£100 - £200</a></dd>
                <dd><a href="#">£200 - £500</a></dd>
                <dd><a href="#">£500+</a></dd>
              </dl>
            </div>
          </div>
        </li>
        <li><a href="#" class="dropdown-toggle" data-toggle="dropdown">en primeur</a>
          <div class="dropdown-menu">
            <div class="col-sm-6 col-xs-12">
              <dl>
                <dt><a href="#">PIRULO</a></dt>
                <dd><a href="#" data-abbr="ar">Argentina</a></dd>
                <dd><a href="#" data-abbr="au">Australia</a></dd>
                <dd><a href="#" data-abbr="it">Italy</a></dd>
                <dd><a href="#" data-abbr="fr">France</a></dd>
                <dd><a href="#" data-abbr="es">Spain</a></dd>
                <dd><a href="#" data-abbr="gb">United Kingdom</a></dd>
              </dl>
            </div>
            <div class="col-sm-6 col-xs-12">
              <dl>
                <dt><a href="#">PIRULA</a></dt>
                <dd><a href="#">Red</a></dd>
                <dd><a href="#">White</a></dd>
                <dd><a href="#">Rose</a></dd>
                <dd><a href="#">Sparkling</a></dd>
                <dd><a href="#">Port</a></dd>
              </dl>
            </div>
          </div>
        </li>
        <li><a href="#">latest offers</a></li>
        <li><a href="#">what's new</a></li>
        <li><a href="#">our blog</a></li>
        <li><a href="#">services</a></li>
      </ul>
    </div>
    <div class="submenuWrap"></div>
  </div>
</nav> 

css

   #mainNav {
     background-color: $white;
   border-top: 5px solid black;
   border-bottom: 5px solid black;
   }
  #mainMenu > ul {
      display: table;
         width: 100%;
         margin-bottom: 0;
  }
  #mainMenu > ul > li {
      display: table-cell;
  }
   #mainMenu > ul > li > a {
           text-align: center;
  }

  .submenuWrap {
    position: absolute;
    background-color: khaki;
       width: 98%;
       border-left: 5px solid #333333;
       border-right: 5px solid #333333;
       background-color: $white;
       margin: 0 auto;
       top: 50px;
       right: 0;
       left: 0;
       border-top: 0;
       display:block;
       z-index:6;       
     }

js

 var submenu = $(this).next(".dropdown-menu").html();
 $( "#mainMenu .dropdown-toggle" ).on({
    mouseover: function() {
    submenu = $(this).next(".dropdown-menu").html();
  }, mouseenter: function() {
     $(".submenuWrap").html(submenu).css("border-bottom", "5px solid black");
  }, mouseleave: function() {
     $(".submenuWrap").html("").css("border-bottom", "0");
  }
});

我试过添加这个:

 $( ".submenuWrap" ).on({
     mouseover: function() {
       $(this).css("display", "block");
  }, mouseleave: function() {
        $(this).css("display", "none");
  }
});

但它什么也没做,我也不明白为什么。

https://jsfiddle.net/yLpLfp9w/

有人可以帮帮我吗?

谢谢

【问题讨论】:

    标签: jquery html css mouseover mouseleave


    【解决方案1】:

    你的 jsfiddle 代码有问题,菜单 html 没有显示,只是一个黑条,所以这里有一个关于 jQuery 下拉菜单如何工作的 CSS 技巧的很好的例子: https://css-tricks.com/examples/SimplejQueryDropdowns/

    这里有代码: http://css-tricks.com/examples/SimplejQueryDropdowns.zip

    我将在这里用上面的代码创建一个小提琴:

    $(function(){
    
        $("ul.dropdown li").hover(function(){
        
            $(this).addClass("hover");
            $('ul:first',this).css('visibility', 'visible');
        
        }, function(){
        
            $(this).removeClass("hover");
            $('ul:first',this).css('visibility', 'hidden');
        
        });
        
        $("ul.dropdown li ul li:has(ul)").find("a:first").append(" &raquo; ");
    
    });
    * 									{ margin: 0; padding: 0; }
    body								{ font: 14px Helvetica, Sans-Serif; } 
    #page-wrap							{ width: 800px; margin: 25px auto; } 
    a									{ text-decoration: none; }
    ul									{ list-style: none; }
    p                                   { margin: 15px 0; }
    
    /* 
    	LEVEL ONE
    */
    ul.dropdown                         { position: relative; }
    ul.dropdown li                      { font-weight: bold; float: left; zoom: 1; background: #ccc; }
    ul.dropdown a:hover		            { color: #000; }
    ul.dropdown a:active                { color: #ffa500; }
    ul.dropdown li a                    { display: block; padding: 4px 8px; border-right: 1px solid #333;
    	 								  color: #222; }
    ul.dropdown li:last-child a         { border-right: none; } /* Doesn't work in IE */
    ul.dropdown li.hover,
    ul.dropdown li:hover                { background: #F3D673; color: black; position: relative; }
    ul.dropdown li.hover a              { color: black; }
    
    
    /* 
    	LEVEL TWO
    */
    ul.dropdown ul 						{ width: 220px; visibility: hidden; position: absolute; top: 100%; left: 0; }
    ul.dropdown ul li 					{ font-weight: normal; background: #f6f6f6; color: #000; 
    									  border-bottom: 1px solid #ccc; float: none; }
    									  
                                        /* IE 6 & 7 Needs Inline Block */
    ul.dropdown ul li a					{ border-right: none; width: 100%; display: inline-block; } 
    
    /* 
    	LEVEL THREE
    */
    ul.dropdown ul ul 					{ left: 100%; top: 0; }
    ul.dropdown li:hover > ul 			{ visibility: visible; }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    	
    	<title>Simple jQuery Dropdowns</title>
    	
    	<link rel="stylesheet" href="css/style.css" type="text/css" media="screen, projection"/>
    	<!--[if lte IE 7]>
            <link rel="stylesheet" type="text/css" href="css/ie.css" media="screen" />
        <![endif]-->
    			
    	<script type="text/javascript" src="js/jquery-1.3.1.min.js"></script>	
    	<script type="text/javascript" language="javascript" src="js/jquery.dropdownPlain.js"></script>
    </head>
    
    <body>
    
    	<div id="page-wrap">
    	
            <img src="images/title.png" alt="Simple jQuery Dropdowns" />
    	   	   
            <p><a href="index-hoverIntent.html">With hoverIntent</a> | <a href="http://css-tricks.com/simple-jquery-dropdowns/">Article</a> | <a href="http://css-tricks.com/examples/SimplejQueryDropdowns.zip">Download</a></p>     
    
            <ul class="dropdown">
            	<li><a href="#">For Facilities</a>
            		<ul class="sub_menu">
            			 <li><a href="#">Artificial Turf</a></li>
            			 <li>
            				<a href="#">Batting Cages</a>
            				<ul>
            					<li><a href="#">Indoor</a></li>
            					<li><a href="#">Outdoor</a></li>
            				</ul>
            			 </li>
            			 <li><a href="#">Benches &amp; Bleachers</a></li>
            			 <li><a href="#">Communication Devices</a></li>
            			 <li><a href="#">Dugouts</a></li>
            			 <li><a href="#">Fencing &amp; Windscreen</a></li>
            			 <li><a href="#">Floor Protectors</a></li>
            			 <li><a href="#">Foul Poles</a></li>
            			 <li><a href="#">Netting</a></li>
            			 <li><a href="#">Outdoor Furniture &amp; Storage</a></li>
            			 <li><a href="#">Outdoor Signs</a></li>
            			 <li><a href="#">Padding</a></li>
            			 <li><a href="#">Scoreboards</a></li>
            			 <li><a href="#">Shade Structures</a></li>
            			 <li><a href="#"> - VIEW ALL - </a></li>
            		</ul>
            	</li>
            	<li><a href="#">Field Maintenance</a>
            		<ul class="sub_menu">
            			<li><a href="#">All-in-One Team Cart</a></li>
            			<li><a href="#">Air &amp; Electrical Reels</a></li>
            			 <li><a href="#">Field Drags</a></li>
            			 <li>
            				<a href="#">Field Marking Equipment</a>
            				<ul>
            					<li><a href="#">Batter's Box Templates</a></li>
            					<li><a href="#">Dryline Markers</a></li>
            					<li><a href="#">Field Paint</a></li>
            					<li><a href="#">Field Sprayers</a></li>
            					<li><a href="#">Stencils</a></li>
            				</ul>
            			 </li>
            			 <li>
            				<a href="#">Field Tarps</a>
            				<ul>
            					<li><a href="#">Area Tarps</a></li>
            					<li><a href="#">Growth Covers / Protectors</a></li>
            					<li><a href="#">Infield Tarps</a></li>
            					<li><a href="#">Tarp Accessories</a></li>
            				</ul>
            			 </li>
            			 <li><a href="#">Hand Tools</a></li>
            			 <li>
            				<a href="#">Irrigation, Hoses, Nozzles</a>
            				<ul>
            					<li><a href="#">Hoses &amp; Hose Reels</a></li>
            					<li><a href="#">Irrigation</a></li>
            					<li><a href="#">Nozzles</a></li>
            				</ul>
            			 </li>
            			 <li><a href="#">Layout &amp; Measurement Tools</a></li>
            			 <li><a href="#">Moisture Removal</a></li>
            			 <li><a href="#">Mound &amp; Home Plate Fortification</a></li>
            			 <li><a href="#">Mowers &amp; Stripers</a></li>
            			 <li><a href="#">Soil &amp; Enviornmental Management</a></li>
            			 <li><a href="#">Soil Amendments</a></li>
            			 <li><a href="#">Spreaders &amp; Sweepers</a></li>
            			 <li><a href="#"> - VIEW ALL - </a></li>
            		</ul>
            	</li>
            	<li><a href="#">Game-Practice Equipment</a>
            		<ul class="sub_menu">
            			 <li>
            				<a href="#">Baseball - Softball</a>
            				<ul>
            					<li><a href="#">Base Accessories</a></li>
            					<li><a href="#">Bases &amp; Home Plates</a></li>
            					<li><a href="#">Game Accessories</a></li>
            					<li><a href="#">Pitching Rubbers</a></li>
            				</ul>
            			 </li>
            			 <li>
            				<a href="#">Batting Practice Equipment</a>
            				<ul>
            					<li><a href="#">Backstops</a></li>
            					<li><a href="#">Infield Screens</a></li>
            					<li><a href="#">Jugs Pitching Machines</a></li>
            					<li><a href="#">Turf Mats</a></li>
            					<li><a href="#">Turf Protectors</a></li>
            					<li><a href="#">Replacement Accessories</a></li>
            				</ul>
            			 </li>
            			 <li>
            				<a href="#">Batting Cages</a>
            				<ul>
            					<li><a href="#">Indoor</a></li>
            					<li><a href="#">Outdoor</a></li>
            				</ul>
            			 </li>
            			 <li>
            				<a href="#">Portable Mounds</a>
            				<ul>
            					<li><a href="#">Batting Practice Mounds</a></li>
            					<li><a href="#">Game Mounds</a></li>
            					<li><a href="#">Practice Mounds</a></li>
            				</ul>
            			 </li>
            			 <li>
            				<a href="#">Football</a>
            				<ul>
            					<li><a href="#">First Down Markers</a></li>
            					<li><a href="#">Football Accessories</a></li>
            					<li><a href="#">Football Goalposts</a></li>
            				</ul>
            			 </li>
            			 <li>
            				<a href="#">Soccer</a>
            				<ul>
            					<li><a href="#">Soccer Goals</a></li>
            					<li><a href="#">Soccer Accessories</a></li>
            				</ul>
            			 </li>
            			 <li><a href="#"> - VIEW ALL - </a></li>
            		</ul>
            	</li>
            	<li><a href="#">Training &amp; Conditioning</a>
            		<ul class="sub_menu">
            			 <li><a href="#">Ladders &amp; Sticks</a></li>
            			 <li><a href="#">Hurdles</a></li>
            			 <li><a href="#">Training Accessories</a></li>
            			 <li><a href="#">Smart-Cart Training System</a></li>
            			 <li><a href="#">Smart-Hurdle Collection</a></li>
            			 <li><a href="#"> - VIEW ALL - </a></li>
            		</ul>
            	</li>
            	<li><a href="#">Books-Videos</a>
            		<ul class="sub_menu">
            			 <li><a href="#">Field Design &amp; Maintenance</a></li>
            			 <li><a href="#">Turf Management</a></li>
            			 <li><a href="#">Training</a></li>
            			 <li><a href="#"> - VIEW ALL - </a></li>
            		</ul>
            	</li>
            </ul>
    		
    	</div>
    
    </body>
    
    </html>

    上面的代码在 ul 的顶层添加了一个名为“hover”的类,这样你就可以使用 css 来保持第一个子菜单打开。悬停在子菜单 ul 上然后将其可见性更改为“可见”,同时将类“悬停”在顶级 ul 上。

    您可以添加 hoverIntent 来稍微延迟打开菜单,停止意外打开菜单,但这不是必需的。

    在您的情况下,请确保仅当您将鼠标悬停在该元素及其子元素之外时才删除顶级 ul 的“悬停”类(再次,请参阅我发布的示例)。

    【讨论】:

    • 感谢您回复 Nathaniel Flick;首先....你确定我的jsfiddle不起作用吗?我的同事检查了他的电脑,看起来不错。 jsfiddle.net/yLpLfp9w/1 我认为您的示例对于我想要实现的目标来说太复杂了,如果您看一下,问题是没有显示子菜单,已经完成,我无法实现的是保持可见我所在的框显示它们
    • 我在使用最新 FF 的 Mac 上,除了黑条之外什么都看不到,没有链接显示。我的解释讨论了如何保持悬停,确保选择 ul 元素,并且只有在离开主 ul 时才鼠标移出。一旦我可以运行它,我就可以用你的实际代码做更多的事情。
    • 给我一点,我看到你没有在你的小提琴中运行 jQuery,我正在添加它,然后会更新我的答案以满足你的需要。
    • 我已经在这里工作了:codepen.io/anon/pen/bBQbRo 减去我的工作建议。
    • aha 是的,这个 codepen 和我的 jsfiddle 一样,但是同样的问题,当我离开菜单项时 submenuWrap div 消失了。我知道这是因为 mouseleave 但我不知道如何以任何其他方式做到这一点
    猜你喜欢
    • 1970-01-01
    • 2015-01-29
    • 2011-11-26
    • 2013-03-14
    • 1970-01-01
    • 2012-12-16
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多