сделать меню гамбургера исчезающим при нажатии на меню

У меня есть бургер-меню JS, которое появляется, если ширина экрана становится меньше 860 пикселей. Начиная с этой ширины, исходное меню превращается в сложенный макет, который выдвигается при нажатии значка меню гамбургера. Включение и выключение работает нормально при нажатии на значок меню гамбургера, но я хотел бы, чтобы он автоматически исчезал, когда пользователь щелкает ссылку в меню. Есть ли способ сделать это?

Это соответствующий HTML:

<header class="scroll-effect">

        <!-- Navigation bar -->

        <div class="navigation">

            <div class="container">

                <div class="row>">

                    <div class="six.columns">
                        <a href="index.html">
                            <img src="images/logo-nav.png" alt="BackupChecks Logo">
                        </a>
                    </div>

                    <div class="six.columns">
                    <nav>
                        <a href="#customer-portal" class="scroll-button">Customer Portal</a>
                        <a href="#service-desk" class="scroll-button">Service Desk</a>
                        <a href="#pricing" class="scroll-button">Pricing</a>
                        <a href="#contact" class="scroll-button">Contact</a>
                    </nav>
                    </div>

                </div>

            </div>

        </div>


        <!-- End of navigation bar -->


        <div class="header-contents">

        <h1>
            <img src="images/logo.png" alt="BackupChecks logo" class="animated bounceInDown">
        </h1>

        <h2 class="animated bounceInDown">
            The backup service desk for Asigra
        </h2>

        <div class="button-box animated fadeInUp">
            <a href="#learn-more" class="scroll-button button-green">
            Learn more
            </a>

            <a href="#pricing" class="scroll-button button-white-outline">
            Buy it now
            </a>

        </div>

        </div>

    </header>

    <!-- JS burger menu -->
        <img src="images/trigger.png" alt="Menu icon" class="trigger">
    <!-- </a> -->

Вот соответствующий CSS:

.navigation {
    background: rgba(255,255,255,1);
    height: 70px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    position: fixed;
    width: 100%;
    top: 0;
    z-index: +20;
    border-bottom: solid 1px #D9D9D9;
}

header.container {
    margin: 0 auto;
    max-width: 1000px;
}

.navigation img {
    vertical-align: middle;
    float: left;
    line-height: 70px;
    text-align: left;
}

nav {
    float: right;
    line-height: 70px;
}

nav a {
    color: #3E4750;
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 700;
    text-decoration: none;
    padding: 0 0 0 40px;
    display: inline-block;
    text-decoration: none;
    transition: color ease .4s;
}

nav a:hover {
    color: #66CC99;
}

@media screen and (max-width: 860px) {

nav {
    margin-top: 70px;
    background: #ffffff; 
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);

}

nav a {
        display: block;
        text-align: center;
        padding: 0 30px 0 30px;
        border-bottom: solid 1px #D9D9D9;
    }

nav {
     display: none;
}

img.trigger {
    display: block;
    position: fixed;
    top: 0px;
    right: 0px;
    }

}

И это javascript, который у меня есть:

$("img.trigger").on("click", function(){

    $("nav").slideToggle("slow");

});

person Lisa    schedule 28.05.2015    source источник


Ответы (1)


Просто добавьте ссылки в качестве еще одного триггера для slideToggle, например, чтобы они также переключались при нажатии любого nav a.

$("img.trigger, nav a").on("click", function(){

    $("nav").slideToggle("slow");

});
person Rob Schmuecker    schedule 28.05.2015
comment
Проблема в том, что он также заставляет навигацию исчезать, когда она находится в нормальном состоянии (меню без гамбургеров) на экране размером более 860 пикселей. - person Lisa; 28.05.2015
comment
Затем вы можете внести соответствующие изменения, добавив класс в корневой элемент вашего документа или аналогично, а затем поймать ссылки только тогда, когда этот класс активен. Однако для этого вам нужно будет использовать делегированные события. - person Rob Schmuecker; 28.05.2015
comment
Я не знаю, как это сделать, я новичок в JS, не могли бы вы объяснить, как это сделать на примере моего кода, пожалуйста? - person Lisa; 28.05.2015
comment
Может ли измениться размер экрана? Если это так, вам нужно будет сделать, как я сказал в своем первом комментарии выше, в качестве альтернативы вы можете просто проверить pageLoad $("img.trigger").on("click", function () { $("nav").slideToggle("slow"); }); if ($(document).width() < 860) { $("nav a").on("click", function () { $("nav").slideToggle("slow"); }); }, например. jsfiddle.net/z9zkrk3s - person Rob Schmuecker; 28.05.2015
comment
Спасибо за вашу помощь. Размер экрана может измениться. Поэтому я создал совершенно отдельное меню для экранов меньшего размера, которое работает с первой опцией JS и не влияет на основную навигацию на экранах большего размера. - person Lisa; 29.05.2015