#javascript #html #jquery
#javascript #HTML #jquery
Вопрос:
У меня есть этот фрагмент «Тип аккордеона» прямо сейчас. Он открывает содержимое под кнопкой при нажатии и снова закрывает его. Теперь я ищу решение, чтобы сделать состояние кнопки видимым для пользователя, например, если кнопка 2 открыта, я хочу показать «-«, указывающее, что ее можно закрыть щелчком мыши. То же самое с закрытыми кнопками, чтобы показать » «. Возможно ли это? Заранее спасибо 🙂
Это мой код прямо сейчас:
jQuery(function() {
jQuery('.ss_button').on('click', function() {
jQuery('.ss_content').not(jQuery(this).next('.ss_content')).slideUp('fast');
jQuery(this).next('.ss_content').slideToggle('fast');
});
jQuery('.ss_content').eq(1).show();
});
#ss_menu {
width: auto;
}
.ss_button {
background-color: #049132;
border-bottom: 1px solid #FFFFFF;
cursor: pointer;
padding: 10px;
margin-bottom: 5px;
color: #FFFFFF;
}
.ss_content {
background-color: white;
display: none;
padding: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="ss_menu">
<div class="ss_button">Einsteiger</div>
<div class="ss_content">
<p>Test1</p>
</div>
<div class="ss_button">Mittelklasse</div>
<div class="ss_content">
<p>Test2</p>
</div>
<div class="ss_button">High-End</div>
<div class="ss_content">
<p>Test3</p>
</div>
</div>
Ответ №1:
Я добавил некоторые изменения в ваш css:
.ss_button:before {
content: " ";
}
.ss_button.active:before{
content: "- ";
}
Затем мы настраиваем active
класс:
jQuery('.ss_button.active').not(jQuery(this)).removeClass('active')
jQuery(this).toggleClass('active');
Таким образом, вам не нужно изменять свой html.
ДЕМОНСТРАЦИЯ
jQuery(function() {
jQuery('.ss_button').on('click', function() {
jQuery('.ss_button.active').not(jQuery(this)).removeClass('active')
jQuery(this).toggleClass('active');
jQuery('.ss_content').not(jQuery(this).next('.ss_content')).slideUp('fast');
jQuery(this).next('.ss_content').slideToggle('fast');
});
jQuery('.ss_content').eq(1).show();
});
#ss_menu {
width: auto;
}
.ss_button {
background-color: #049132;
border-bottom: 1px solid #FFFFFF;
cursor: pointer;
padding: 10px;
margin-bottom: 5px;
color: #FFFFFF;
}
.ss_button:before {
content: " ";
}
.ss_button.active:before{
content: "- ";
}
.ss_content {
background-color: white;
display: none;
padding: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="ss_menu">
<div class="ss_button">Einsteiger</div>
<div class="ss_content">
<p>Test1</p>
</div>
<div class="ss_button active">Mittelklasse</div>
<div class="ss_content">
<p>Test2</p>
</div>
<div class="ss_button">High-End</div>
<div class="ss_content">
<p>Test3</p>
</div>
</div>
Комментарии:
1. @JonasLinde Нет проблем, рад помочь.
2. Я не знаю, можете ли вы помочь мне с этим, или мне следует открыть новую ветку, но как я могу прокрутить страницу до кнопки при нажатии? (Кнопки будут использоваться только на мобильных устройствах и будут иметь довольно длинное содержимое.) Прямо сейчас начало содержимого не отображается в верхней части страницы. Я надеюсь, что вопрос не сбивает с толку, не знаю, как сформулировать его по-другому: D
3. @JonasLinde Я бы посоветовал вам открыть новую ветку, чтобы вопросы не смешивались 🙂
Ответ №2:
Вы можете добавить пустой интервал в свои кнопки и изменить содержимое ( или -) в функциях щелчка. Проверьте строки # 4 и # 6, они совпадают с кодом.
jQuery(function() {
jQuery('.ss_button').on('click', function() {
jQuery('.ss_content').not(jQuery(this).next('.ss_content')).slideUp('fast');
jQuery('.ss_button').find('span').text(' ');
jQuery(this).next('.ss_content').slideToggle('fast');
jQuery(this).find('span').text('-');
});
jQuery('.ss_content').eq(1).show();
});
#ss_menu {
width: auto;
}
.ss_button {
background-color: #049132;
border-bottom: 1px solid #FFFFFF;
cursor: pointer;
padding: 10px;
margin-bottom: 5px;
color: #FFFFFF;
}
.ss_content {
background-color: white;
display: none;
padding: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="ss_menu">
<div class="ss_button">Einsteiger
<span> </span></div>
<div class="ss_content">
<p>Test1</p>
</div>
<div class="ss_button">Mittelklasse
<span> </span></div>
<div class="ss_content">
<p>Test2</p>
</div>
<div class="ss_button">High-End
<span> </span></div>
<div class="ss_content">
<p>Test3</p>
</div>
</div>