当点击屏幕上的任何地方时,jQuery隐藏引导幻灯片菜单

时间:2016-08-04 02:01:17

标签: javascript jquery html css twitter-bootstrap

在这里做了一个小提琴:
https://jsfiddle.net/r94dq2e4/

当点击导航栏切换按钮时,我正在使用Twitter bootstap版本3,并在左侧菜单中显示幻灯片。

这是我使用的jQuery代码:

// Nav
(function ($) {
    'use strict';

    // Toggle classes in body for syncing sliding animation with other elements
    $('#bs-example-navbar-collapse-2')
        .on('show.bs.collapse', function (e) {
            $('body').addClass('menu-slider');
        })
        .on('shown.bs.collapse', function (e) {
            $('body').addClass('in');
        })
        .on('hide.bs.collapse', function (e) {
            $('body').removeClass('menu-slider');
        })
        .on('hidden.bs.collapse', function (e) {
            $('body').removeClass('in');
        });

})(jQuery);

这很好用,只需单击导航栏切换按钮,菜单就会滑入,再次单击时,菜单会滑出。我希望以这样的方式增强此功能:当用户点击页面上的任何位置(菜单本身除外)时,菜单会滑出。

这是我的菜单HTML:

                                                                                                   切换导航                                                                                                                                                      菜单                                                              

                       <div class="navbar-collapse collapse" id="bs-example-navbar-collapse-2">    
                           <ul class="nav navbar-nav">
                                <li class="dropdown">   
                                    <a class="dropdown-toggle" data-toggle="dropdown" href="#">Treatments<b class="caret"></b></a>
                                    <ul class="dropdown-menu">
                                        <li><a href="#">Menu Item</span></a></li>

                                    </ul>
                                </li>
                                <li><a href="#">About Us</a></li> 
                                <li><a href="#">Meet the team</a></li> 
                                <li><a href="#">See the results</a></li> 
                                <li><a href="#">Cost</a></li> 
                                <li><a href="#">Information</a></li> 
                            </ul><!-- end navbar-nav -->
                        </div><!-- end navbar-collapse -->
                    </nav><!-- end navbar -->

我已经开始使用以下jQuery代码来实现这一目标。但是我需要一些帮助,从这里开始:

/* Nav click outside hide navbar */
    $(document).click(function(e){

    // Check if click was triggered on or within #menu_content
        if( $(e.target).closest("#navbar2").length > 0 ) {
            return false;
        }
        // Otherwise
        // trigger your click function
         $('body').removeClass('menu-slider');
         $('body').removeClass('in');

    });

谢谢

1 个答案:

答案 0 :(得分:1)

您需要检查三件事,以确定是否应关闭菜单:

  1. 该元素不是导航本身(.nav
  2. 该元素不是导航容器(.navbar-cllapse
  3. 该元素不是导航的子元素(.parents('.nav')

  4. if (!$(e.target).hasClass('navbar-collapse') && !$(e.target).hasClass('nav') && $(e.target).parents('.nav').length == 0) {
        $('#bs-example-navbar-collapse-2').removeClass('in');
    }
    

    你可以在这个小提琴中尝试: https://jsfiddle.net/r94dq2e4/1/