Javascript 函数外部的clearTimeout()工作不正常
我有这行代码,但它不起作用,我猜我的函数是问题的原因。以下是我的JavaScript: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({
$(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未定义”这样的内容,但我不确定这是否是我要查找的内容。谢谢,您的解决方案解决了我的问题。我完全忘记了我可以用真和假来检查这个。这就是为什么我不喜欢使用超时和间隔。再次非常感谢。