отмена действий анимации в .on(click)
подскажите начинающему программисту, мать его за ногу, как правильно реализовать отмену действия при повторном нажатии клика? пример кода прилагается
$(document).ready(function() {
var musplmini, musicphotomini, nameplayedtrack, openplayer;
jQuery('.openplayer').on('click', function() {
musplmini = jQuery('.musplmini').animate({
height: "400px"
})
musicphotomini = jQuery('.musicphotomini').animate({
top: '20px',
left: '50px',
height: '150px',
width: '150px',
borderRadius: '150px'
})
nameplayedtrack = jQuery('.nameplayedtrack').animate({
top: '240px',
left: '5px',
height: '40px',
width: '240px',
fontSize: '16px'
})
openplayer = jQuery('.openplayer').animate({
top: '383px'
});
});
});
/* Плеер мини */
.musplmini {
position: fixed;
top: 41px;
width: 250px;
height: 40px;
right: 100px;
background: rgba(255, 255, 255, 0.95);
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.25);
;
border-radius: 0px 0px 15px 15px;
}
/* Обложка трека */
.musicphotomini {
position: absolute;
width: 30px;
height: 30px;
top: 5px;
left: 10px;
border-radius: 25px;
overflow: hidden;
animation: 5s linear 0s normal none infinite running rot;
}
@keyframes rot {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/* Название трека */
.nameplayedtrack {
position: absolute;
width: 190px;
height: 20px;
top: 5px;
left: 50px;
color: #000000b4;
font-size: 12px;
text-align: center;
}
/* раскрыть плеер */
.openplayer {
position: absolute;
width: 20px;
height: 20px;
top: 38px;
left: 115px;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="musplmini">
<div class="openplayer">
<img src="img/ico/ico-open-player.png"></div>
<section class="musicphotomini">
<img src="img/pic.png"></section>
<span class="nameplayedtrack">
David Guetta and Bebe Rexha - I'm Good (Blue)
</span>
</div>
Ответы (1 шт):
Автор решения: rusgeli
→ Ссылка
Не претендую на правильный подход, но мне кажется, что уместнее будет играть со стилями, а не с анимацией через jQuery. Так проще, да и не придется нагружать лишними скриптами браузер. Все, что от вас требуется в плане программирования -- по нажатию на кнопку добавлять или убирать класс, который будет индикатором нажатия. А дальше в зависимости от наличия этого класса применять необходимые стили.
Пример:
$(document).ready(function() {
jQuery('.openplayer').on('click', function() {
$('.musplmini').toggleClass('clicked');
});
});
/* Плеер мини */
.musplmini {
position: fixed;
top: 41px;
width: 250px;
height: 40px;
right: 100px;
background: rgba(255, 255, 255, 0.95);
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.25);
border-radius: 0px 0px 15px 15px;
transition: all 1s ease;
}
.musplmini.clicked { /*раскрытый блок*/
height: 400px;
}
/* Обложка трека */
.musicphotomini {
position: absolute;
width: 30px;
height: 30px;
top: 5px;
left: 10px;
border-radius: 25px;
overflow: hidden;
animation: 5s linear 0s normal none infinite running rot;
transition: all 1s ease;
}
.musplmini.clicked .musicphotomini { /*раскрытый блок*/
width: 150px;
height: 150px;
top: 20px;
left: 50px;
border-radius: 150px;
}
@keyframes rot {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/* Название трека */
.nameplayedtrack {
position: absolute;
width: 190px;
height: 20px;
top: 5px;
left: 50px;
color: #000000b4;
font-size: 12px;
text-align: center;
transition: all 1s ease;
}
.musplmini.clicked .nameplayedtrack { /*раскрытый блок*/
width: 240px;
height: 40px;
top: 240px;
left: 5px;
font-size: 16px;
}
/* раскрыть плеер */
.openplayer {
position: absolute;
width: 20px;
height: 20px;
top: 38px;
left: 115px;
cursor: pointer;
transition: all 1s ease;
}
.musplmini.clicked .openplayer { /*раскрытый блок*/
top: 383px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="musplmini">
<div class="openplayer">
<img src="img/ico/ico-open-player.png">
</div>
<section class="musicphotomini"><img src="img/pic.png"></section>
<span class="nameplayedtrack">David Guetta and Bebe Rexha - I'm Good (Blue)</span>
</div>