Как сделать выпадающее меню по клику - PullRequest
0 голосов
/ 29 марта 2019

Я делаю выпадающее меню и хочу, чтобы оно открывалось, когда я нажимал на dropdown-btn, я смотрел учебник w3schools, почему он не работает?

Я скопировал весь учебникно я не знаю, почему он не работает

HTML (я изменил только идентификатор выпадающего меню и имя функции)

CSS (я изменил только размеры и цвета)

function myFunction() {
  document.getElementById("myDropdown").classList.toggle("show");
}

window.onclick = function(event) {
  if (!event.target.matches('.dropbtn')) {
    var dropdowns = document.getElementsByClassName("dropdown-content");
    var i;
    for (i = 0; i < dropdowns.length; i++) {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}
.dropdown {
  float: right;
  margin-right: 115px;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: #ff0000;
  font-family: inherit;
  margin: 0;
}

.dropbtn:hover {
  cursor: pointer;
}

.dropdown:hover {
  background-color: #ff7b7b;
  text-decoration: none;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #ff0000 !important;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
  opacity: 0;
  -webkit-transition: opacity .3s ease-in;
  -moz-transition: opacity .3s ease-in;
  -o-transition: opacity .3s ease-in;
  transition: opacity .3 ease-in;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 14px 16px;
  text-decoration: none;
  display: block;
}

.dropdown-content a:hover {
  background-color: #ff7b7b;
}

.show {
  display: block;
  z-index: 11;
}
<div class="dropdown">
  <button class="dropbtn" onclick="myFunction()"><li class="fa fa-bars fa-2x"></li></button>
  <div class="dropdown-content" id="myDropdown">
    <a href="signup.php" style="color: white;">Signup</a>
    <a href="#" style="color: white;">Info</a>
    <a href="#" style="color: white;">Last news</a>
  </div>
</div>

Если я нажму на раскрывающийся список, то btn не будет работать

Ответы [ 3 ]

2 голосов
/ 30 марта 2019

Cosider решение детали / резюме . Гораздо меньше кода и уже есть встроенная функция выпадающего меню:

<details><summary>Items</summary>
<div onclick="">Item 1</div>
<div onclick="">Item 2</div>
<div onclick="">Item 3</div>
<div onclick="">Item 4</div>
</details>

Примечание: поддерживается всеми браузерами, кроме Edge.

1 голос
/ 30 марта 2019

Я просто обновляю ваш код с небольшими изменениями, попробуйте это, я надеюсь, это поможет вам.Спасибо

function myFunction() {
  $('#myDropdown').toggleClass('show');
}

window.onclick = function(event) {
  if (!event.target.matches('.dropbtn')) {
    var dropdowns = document.getElementsByClassName("dropdown-content");
    var i;
    for (i = 0; i < dropdowns.length; i++) {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}
.dropdown {
  float: right;
  margin-right: 115px;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: #ff0000;
  font-family: inherit;
  margin: 0;
}

.dropbtn:hover {
  cursor: pointer;
}

.dropdown:hover {
  background-color: #ff7b7b;
  text-decoration: none;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #ff0000 !important;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
  opacity: 0;
  -webkit-transition: opacity .3s ease-in;
  -moz-transition: opacity .3s ease-in;
  -o-transition: opacity .3s ease-in;
  transition: opacity .3 ease-in;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 14px 16px;
  text-decoration: none;
  display: block;
}

.dropdown-content a:hover {
  background-color: #ff7b7b;
}

.show {
  display: block;
  opacity: 1;
  z-index: 11;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="dropdown">
  <button class="dropbtn" onclick="myFunction()"><li class="fa fa-bars fa-2x"></li></button>
  <div class="dropdown-content" id="myDropdown">
    <a href="signup.php" style="color: white;">Signup</a>
    <a href="#" style="color: white;">Info</a>
    <a href="#" style="color: white;">Last news</a>
  </div>
</div>
0 голосов
/ 30 марта 2019

Ваш код в порядке, просто удалите opacity:0 из этого css:

 .dropdown-content {
  display: none;
  position: absolute;
  background-color: #ff0000 !important;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
  opacity: 0; //<----------------------------------delete this
  -webkit-transition: opacity .3s ease-in;
  -moz-transition: opacity .3s ease-in;
  -o-transition: opacity .3s ease-in;
  transition: opacity .3 ease-in;
}

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

function myFunction() {
  document.getElementById("myDropdown").classList.toggle("show");
}

window.onclick = function(event) {
  if (!event.target.matches('.dropbtn')) {
    var dropdowns = document.getElementsByClassName("dropdown-content");
    var i;
    for (i = 0; i < dropdowns.length; i++) {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}
.dropdown {
  float: right;
  margin-right: 115px;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: #ff0000;
  font-family: inherit;
  margin: 0;
}

.dropbtn:hover {
  cursor: pointer;
}

.dropdown:hover {
  background-color: #ff7b7b;
  text-decoration: none;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #ff0000 !important;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
  -webkit-transition: opacity .3s ease-in;
  -moz-transition: opacity .3s ease-in;
  -o-transition: opacity .3s ease-in;
  transition: opacity .3 ease-in;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 14px 16px;
  text-decoration: none;
  display: block;
}

.dropdown-content a:hover {
  background-color: #ff7b7b;
}

.show {
  display: block;
  z-index: 11;
}
<div class="dropdown">
  <button class="dropbtn" onclick="myFunction()">Menu</button>
  <div class="dropdown-content" id="myDropdown">
    <a href="signup.php" style="color: white;">Signup</a>
    <a href="#" style="color: white;">Info</a>
    <a href="#" style="color: white;">Last news</a>
  </div>
</div>
...