简体   繁体   English

手风琴切换图标无法正常工作

[英]Accordion switching icon not working properly

I am trying to add to my accordion minus sign to appear after clicking on the row.我正在尝试添加到我的手风琴减号以在单击该行后出现。

I've tried adding minus/plus let and tried to add display.styles for it.我尝试添加减号/加号let 并尝试为其添加 display.styles 。 But it seems really buggy and not working properly.但它似乎真的有问题并且不能正常工作。 How can I set this up properly?我该如何正确设置? And it only works for first element instead of all.它只适用于第一个元素而不是所有元素。

 const tabs = document.querySelectorAll(".faq__tab").forEach(button => { button.addEventListener("click", () => { const tabsContent = button.nextElementSibling; button.classList.toggle('active-faq'); let minus = document.querySelector(".plus") let plus = document.querySelector(".minus") if (button.classList.contains('active-faq')) { tabsContent.style.maxHeight = tabsContent.scrollHeight + 'px'; plus.style.display = 'none'; minus.style.display = 'flex'; } else { tabsContent.style.maxHeight = 0; minus.style.display = 'none'; plus.style.display = 'flex'; } }) });
 .plus { padding-left: 10px; } .minus { padding-left: 10px; display: none; } .faq__panel { max-height: 0px; overflow: hidden; }
 <button class="faq__tab">Question <img src='img/plus.svg' alt="Show" class="plus"> <img src='img/minus-svg.png' alt="Hide" class="minus"> </button> <div class="faq__panel"> <p>Answerr </p> </div>

You probably need to use inline-flex instead of flex :您可能需要使用inline-flex而不是flex

 const tabs = document.querySelectorAll(".faq__tab").forEach(button => { button.addEventListener("click", () => { const tabsContent = button.nextElementSibling; button.classList.toggle('active-faq'); let minus = button.querySelector(".plus");//instead of document use button to target the corresponding element let plus = button.querySelector(".minus");//instead of document use button to target the corresponding element if (button.classList.contains('active-faq')) { tabsContent.style.maxHeight = tabsContent.scrollHeight + 'px'; minus.style.display = 'none'; plus.style.display = 'inline-flex'; } else { tabsContent.style.maxHeight = 0; plus.style.display = 'none'; minus.style.display = 'inline-flex'; } }) });
 .plus { padding-left: 10px; } .minus { padding-left: 10px; display: none; } .faq__panel { max-height: 0px; overflow: hidden; }
 <button class="faq__tab">Question1 <img src='img/plus.svg' alt="Show" class="plus"> <img src='img/minus-svg.png' alt="Hide" class="minus"> </button> <div class="faq__panel"> <p>Answer1</p> </div> <button class="faq__tab">Question2 <img src='img/plus.svg' alt="Show" class="plus"> <img src='img/minus-svg.png' alt="Hide" class="minus"> </button> <div class="faq__panel"> <p>Answer2</p> </div>

The problem in that you're setting image display to flex , either give the button faq__tab display: flex in the css file, or set display: inline to images问题在于您将图像显示设置为flex ,要么在 css 文件中给按钮faq__tab display: flex ,要么设置display: inline to images

if (button.classList.contains('active-faq')) {
  tabsContent.style.maxHeight = tabsContent.scrollHeight + 'px';
   plus.style.display = 'none';
  minus.style.display = 'inline';
} else {
  tabsContent.style.maxHeight = 0;
  minus.style.display = 'none';
  plus.style.display = 'inline';
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM