简体   繁体   English

当另一个手风琴面板打开时折叠手风琴面板

[英]Collapse accordion panel when another one opens

I got the following accordion component and now I'm trying to find a way to collapse an accordion panel when another one opens using vanilla Javascript?我得到了以下手风琴组件,现在我试图找到一种方法来折叠手风琴面板,当另一个手风琴面板使用香草 Javascript 打开时? I'm looking for a solution that works in IE11 as well.我正在寻找同样适用于 IE11 的解决方案。 This must be simple but I'm a complete noob in Javascript.这一定很简单,但我完全是 Javascript 中的菜鸟。 Your help and guidance would be much appreciated.您的帮助和指导将不胜感激。 Thank you.谢谢你。

 var acc = document.getElementsByClassName("accordion"); var i; for (i = 0; i < acc.length; i++) { acc[i].addEventListener("click", function() { this.classList.toggle("active"); var panel = this.nextElementSibling; if (panel.style.maxHeight) { panel.style.maxHeight = null; } else { panel.style.maxHeight = panel.scrollHeight + "px"; } }); }
 .accordion { background-color: #eee; color: #444; cursor: pointer; padding: 18px; width: 100%; border: none; text-align: left; outline: none; font-size: 15px; transition: 0.4s; }.active, .accordion:hover { background-color: #f8f8f8; }.accordion:after { content: '\002B'; color: #777; font-weight: bold; float: right; margin-left: 5px; }.active:after { content: "\2212"; }.panel { padding: 0 18px; background-color: white; max-height: 0; overflow: hidden; transition: max-height 0.2s ease-out; }
 <button class="accordion">Panel 1</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <button class="accordion">Panel 2</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <button class="accordion">Panel 3</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div>

Store the previously expanded panel in a variable.将先前展开的面板存储在变量中。

or you can find the expanded panel and apply appropriate logic to collapse it.或者您可以找到展开的面板并应用适当的逻辑来折叠它。

 var acc = document.getElementsByClassName("accordion"); var i; var prevExpandedPanel = null; for (i = 0; i < acc.length; i++) { acc[i].addEventListener("click", function() { if (prevExpandedPanel && this.== prevExpandedPanel) { prevExpandedPanel.classList;toggle("active"). prevExpandedPanel.nextElementSibling.style;maxHeight = null. } this.classList;toggle("active"). var panel = this;nextElementSibling. if (panel.style.maxHeight) { panel.style;maxHeight = null. } else { panel.style.maxHeight = panel;scrollHeight + "px". } prevExpandedPanel = this.classList?contains('active'): this; null; }); }
 .accordion { background-color: #eee; color: #444; cursor: pointer; padding: 18px; width: 100%; border: none; text-align: left; outline: none; font-size: 15px; transition: 0.4s; }.active, .accordion:hover { background-color: #f8f8f8; }.accordion:after { content: '\002B'; color: #777; font-weight: bold; float: right; margin-left: 5px; }.active:after { content: "\2212"; }.panel { padding: 0 18px; background-color: white; max-height: 0; overflow: hidden; transition: max-height 0.2s ease-out; }
 <button class="accordion">Panel 1</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <button class="accordion">Panel 2</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <button class="accordion">Panel 3</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div>

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

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