我有一个简单的丢球动画,我正在使用jQuery动画功能。球从bottom: 600
开始并一直落到地面,bottom: 90
。
function ballbounce() {
$('.football').animate({
'bottom': 90
}, bouncetime, 'easeOutBounce', function() {
});
}
当按下空格键时,我想缩短落下的动画并让球再次上升。我正在尝试通过检测按键,获取球的当前bottom
值,将300px添加到该值,然后将其设置为球上的新bottom
值。但是我希望从那时起恢复掉落的动画。
$(document).keydown(function(e) {
switch(e.which) {
case 32: // spacebar
var ballOffset = $('.football').offset();
var currentBallPosition = $(window).height() - ballOffset.top - $('.football').height();
var newBallPosition = currentBallPosition + 300;
$('.football').css("bottom", newBallPosition);
break;
default: return; // exit this handler for other keys
}
e.preventDefault(); // prevent the default action
});
我无法让它发挥作用,我不确定我哪里出错了。如果我在动画完成后按空格键,则只会更新球的bottom
。
这是一个基本的Keepy uppy足球比赛。所以球落下,你按空格键再次将球踢回空中。这是一个很好的解决方案吗?
答案 0 :(得分:1)
我会在元素上调用.stop()
,然后将其重置为原始位置。你可以在动画之前将原始位置作为数据属性存储在元素本身上,然后使用它来重置它,如下所示:
function ballbounce(selector,bouncetime) {
var $ball= $(selector);
$ball.data('original-top',$ball.position().top )
$ball.animate({ top: '+550px'}, bouncetime, "easeOutBounce", function() {
//animation complete
});
return $ball;
}
var $ballReference=ballbounce('.football',5000);
$(document).keydown(function(e) {
switch(e.which) {
case 32: // spacebar
$ballReference.stop().css({top:$ballReference.data('original-top')});
break;
default: return; // exit this handler for other keys
}
e.preventDefault(); // prevent the default action
});

.football{
width:100px;
height:100px;
background-color:#ccc;
position:absolute;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>
<div class="football"></div>
&#13;