Аккордеон
Иногда нужно, чтобы при раскрытии одного спойлера, другие спойлеры скрывались.
Для этого спойлеры нужно поместить в один родительский элемент, например в секцию или в блок.
Этому родительскому элементу нужно добавить класс 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>