Аккордеон

Иногда нужно, чтобы при раскрытии одного спойлера, другие спойлеры скрывались.

Для этого спойлеры нужно поместить в один родительский элемент, например в секцию или в блок.

Этому родительскому элементу нужно добавить класс accordeon и на страницу добавить следующий код:

<script>
creatium.api(function (page) {
page.lazy('.accordeon', function (el) {
var accordeon = page.getComponent(el);
var spoilers = accordeon.getComponentsByClass('widget-spoiler');
spoilers.forEach(function (spoiler) {
spoiler.on('expand', function () {
spoilers.forEach(function (spoiler2) {
if (spoiler2 !== spoiler && !spoiler2.isCollapsed) {
spoiler2.collapse();
}
});
});
});
});
});
</script>

Можно сделать несколько секций или блоков со спойлерами, и каждому добавить класс accordeon. Тогда они будут работать независимо друг от друга. Код на страницу достаточно добавить только один раз.

Нескрываемый аккордеон

Так же есть другой вариант «аккордеона», в котором единственный открытый спойлер невозможно скрыть. То есть всегда будет один раскрытый спойлер.

<script>
creatium.api(function (page) {
page.lazy('.accordeon', function (el) {
var accordeon = page.getComponent(el);
var spoilers = accordeon.getComponentsByClass('widget-spoiler');
spoilers.forEach(function (spoiler) {
spoiler.on('expand', function () {
spoilers.forEach(function (spoiler2) {
if (spoiler2 !== spoiler && !spoiler2.isCollapsed) {
spoiler2.collapse();
}
});
});
spoiler.on('before-collapse', function (prevent) {
var hasExpanded = false;
spoilers.forEach(function (spoiler2) {
if (spoiler2 !== spoiler && !spoiler2.isCollapsed) {
hasExpanded = true;
}
});
if (!hasExpanded) prevent();
});
});
});
});
</script>