javascript - jQuery 菜单 - 如何添加鼠标事件?

标签 javascript jquery html css drop-down-menu

我的目标是 - 在我的菜单上进行简单的鼠标悬停,当鼠标在子菜单中时保持 active,并在鼠标离开时触发 close() 函数主选项卡或子菜单。

我知道我需要一个事件处理程序来触发 close() 但我真的很感激我能得到的任何输入。

目前jquery重写父类'cbp-hrclosed''cpb-hropen'

这是我正在努力实现的一个例子: http://tympanus.net/codrops/2013/03/05/horizontal-drop-down-menu/

jQuery

var cbpHorizontalMenu = (function() {

    var hover = 1;

    var $listItems = $( '#cbp-hrmenu > ul > li' ),
        $menuItems = $listItems.children( 'a' ),
        $body = $( 'body' ),
        current = -1;

    function init() {
        $menuItems.on( 'click', open );

        $listItems.on( 'click', function( event ) { event.stopPropagation(); 
        hover=1;
        } );
    }

    function open( event ) {

        if( current !== -1) {
            $listItems.eq( current ).removeClass( 'cbp-hropen' ).addClass('cbp-hrclosed');
        }

        var $item = $( event.currentTarget ).parent( 'li' ),
            idx = $item.index();

        if( current === idx ) {
            $item.removeClass( 'cbp-hropen' ).addClass('cbp-hrclosed');
            current = -1;
        }
        else {
            $item.addClass( 'cbp-hropen' );
            $item.removeClass('cbp-hrclosed').addClass('cbp-hropen');
            current = idx;
            $body.off( 'click' ).on( 'click', close );
            $body.on( 'click', close );
        }

        return false;

    }

    function close( event ) {
        $listItems.eq( current ).removeClass( 'cbp-hropen' ).addClass('cbp-hrclosed');
        current = -1;
        }

    return { init : init };

})();

HTML

<?php echo'<div class="container">
        <div class="main">
            <nav id="cbp-hrmenu" class="cbp-hrmenu">
                <ul>
                    <!--            Tab           -->        
                    <li class="cbp-hrclosed">
                     <a href="#">Antique</a>
                        <div class="cbp-hrsub">
                            <div class="cbp-hrsub-inner">
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>
                                </div>
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>
                                </div>
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>

                                </div>
                            </div><!-- /cbp-hrsub-inner -->
                        </div><!-- /cbp-hrsub -->
                    </li>
                    <!--            Tab           -->                   
                    <li class="cbp-hrclosed">
                        <a href="#">Modern</a>
                        <div class="cbp-hrsub">
                            <div class="cbp-hrsub-inner">
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>
                                </div>
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>
                                </div>
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>

                                </div>
                            </div><!-- /cbp-hrsub-inner -->
                        </div><!-- /cbp-hrsub -->
                    </li>
                    <!--            Tab           -->                   
                    <li class="cbp-hrclosed">
                        <a href="#">Contemporary</a>
                        <div class="cbp-hrsub">
                            <div class="cbp-hrsub-inner">
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>
                                </div>
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>
                                </div>
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>

                                </div>
                            </div><!-- /cbp-hrsub-inner -->
                        </div><!-- /cbp-hrsub -->
                    </li>
                    <!--            Tab           -->                   
                    <li class="cbp-hrclosed">
                        <a href="#">Exhibitions</a>
                        <div class="cbp-hrsub">
                            <div class="cbp-hrsub-inner">
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>
                                </div>
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>
                                </div>
                                <div>
                                    <h4>Heading</h4>
                                    <ul>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>
                                        <li><a href="#">Selection</a></li>                                      
                                        <li><a href="#">Selection</a></li>  
                                    </ul>

                                </div>
                            </div><!-- /cbp-hrsub-inner -->
                        </div><!-- /cbp-hrsub -->
                    </li>
                    </ul>
            </nav>
        </div>
    </div>
';?>

CSS

 @keyframes slideDown
{
from {top:0em;}
to {top:22.1em;}
}

@-webkit-keyframes slideDown /*Safari and Chrome*/
{
from {top:0em;}
to {top:22.1em;}
}

@keyframes slideUp
{
from {top:22.1em;
background-color:#cfcfcf;
}
to {top:0em;
background-color:#575757;
}
}

@-webkit-keyframes slideUp /*Safari and Chrome*/
{
from {top:22.1em;}
to {top:0em;}
}

.cbp-hrmenu {
    width: 100%;
    border-bottom: 4px solid #ECECEC;
}
.container{
background-color:#eee;
}

/* general ul style */
.cbp-hrmenu {
width: 100%;
/* margin-top: 2em; */
border-bottom: 6px solid #D6D6D6;
padding-top: 20px;
/* font-size: 10px; */
}

/* first level ul style */
.cbp-hrmenu > ul,
.cbp-hrmenu .cbp-hrsub-inner {
    width: 90%;
    max-width: 90em;
    margin: 0 auto;
    padding: 0 1.875em;
}

.cbp-hrmenu > ul > li {
    display: inline-block;
}

.cbp-hrmenu > ul > li > a {
    font-weight: 300;
    padding: 1em 2em;
    color: #999;
    display: inline-block;
    font-size:160%;
    font-family:Francois One;
}


.cbp-hrmenu > ul > li > a:hover {
    color: #4D4D4D;
}

.cbp-hrmenu > ul > li.cbp-hropen a,
.cbp-hrmenu > ul > li.cbp-hropen > a:hover {
    color: #fff;
    background: #D6D6D6;
    font-family:Francois One;
    font-weight:300;
}

/* sub-menu */
.cbp-hrmenu .cbp-hrsub {
    display: block;
    position: absolute;
    background-color: #cfcfcf;
    width: 100%;
    left: 0;
    z-index:-1;
    top:0;

    animation:slideUp 500ms ;
    -webkit-animation:slideUp 500ms ease-in-out; /*Safari and Chrome*/

    animation-timing-function: ease;    
    -webkit-animation-timing-function: ease;

    top:0;
}

.cbp-hropen .cbp-hrsub {
    display: block;

    animation:slideDown 1000ms ;
    -webkit-animation:slideDown 1000ms ease-in-out; /*Safari and Chrome*/

    animation-timing-function: ease;    
    -webkit-animation-timing-function: ease;        


    z-index:-1000;
    position:absolute;
    top:22em;
}

html.js body#home.big div#header div div.container div.main nav#cbp-hrmenu.cbp-hrmenu ul li.cbp-hropen div.cbp-hrsub{
    top:22em;
    display:block;
    background-color:#d6d6d6;
}



.cbp-hrmenu .cbp-hrsub-inner > div {
    width: 33%;
    float: left;
    padding: 0 2em 0;
}

.cbp-hrmenu .cbp-hrsub-inner:before,
.cbp-hrmenu .cbp-hrsub-inner:after {
    content: " ";
    display: table;
}

.cbp-hrmenu .cbp-hrsub-inner:after {
    clear: both;
}

.cbp-hrmenu .cbp-hrsub-inner > div a {
    line-height: 2em;
    color: #fff;
    font-family: Francois One;
    font-weight: 300;
    }

.cbp-hrsub h4 {
    padding: 2em 0 0.6em;
    margin: 0;
    font-size: 160%;
    font-weight: 300;
}

/* Examples for media queries 

@media screen and (max-width: 52.75em) { 

    .cbp-hrmenu {
        font-size: 80%;
    }

}
*/


@media screen and (max-width: 43em) { 
    .cbp-hrmenu .cbp-hrsub {
    display: block;
    }

    .cbp-hrmenu {
        font-size: 120%;
        border: none;
    }

    .cbp-hrmenu > ul,
    .cbp-hrmenu .cbp-hrsub-inner {
        width: 100%;
        padding: 0;
    }

    .cbp-hrmenu .cbp-hrsub-inner {
        padding: 0 2em;
        font-size: 75%;
    }

    .cbp-hrmenu > ul > li {
        display: block;
        border-bottom: 4px solid #ECECEC;
    }

    .cbp-hrmenu > ul > li > a { 
        display: block;
        padding: 1em 3em;
    }

    .cbp-hrmenu .cbp-hrsub { 
        position: relative;
    }

    .cbp-hrsub h4 {
        padding-top: 0.6em;
    }

}

@media screen and (max-width: 43em) { 
    .cbp-hrmenu .cbp-hrsub-inner > div {
        width: 100%;
        float: none;
        padding: 0 2em;
    }
    .cbp-hropen .cbp-hrsub {
    padding-bottom: 0em;
    animation:inital;
    -webkit-animation:inital; /*Safari and Chrome*/
    z-index:inital;
    position:inital;
    }

    div .cbp-hrmenu .cbp-hrsub {
    position: static;
    }

    #cbp-hrmenu > ul > li:nth-child(1) > div,
    #cbp-hrmenu > ul > li:nth-child(2) > div,
    #cbp-hrmenu > ul > li:nth-child(3) > div,
    #cbp-hrmenu > ul > li:nth-child(4) > div
    {display:none;}

        #cbp-hrmenu > ul > li.cbp-hropen > div{display:block;}
    }

最佳答案

如果你使用纯 css 来完成这个菜单会容易得多。

例如,如果您使用无序列表 - 使用以下 css,您可以实现您正在做的事情,但使用 jquery 会减少很多麻烦。

HTML

<ul><li>Home</li>
  <li>
    Antique
    <ul>
      <li>Heading</li>
      <li>Heading</li>
      <li>Heading</li>
    </ul>
  </li>
  <li>
    Modern
  <ul>
      <li>Heading</li>
      <li>Heading</li>
      <li>Heading</li>
    </ul>
  </li>
  <li>
    Contemporary
  <ul>
      <li>Heading</li>
      <li>Heading</li>
      <li>Heading</li>
    </ul>
  </li>
  <li>
    Exhibitions
  <ul>
      <li>Heading</li>
      <li>Heading</li>
      <li>Heading</li>
    </ul>
  </li>
</ul>

CSS

body {
  font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif;
  padding: 20px 50px 150px;
  font-size: 13px;
  text-align: center;
  background: #E3CAA1;
}

ul {
  text-align: left;
  display: inline;
  margin: 0;
  padding: 15px 4px 17px 0;
  list-style: none;
  -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.15);
  -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.15);
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.15);
}
ul li {
  font: bold 12px/18px sans-serif;
  display: inline-block;
  margin-right: -4px;
  position: relative;
  padding: 15px 20px;
  background: #fff;
  cursor: pointer;
  -webkit-transition: all 0.2s;
  -moz-transition: all 0.2s;
  -ms-transition: all 0.2s;
  -o-transition: all 0.2s;
  transition: all 0.2s;
}
ul li:hover {
  background: #555;
  color: #fff;
}
ul li ul {
  padding: 0;
  position: absolute;
  top: 48px;
  left: 0;
  width: 150px;
  -webkit-box-shadow: none;
  -moz-box-shadow: none;
  box-shadow: none;
  display: none;
  opacity: 0;
  visibility: hidden;
  -webkit-transiton: opacity 0.2s;
  -moz-transition: opacity 0.2s;
  -ms-transition: opacity 0.2s;
  -o-transition: opacity 0.2s;
  -transition: opacity 0.2s;
}
ul li ul li { 
  background: #555; 
  display: block; 
  color: #fff;
  text-shadow: 0 -1px 0 #000;
}
ul li ul li:hover { background: #666; }
ul li:hover ul {
  display: block;
  opacity: 1;
  visibility: visible;
}

我希望我有所帮助,这是我在我的元素中使用的 css 菜单类型,它很容易根据不同的需要设置样式和操作。

这是一个工作示例:http://cssdeck.com/labs/tanipt0r

关于javascript - jQuery 菜单 - 如何添加鼠标事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24095109/

相关文章:

javascript - PHP 回显 jQuery AJAX 请求

jquery - 如何添加淡入和淡出功能以在悬停功能上播放?

image - 你更喜欢哪个?用于图形和图表的 SVG、HTML5 或 regen'd-PNG?

javascript - 更改代码以在 javascript 中获取竖线

javascript - Three.js:导入和使用 3d 模型

javascript - 如何在angularjs中使用带有ng-repeat的动画

javascript - JQuery 追加行为

javascript - 在 jQuery 隐藏/显示产生意外结果后向元素添加不显示的类

javascript - 让 css 对象在悬停和单击时发生变化

javascript - Log4JavaScript服务器端接收