Javascript 函数外部的clearTimeout()工作不正常

Javascript 函数外部的clearTimeout()工作不正常,javascript,jquery,function,Javascript,Jquery,Function,我有这行代码,但它不起作用,我猜我的函数是问题的原因。以下是我的JavaScript: $(document).ready(function () { var interval; function move(ele) { $(ele).animate({ 'background-position-y': '0px' }, 200, function () { $(ele).animate({

我有这行代码,但它不起作用,我猜我的函数是问题的原因。以下是我的JavaScript:

$(document).ready(function () {
    var interval;

    function move(ele) {
        $(ele).animate({
            'background-position-y': '0px'
        }, 200, function () {
            $(ele).animate({
                'background-position-y': '3px'
            }, 200, function () {
                interval = setTimeout(function () {
                    move(ele)
                }, 3);
            });
        });
    };
    $(".up").hover(function () {
        move(this), function () {
            clearTimeout(interval);
            interval = null;
            $(this).css("background-position", "80px 3px ");
        };
    });
有人能解释一下我做错了什么吗?

呃,看起来你真正的问题是你只把一个函数传递给了hover,而不是两个。您得到的是
…hover(function(){move(…),function(){…})
而不是
…hover(function(){move(…);},function(){…})


在将来,如果您养成了一致缩进代码的习惯,这种错误将更容易被发现。

即使使用David建议的正确的大括号,仍然存在一个问题,可以让动画继续运行。清除计时器(间隔)不会停止传递给
.animate()
的回调函数的执行。因此
interval=setTimeout(…)
仍将执行并使动画周期永久化


我对代码进行了一些修改,以作为一个工作示例,不过可能会有一些改进(比如去掉一个全局变量)

您没有正确关闭
悬停处理程序中的第一个函数;取而代之的是,一个问题嵌套在另一个问题中。我之所以投票关闭,是因为“这个问题不太可能帮助任何未来的访问者;它只与……一个非常狭窄的情况相关,而这种情况通常不适用于互联网的全球受众。有关使这个问题更广泛适用的帮助,请参阅常见问题解答。”Firefox不支持
background-position-x
background-position-y
属性。以防万一matters@WizardofOgz谢谢你指出这一点,这绝对很重要。我照你说的做了,但clearTimeout不起作用,函数仍在反复循环。你确定确实调用了
clearTimeout
?如果您不确定:使用调试器、日志或其他方法进行检查。如果它没有被调用,请用你的新代码更新你的问题。你能解释我怎么做吗,我正在使用Chrome的inspect元素选项,但我似乎找不到它。uuhh…解释如何做什么,确切地说?如何检查clearTimeout是否被调用。在Google Chrome inspect element功能中搜索后,我只找到了类似“ReferenceError:interval未定义”这样的内容,但我不确定这是否是我要查找的内容。谢谢,您的解决方案解决了我的问题。我完全忘记了我可以用真和假来检查这个。这就是为什么我不喜欢使用超时和间隔。再次非常感谢。