Показать сообщение отдельно
  #1 (permalink)  
Старый 17.04.2021, 18:15
Интересующийся
Отправить личное сообщение для lev90 Посмотреть профиль Найти все сообщения от lev90
 
Регистрация: 31.01.2021
Сообщений: 10

Скрыть список по клику вне его
Добрый вечер!

Я новичок в javascript. Есть рабочий скрипт выпадающих списков. Всем хорош, кроме того, что не закрывает предыдущий список, после клика по соседнему или клика вне списков.
Подскажите пожалуйста, как можно сюда добавить закрытие списков по клику вне списка или по следующему списку.

Заранее всем спасибо!

const selectedAll = document.querySelectorAll(".selected");

selectedAll.forEach(selected => {
const optionsContainer = selected.previousElementSibling;
const optionsList = optionsContainer.querySelectorAll(".option");

 selected.addEventListener("click", () => {
   if (optionsContainer.classList.contains("active")) {
       optionsContainer.classList.remove("active");
        } else {
      let currentActive = document.querySelector("options-container.active");

 if (currentActive) {
    currentActive.classList.remove("active");
   }
    optionsContainer.classList.add("active");
   }
})

   optionsList.forEach(o => {
     o.addEventListener("click", () => {
       selected.innerHTML = o.querySelector("label").innerHTML;
       optionsContainer.classList.remove("active");
     });
   });
})


<div class="select-box">
   <div class="options-container">
      <div class="option">
         <label for="automobiles2" class="button_cost">
              <input type="radio" class="radio" value="" id="automobiles2" name="category2" />
               All</label>
      </div>

      <div class="option">
         <label for="film2" class="button_cost">
            <input type="radio" class="radio" value=".iii" id="film2" name="category2" /> 
             Film Animation</label>
      </div>

      <div class="option">
         <label for="science2" class="button_cost">
            <input type="radio" class="radio" value=".uuu" id="science2" name="category2" />
             Science Technology</label>
      </div>

   <div class="selected">
      Select Video Category
   </div>
</div>


.select-box {
  position: relative;
  display: flex;
  width: 400px;
  flex-direction: column;
}

.select-box .options-container {
  background: #2f3640;
  color: #f5f6fa;
  max-height: 0;
  width: 100%;
  opacity: 0;
  transition: all 0.4s;
  border-radius: 8px;
  overflow: hidden;

  order: 1;

  position: absolute;
  z-index: 100;
}

.selected {
  background: #2f3640;
  border-radius: 8px;
  margin-bottom: 8px;
  color: #f5f6fa;
  position: relative;

  order: 0;
}

.selected::after {
  content: "";
  background: url("img/arrow-down.svg");
  background-size: contain;
  background-repeat: no-repeat;

  position: absolute;
  height: 100%;
  width: 32px;
  right: 10px;
  top: 5px;

  transition: all 0.4s;
}

.select-box .options-container.active {
  max-height: 240px;
  opacity: 1;
  overflow-y: scroll;
  margin-top: 104px;
}

.select-box .options-container.active + .selected::after {
  transform: rotateX(180deg);
  top: -6px;
}

.select-box .options-container::-webkit-scrollbar {
  width: 8px;
  background: #0d141f;
  border-radius: 0 8px 8px 0;
}

.select-box .options-container::-webkit-scrollbar-thumb {
  background: #525861;
  border-radius: 0 8px 8px 0;
}

.select-box .option,
.selected {
  padding: 12px 24px;
  cursor: pointer;
}

.select-box .option:hover {
  background: #414b57;
}

.select-box label {
  cursor: pointer;
}

.select-box .option .radio {
  display: none;
}

/* Searchbox */

.search-box input {
  width: 100%;
  padding: 12px 16px;
  font-family: "Roboto", sans-serif;
  font-size: 16px;
  position: absolute;
  border-radius: 8px 8px 0 0;
  z-index: 100;
  border: 8px solid #2f3640;

  opacity: 0;
  pointer-events: none;
  transition: all 0.4s;
}

.search-box input:focus {
  outline: none;
}

.select-box .options-container.active ~ .search-box input {
  opacity: 1;
  pointer-events: auto;
}

Последний раз редактировалось lev90, 17.04.2021 в 19:21. Причина: Добавил CSS
Ответить с цитированием