微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

手风琴:对父子应用相同的类

如何解决手风琴:对父子应用相同的类

我目前有一个可用于导航的手风琴,对此我很满意。 我有它,所以当单击父级时,它会将一个类(处于活动状态)应用于下一个兄弟姐妹,即“.submenu”。我正在努力弄清楚如何将相同的类也应用于父级,以及父级的“a”链接(在 html 中它是“a.accordion-item”)。

基本上,我的 CSS 中规定,当“is-active”也应用于“accordion-item”时,它会将“+”旋转为“x”。

感谢您的帮助,谢谢! 我也在(尝试)自学 JS/Jquery,所以请随意详细说明!

CodePen 上的完整代码

JS 代码

let accordionIsActive = "is-active";
let accordionParent = document.querySelectorAll(".accordion-item");
for (let i = 0; i < accordionParent.length; i++) {
  accordionParent[i].addEventListener("click",toggleAccordionUL,false);
}

function toggleAccordionUL(e) {
  // Prevent default link function on parent.
  e.preventDefault();
 
  let accordionGroup = document.querySelector("." + accordionIsActive);
  let sameElem = false;
  
  if (accordionGroup) {
    closeAccordion(accordionGroup);
    sameElem = accordionGroup.prevIoUsElementSibling === e.target;
  }

  if (!sameElem) {
    let accordionUL = e.target.nextElementSibling;
    openAccordion(accordionUL);
  }
}

function closeAccordion(accordionGroup) {
  accordionGroup.classList.remove(accordionIsActive);
  accordionGroup.style.maxHeight = 0;
}

function openAccordion(accordionUL) {
  accordionUL.classList.add(accordionIsActive);
  accordionUL.style.maxHeight = accordionUL.scrollHeight + "px";
}

let defaultPanel = document.querySelector(".submenu");
if (defaultPanel) {
  defaultPanel.classList.remove(accordionIsActive);
  /* setTimeout(openAccordion,1000,defaultPanel); */
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。