Я пользуюсь аккордеоном от HERE. В нем требуется небольшая модификация, а именно Откройте только одну вкладку одновременно.jQuery Accordion Откройте только одну вкладку одновременно
HTML
<div class="container">
<h1 class="heading-primary">CSS Responsive Animated Accordion</h1>
<div class="accordion">
<dl>
<dt>
<a href="#accordion1" aria-expanded="false" aria-controls="accordion1" class="accordion-title accordionTitle js-accordionTrigger">
First Accordion heading</a>
</dt>
<dd class="accordion-content accordionItem is-collapsed" id="accordion1" aria-hidden="true">
<p>Some data in first tab.</p>
</dd>
<dt>
<a href="#accordion2" aria-expanded="false" aria-controls="accordion2" class="accordion-title accordionTitle js-accordionTrigger">
Second Accordion heading</a>
</dt>
<dd class="accordion-content accordionItem is-collapsed" id="accordion2" aria-hidden="true">
<p>Some data in second tab.</p>
</dd>
</dl>
</div>
</div>
JS
$(document).ready(function() {
var d = document,
accordionToggles = d.querySelectorAll('.js-accordionTrigger'),
setAria,
setAccordionAria,
switchAccordion,
touchSupported = ('ontouchstart' in window),
pointerSupported = ('pointerdown' in window);
skipClickDelay = function (e) {
e.preventDefault();
e.target.click();
}
setAriaAttr = function (el, ariaType, newProperty) {
el.setAttribute(ariaType, newProperty);
};
setAccordionAria = function (el1, el2, expanded) {
switch (expanded) {
case "true":
setAriaAttr(el1, 'aria-expanded', 'true');
setAriaAttr(el2, 'aria-hidden', 'false');
break;
case "false":
setAriaAttr(el1, 'aria-expanded', 'false');
setAriaAttr(el2, 'aria-hidden', 'true');
break;
default:
break;
}
};
switchAccordion = function (e) {
e.preventDefault();
var thisAnswer = e.target.parentNode.nextElementSibling;
var thisQuestion = e.target;
if (thisAnswer.classList.contains('is-collapsed')) {
setAccordionAria(thisQuestion, thisAnswer, 'true');
} else {
setAccordionAria(thisQuestion, thisAnswer, 'false');
}
thisQuestion.classList.toggle('is-collapsed');
thisQuestion.classList.toggle('is-expanded');
thisAnswer.classList.toggle('is-collapsed');
thisAnswer.classList.toggle('is-expanded');
thisAnswer.classList.toggle('animateIn');
};
for (var i = 0, len = accordionToggles.length; i < len; i++) {
if (touchSupported) {
accordionToggles[i].addEventListener('touchstart', skipClickDelay, false);
}
if (pointerSupported) {
accordionToggles[i].addEventListener('pointerdown', skipClickDelay, false);
}
accordionToggles[i].addEventListener('click', switchAccordion, false);
}
});
Если это делает вещи легко, то, "мне нужно только две вкладки" Я пытался, но не успех. Что мне не хватает?
Я думаю, что у вас есть более сложный код здесь. Вы не переключаете классы столько раз. –
@ Sushanth--: Я не изменил оригинальный код. В любом случае, если вы можете изменить его, тогда я в порядке с измененной версией, если она дает мне необходимую функциональность. Мне просто нужна отзывчивость, плавная анимация и одна вкладка за раз, если этого не слишком много, чтобы спросить. : P –
У меня возник еще один вопрос. Почему вы включили функцию 'jQuery' DOM ready, которую вы кодировали все, используя Vanilla JS –