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

过渡不适用于 div - vanilla js 手风琴

如何解决过渡不适用于 div - vanilla js 手风琴

我有一些简单的香草手风琴,但我不太确定为什么这里不应用 CSS 过渡? div 具有正确的高度,这是怎么回事?

(无法发布,因为显然我的问题主要是代码,所以此文本是一个肮脏的修复,抱歉)。

HTML(简化版)

<div class="container">
  <ul>
    <li class="accordion-item">
      <button class="accordion-item__title">
        Title
      </button>
      <div class="accordion-item__body not-active">
        Body
      </div>
    </li>
  </ul>
</div>

JS

document.addEventListener('DOMContentLoaded',function () {

  const accordions = document.querySelectorAll('.block-accordion');

  if (typeof (accordions) !== 'undefined' && accordions != null) {

    //loop thorugh all acordions
    for (let a = 0; a < accordions.length; a++) {
      const accordion = accordions[a];
      const accordionItems = accordion.querySelectorAll('.accordion-item');

      //loop through all accordiond's items
      for (let i = 0; i < accordionItems.length; i++) {
        const accordionItem = accordionItems[i];

        //show first by default
        accordionItems[0].querySelector('.accordion-item__body').classList.remove('not-active');
        accordionItems[0].querySelector('.accordion-item__body').parentElement.classList.add('active');
        accordionItems[0].querySelector('.accordion-item__title').setAttribute("aria-expanded",true);

        //hide each accordion on click
        const accordionItemTitle = accordionItem.firstElementChild;

        accordionItemTitle.addEventListener('click',function toggleAccordion(e) {

          const accordionContent = accordionItem.querySelector('.accordion-item__body');
          accordionContent.style.height = "auto";

          if (accordionContent.prevIoUsElementSibling === e.target) {
            accordionContent.classList.toggle('not-active');
            accordionContent.parentElement.classList.toggle('active');

            if (accordionContent.classList.contains('not-active')) {
              accordionContent.style.height = '0px';
              accordionContent.prevIoUsElementSibling.setAttribute("aria-expanded",false);
            } else {
              accordionContent.style.height = accordionContent.clientHeight + 'px';
              accordionContent.prevIoUsElementSibling.setAttribute("aria-expanded",true);
            }
          }
        });
      }
    }
  }
});

SASS

.block-accordion {

  .active {
    display: block;
  }

  .not-active {
    display: none;
    transition: height 0.35s ease-in-out;
    overflow: hidden;
  }
}

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