Поискал быстрые решения в Vue Js для организации аккордеона.
Поисковики выдают только какие-то плагины.
Но, для такого небольшого функционала подключать плагин не хочется.
Да и если подключать на каждый чих плагин, то потом будет сложно поддерживать такой зверинец.
Поэтому написал простой код. И делюсь им:
Пример работающего аккордеона на vue js можно посмотреть здесь:
http://zufar.ru/examples/vuejs/vuejs_accordion_ru.html
Итак сначала наш html-код:
<div class="accordion" id="accordion"> <div class="accordion-item"> <h3 class="accordion-item-head" v-on:click="accordion"> Первый пункт </h3> <div class="accordion-item-body"> Кто, по-вашему, этот мощный старик? Не говорите, вы не можете этого знать. Это — гигант мысли, отец русской демократии и особа, приближенная к императору. </div> </div> <div class="accordion-item"> <h3 class="accordion-item-head" v-on:click="accordion"> Второй пункт </h3> <div class="accordion-item-body"> Кто, по-вашему, этот мощный старик? Не говорите, вы не можете этого знать. Это — гигант мысли, отец русской демократии и особа, приближенная к императору. </div> </div> <div class="accordion-item"> <h3 class="accordion-item-head" v-on:click="accordion"> Третий пункт </h3> <div class="accordion-item-body"> Кто, по-вашему, этот мощный старик? Не говорите, вы не можете этого знать. Это — гигант мысли, отец русской демократии и особа, приближенная к императору. </div> </div> </div>
Структура кода здесь простая.
Нам нужно показывать или скрыть блоки с классом .accordion-item-body.
Делать мы будем это с помощью селектора соседних элементов плюса (+):
Вот css-код:
.accordion-item{
position: relative;
}
.accordion-item-head{
background-color: #dfdfdf;
border-top-left-radius: 5px ;
border-top-right-radius: 5px;
cursor: pointer;
padding:10px;
}
.accordion-item-head:after{
content: ' > ';
display: block;
height: 29px;
position: absolute;
right: 25px;
transform: rotate(90deg) scaleY(2);
top: 8px;
}
.accordion-item-head.active:after{
content: ' < ';
}
.accordion-item-body{
display: none;
}
.accordion-item-head.active + .accordion-item-body{
display: block !important;
}
Далее мы подключаем фреймворк VueJs.
И теперь самое главное JavaScript:
var app = new Vue({
el: '#accordion',
data: {
},
methods: {
accordion: function (event) {
//Раскомментировать, если нужно, чтобы закрывались остальные пункты при открытии текущего
// var matches = document.querySelectorAll('.accordion-item-head');
// for(var i = 0; i < matches.length; i++) {
// matches[i].classList.remove('active');
// }
event.target.classList.toggle('active');
}
}
});
Здесь тоже все до ужаса просто.
Все основное происходит в этой строке:
event.target.classList.toggle('active');
Мы добавляем заголовку h3 css-класс active.
Затем с помощью css показываем следующий соседний элемент:
.accordion-item-head.active + .accordion-item-body{
display: block !important;
}

Добрый день! У меня не работает , при клике вообще ничего не происходит , не добавляется класс aactive .
Я не думала что найду, спасибо большое!