Как я могу сделать так, чтобы за один раз можно было видеть только одну панель accoridion? - PullRequest
0 голосов
/ 18 мая 2018

Я знаю, что здесь есть несколько таких вопросов, но я пробовал, и, к сожалению, ни один из них не работает.

Любая помощь будет принята с благодарностью!Все, что я хочу - это иметь возможность сворачивать другие панели при открытии другой.

Вот мой текущий сценарий js:

var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    this.classList.toggle("active1");
    var panel = this.nextElementSibling;
    if (panel.style.maxHeight){
      panel.style.maxHeight = null;
    } else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    }
  });
}

1 Ответ

0 голосов
/ 18 мая 2018

Без дополнительных подробностей я не могу быть уверен, что это сработает, но включение цикла через все ваши аккордеоны и выполнение противоположного способа их открытия должно сработать.Если вам нужна дополнительная помощь, понадобится пример CSS и HTML.

var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    for (i = 0; i < acc.length; i++) {
      acc[i].classList.remove('active1');
      var panel = acc[i].nextElementSibling;
      if (panel.style.maxHeight){
        panel.style.maxHeight = panel.scrollHeight + "px";
      } else {
        panel.style.maxHeight = null;
      }
    }
    this.classList.add("active1");
    var panel = this.nextElementSibling;
    if (panel.style.maxHeight){
      panel.style.maxHeight = null;
    } else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    }
  });
}
...