Jquery setInterval()不工作
我正在尝试制作一种幻灯片 问题是:Jquery setInterval()不工作,jquery,function,Jquery,Function,我正在尝试制作一种幻灯片 问题是: function slides(x) { $("#irack").stop().animate({"left": x}, 20); }; setInterval(slides(-30),300); 此代码仅将div向左移动1次 为什么它不每隔300毫秒移动一次div?您需要包装代码,以便在函数中每隔一段时间运行一次: function slides(x) { $("#irack").stop().animate({"left": x
function slides(x) {
$("#irack").stop().animate({"left": x}, 20);
};
setInterval(slides(-30),300);
此代码仅将div向左移动1次
为什么它不每隔300毫秒移动一次div?您需要包装代码,以便在函数中每隔一段时间运行一次:
function slides(x) {
$("#irack").stop().animate({"left": x}, 20);
};
setInterval(function() {
slides(-30);
}, 300);
你真的是什么意思?这种情况将持续发生,大约每300毫秒一次。如果你想让它只发生一次,用它来代替
更新:如果以后要取消间隔,需要将句柄保存到变量:
// Somewhere appropriate, have a variable for the handle
var handle = 0; // 0 = not running
...
// Starting:
handle = setInterval(...);
...
// Stopping:
if (handle != 0) {
clearInterval(handle);
}
handle = 0;
注意未设置手柄时,手柄使用
0
0
是来自setInterval
的无效返回值,因此您可以依赖它。(如果您愿意,也可以使用undefined
或null
,只需确保检查它们即可。)在调用setInterval时,正在内联调用slides方法,将调用更改为如下所示:
setInterval(function(){slides(-30);},300);
它不起作用的原因是您正在调用传递给setInterval的函数 您需要将函数包装在匿名函数中,以作为间隔的一部分传递参数
function slides(x) {
$("#irack").stop().animate({"left": x}, 20);
};
setInterval(function(){slides(-30)},300);
注意
幻灯片(-30)
现在是如何包装在一个anon函数中的。哦,我发现了问题:D
$("#irack").stop().animate({"left": x}, 20);
问题是“x”是一个常数,它将“left”改为x并保持不变
我应该这样做:
x=$("#irack").offset().left+x;
$("#irack").stop().animate({"left": x}, 20);
非常感谢你指出“包装”的东西:D.最简短的答案是:
setInterval(function(){
$("#irack").stop().animate({"left": -30}, 20)
},300);
否,我需要setInterval,因为我将在MouseDown上执行setInterval函数,并在MouseOut中取消它:D@Cristy:啊,那么你需要间隔的句柄。我会更新的,谢谢!这就成功了。那么为什么slides()方法需要包装在另一个函数中呢?@loeschg:因为我们需要将参数传递给它(
-30
)。如果您知道自己在ECMAScript 5环境中,可以这样使用:setInterval(slides.bind(undefined,-30),300)
但是你还不能指望ECMAScript 5的功能(除非你包括一个垫片,因为bind
是垫片可以做的事情之一)。@loeschg:不客气!ECMAScript 5(ES5)是“JavaScript”的最新版本:标准语言的官方名称是ECMAScript,第五版规范大约在两年前发布。“垫片”(在此上下文中)是在本机还不支持它的浏览器上提供标准功能的东西。ES5中的一些新功能甚至可以在第三版引擎上提供(没有第四版),其他的则不能。搜索“es5垫片”,您将找到几个。最好是离题:setInterval
如果运行时间长,可能会导致问题。通常建议使用递归的setTimeout
调用,而不是setInterval
。它不会运行太多时间。正如我在另一篇评论中所说的,我只是在按住鼠标的同时使用setInterval滚动div,然后清除间隔。setInterval
不是jQuery函数。这是一个内置的JavaScript函数。@mareoraft是的,7年后,现在我知道:DThis帮了我的忙。谢谢有人知道为什么要这么做吗?