Javascript 将图像移动到指定的最小值

Javascript 将图像移动到指定的最小值,javascript,animation,positioning,Javascript,Animation,Positioning,我有密码 $(document).keydown(function (key) { switch (parseInt(key.which, 10)) { case 38://up mObj.animate({ top: "-=100px" }); mObj.animate({ top: "+=" + change + "px"

我有密码

$(document).keydown(function (key) {
    switch (parseInt(key.which, 10)) {
        case 38://up
            mObj.animate({
                top: "-=100px"
            });
            mObj.animate({
                top: "+=" + change + "px"
            });
            break;
        default:
            break;
    }
});
这将使我的图像在向上按钮上正确地上下移动,假设马里奥在空中时不再按下向上按钮。我想通过一种方法来纠正这种情况(当Mario在空中时无法点击),比如我在代码第43-46行中找到的尝试


本质上,我想让马里奥在不被提升的情况下,一路下降到设定的最低水平。关于如何让它这样做或指出我的替代方法(第43-46行中注释的方法)不起作用的原因,有什么帮助吗?

作为一种即时解决方案,您可以尝试使用以下方法:

$(document).ready(function () {
    var jumping = false;
    $(document).keydown(function (key) {
        switch (parseInt(key.which, 10)) {
            case 38://up
                if (!jumping) {
                    jumping = true;

                    var jumpUp = new $.Deferred();
                    var jumpDown = new $.Deferred();

                    mObj.animate({
                        top: "-=100px"
                    }, {
                        done: function () {
                            jumpUp.resolve();
                        }
                    });
                    mObj.animate({
                        top: "+=" + change + "px"
                    }, {
                        done: function () {
                            jumpDown.resolve();
                        }
                    });
                    $.when(jumpUp, jumpDown).done(function () {
                        jumping = false;
                    });
                }
                break;
            default:
                break;
        }
    });
});

它基本上只是有一个马里奥是否在跳跃的“状态”。当按下“向上”箭头时,马里奥正在跳跃。一旦让他上下移动的动画完成,马里奥就不再跳跃了。因此,当Mario跳跃时,该函数忽略“向上”键。我确信有一种更优雅的方式(比如内置于
.animate
)但这就是我想到的

所以很明显,为了测试它,试着在马里奥跳跃的任何时候按下“向上”键……它不应该做任何事情


我没有过多地研究它,但我想知道为什么你有一个移动马里奥的
setInterval
?我的做法是只听
keydown
事件。如果是“向上”箭头,则设置它的动画,使其向上移动,然后再向下移动(就像您和我在这里协助的那样)。如果是左箭头,则设置他向左移动设定距离的动画。如果是右箭头,则设置他向右移动设定距离的动画。是否有理由让
setInterval
不断检查按键?也许我遗漏了什么。

我使用
setInterval
来确保左右移动的平稳性,这样我就有了一个不断更新的功能(不知道如何做),并测试该JSFIDLE中未包含的其他条件。非常感谢你!问题:
new$.Deferred()做什么
.resolve()做什么?