Member 14047627 Ответов: 1

Как сделать так, чтобы меню гамбургера закрывалось при щелчке по ссылке?


Итак, я часами искал в Интернете решение этой проблемы, я попробовал по крайней мере 20 различных вещей, и ни одна из них не сработала. Мне нужно знать, как сделать так, чтобы мое меню гамбургеров закрывалось при нажатии на ссылку внутри меню.

Мой HTML:
<!-- Hamburger Menu (for mobile) -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

      <div class="topnav" id="myTopnav" style="position:absolute;top:0px;">
        <a href="#" class="active" class="nav-item" id="fn">#</a>
        <a href="#" class="nav-item">#</a>
        <a href="#" class="nav-item">#</a>
        <a href="#" class="nav-item">#</a>
        <a href="#" class="nav-item">#</a>
        <a href="#" class="nav-item">#</a>
        <a href="#" class="nav-item">#</a>
        <a href="#" class="nav-item">#</a>
        <a href="javascript:void(0);" class="icon" onclick="myFunction()">
    
  </a>
    </div>


Мой CSS:

/* Makes Hamburger Heading Visible On Mobile Only */
  .topnav .icon, #myTopnav, .active {
    visibility: visible;
    z-index: 10000;
  }

/* Width Of Hamburger Navigation */
  .topnav {
    width: 100%;
  }

/* Removes Desktop Heading & Navigation */
  .nav, .top-heading {
    display: none;
  }

/* Header Color */
  #fn {
    color: #ffffff;
    font-size: 32px;
  }

  /* Background And Overflow Of Hamburger Navigation */
  .topnav {
    background: linear-gradient(to top, #ff6699 0%, #ff9999 100%);
    overflow: hidden;
  }

/* Link Style Inside Hamburger Navigation */
  .topnav a {
    float: left;
    display: block;
    color: #ffffff;
    text-align: center;
    padding: 26px 16px;
    text-decoration: none;
    font-family: 'Alegreya Sans SC', sans-serif;
    font-size: 28px;
  }

/* Link Properties On Hover */
  .topnav a:hover {
    background-color: #ffffff;
    color: black;
  }

/* Active Highlight Of Current Page */
  .active {
    background: linear-gradient(to top, #ff6699 0%, #ff9999 100%);
    color: #ffffff;
  }

/* Closed Hamburger Properties */
  .topnav a:not(:first-child) {display: none;}
  .topnav a.icon {
    float: right;
    display: block;
}

/* Open Hamburger Properties */
.topnav.responsive {position: relative;}
 .topnav.responsive a.icon {
   position: absolute;
   right: 0%;
   top: 0;
 }

 /* Open Link Properties */
 .topnav.responsive a {
   float: none;
   display: block;
   text-align: left;
 }
}


Мой Javascript (это то, что позволяет меню открываться, если есть способ для меня сохранить этот функционал, а также иметь возможность закрыть его при нажатии на ссылку было бы здорово):

function myFunction() {
    var x = document.getElementById("myTopnav");
    if (x.className === "topnav") {
        x.className += " responsive";
    } else {
        x.className = "topnav";
    }
}


Что я уже пробовал:

Я пробовал разные Javascript-коды, но ни один из них не работал с тем кодом, который у меня уже есть.

Mohibur Rashid

Что значит закрыть? Закрыть окно? Если да, то рассматривали ли вы возможность перенаправления

1 Ответов

Рейтинг:
0

W∴ Balboos, GHB

Я могу предложить вам интересный и нетрадиционный ответ.

Создайте свое меню в виде открытого списка, который выглядит так, как вы хотите (ссылки и т. д.) в виде HTML-строки, хранящейся в переменной javaScript.

Сейчас
- для вашего открытого события установите значение innerHTML = ваша строковая переменная меню
- для события close установите innerHTML в пустую строку или что угодно другое вместо меню.

Это не "типичное" решение, но если вы понимаете, куда я вас веду, у вас будет очень мощный инструмент, добавленный в ваш "арсенал", и если вы еще не начали его использовать, то ваша половина пути закончена с обучением использованию AJAX.


Richard Deeming

Это не будет особенно хорошо для производительности. И если вы не используете делегированные события, он будет уничтожать любые обработчики событий каждый раз, когда вы открываете или закрываете меню.

W∴ Balboos, GHB

Как уже отмечалось, нетрадиционные.

Поскольку он основан на интернете - сколько потерь действительно будет наблюдаться в производительности?   Я бы так не поступила. Похоже, что активность элементов основана на ссылках, поэтому никакие события (если вы не считаете щелчок по ссылке) не находятся под угрозой. Это действительно, в своем роде, иллюстрирует мою силу и гамартию: Aut inveniam viam aut faciam

И в конечном счете - это будет, по крайней мере, работать.