Напишем пример JavaScript-аккордеона с плавной анимацией. Аккордеон — это тип элемента пользовательского интерфейса, который позволяет пользователям отображать или скрывать дополнительное содержимое, кликая на вкладки аккордеона.
Пример, который мы сделаем:
HTML:
<div class="accordion-container">
<button class="accordion-tab">Accordion Tab 1</button>
<div class="accordion-panel">
<p>Accordion Content 1</p>
</div>
<button class="accordion-tab">Accordion Tab 2</button>
<div class="accordion-panel">
<p>Accordion Content 2</p>
</div>
<button class="accordion-tab">Accordion Tab 3</button>
<div class="accordion-panel">
<p>Accordion Content 3</p>
</div>
</div>
CSS:
/* Контейнер для аккордеона */
.accordion-container {
width: 500px;
margin: 0 auto;
}
/* Стили для вкладок аккордеона */
.accordion-tab {
background-color: #f2f2f2;
color: #444;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
transition: 0.4s;
}
/* Стили для активной вкладки */
.active,
.accordion-tab:hover {
background-color: #ccc;
}
/* Стили для панели аккордеона */
.accordion-panel {
padding: 0 18px;
background-color: white;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
}
JavaScript:
var acc = document.getElementsByClassName("accordion-tab");
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-tab, а содержимое, которое нужно показать или скрыть, содержится в элементах div с именем класса accordion-panel. CSS стилизует внешний вид аккордеона, включая вкладки аккордеона, активную вкладку и панели аккордеона. Код JavaScript динамически обновляет свойство max-height панелей аккордеона при нажатии на вкладку, чтобы открыть или закрыть панель.