Здесь следует обратить внимание на цвет абзаца, это работает так: когда блок скрыт - абзац красный, когда блок появляется - абзац чёрный. Абзац меняет цвет лишь после завершения функции slideToggle()
. Но такая проблема: когда блок раскрыт, и при этом нажать на абзац 2 раза, то блок остаётся открытым, а у абзаца цвет красный, а не чёрный. Долго решал проблему уже крайний случай.
$('p').click(function() {
if ($('.q1').is(':hidden')) {
$('.q1').stop().slideToggle(function() {
$('p').css({
background: 'black'
});
});
} else {
$('.q1').stop().slideToggle(function() {
$('p').css({
background: 'red'
});
});
}
});
.q1 {
height: 300px;
width: 100px;
background: black;
display: none;
}
p {
float: right;
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>123312
<div class="q1"></div>
Очевидно ошибка в том, что вы используете 2 разных условия, которые определяют скрыт объект или нет.
is(':hidden')
определяет скрыт ли объект полностью
slideDown()
определяет скрыт ли объект или уже начал скрываться.
Но вместо того, чтобы пытаться предсказать, как поведет себя slideDown()
, не легче ли сделать проверку после анимации, чтобы определить состояние уже дефакто?
Рабочий код:
$('p').click(function() {
$('.q1').stop(true).slideToggle(function() {
if ($('.q1').is(':hidden')) {
$('p').css({
background: 'red'
});
} else {
$('p').css({
background: 'black'
});
}
});
});
.q1 {
height: 300px;
width: 100px;
background: black;
display: none;
}
p {
float: right;
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>123312
<div class="q1"></div>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Есть форма с несколькими блоками в которых, в свою очередь присутствуют по два инпута from и toЕсть скрипт, который сверяет введенные...
Здравствуйте, у меня при наведении на элемент в Google Chrome должна появляться рамка 3px, но сначала появляется однопиксельная, и потом достраивается...
Есть кнопка на форме, есть два селектора: button и button:activeПри нажатии мышью на кнопке — стиль из селектора button:active применяется, но если нажать...
Здравствуйте! Есть числовое поле с установленным минимальным и максимальным значениями и шагом в 05