#jquery
#jquery
Вопрос:
Ниже у меня есть некоторый код, который в основном анимирует div от нижней части страницы до верхней. Когда я наведу курсор на div, я хочу, чтобы анимация немедленно остановилась и присвоила div значение непрозрачности 0.25. Когда мышь покидает div, я хочу, чтобы анимация продолжалась.
Прямо сейчас анимация не останавливается, и значение непрозрачности задается после завершения анимации, а не сразу, чего я и хочу.
Итак, как мне получить желаемый результат?
<!DOCTYPE html>
<html>
<head>
<style>
#bubble{
border-radius:20px;
margin:3px;
width:40px;
height:40px;
position:absolute;
left:0px;
top:1000px;
background:green;
display:none;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="bubble"></div>
<script>
function runIt() {
$('#bubble').show(0);
$('#bubble').animate({top:'-=1000px',},5000);
$('#bubble').animate({top:' =1000px',},0);
$('#bubble').hide("normal", runIt);
}
runIt();
$('#bubble').hover(function() {
$('#bubble').animate({
opacity: 0.25,
}, 500, function() {});
});
</script>
</body>
</html>
Ответ №1:
Существует плагин jQuery pause / resume, который делает именно то, что вы ищете.
Ответ №2:
Вы ищете .stop()
. Вы могли бы использовать это, чтобы остановить любую анимацию, запущенную на выбранном элементе (и, при необходимости, мгновенно перейти к логическому завершению анимации) на mouseover
и перезапустить анимацию на mouseout
компонентах hover()
.
$('#bubble').animate({
// blah
}).hover(function() {
// stop animation
$(this).stop().css({ opacity : 0.25 });
}, function () {
// continue animation
$(this).css({ opacity : 1.0 }).animate({ /* blah */ });
});
Однако, глядя на ваш код, вы используете инкрементную анимацию (т. Е. Используете =1000px
вместо чего-то фиксированного типа 1000px
). Из-за этого вам придется каким-то образом отслеживать ход анимации и применять к ней скорректированную инкрементальность mouseout
.
Например, если #bubble
выполняется анимация, а затем вы наводите на нее курсор, вы должны быть в состоянии определить, что она уже перемещена, 300px
например, и вызвать скорректированный .animate({ top : '-=700px' })
параметр при продолжении.
Если вы использовали фиксированные значения для анимации, не должно быть проблемой просто вызвать исходную анимацию снова при продолжении.
Ответ №3:
В случае наведения вы захотите вызвать .stop(true, false). Затем в функции exit (в настоящее время пустой) вам нужно перезапустить анимацию с текущей позиции.
<script>
function runIt() {
$('#bubble').show(0);
$('#bubble').animate({top:'-=1000px'},5000);
$('#bubble').animate({top:' =1000px'},0);
$('#bubble').hide("normal", runIt);
}
runIt();
$('#bubble').hover(function() {
$(this).stop(true, false);
$(this).animate({
opacity: 0.25,
}, 500);
}, function() {
runIt();
});
</script>