我正在尝试制作一种幻灯片。
问题:
function slides(x) {
$("#irack").stop().animate({"left": x}, 20);
};
setInterval(slides(-30),300);
此代码仅将div向左移动1次。
为什么不每300毫秒移动div?
答案 0 :(得分:21)
您需要将代码包装在函数中以间隔运行:
function slides(x) {
$("#irack").stop().animate({"left": x}, 20);
};
setInterval(function() {
slides(-30);
}, 300);
你真的是 setInterval
吗?这将持续发生,每300ms左右。如果您只希望发生一次,请改用setTimeout
。
更新:如果您想稍后取消该时间间隔,则需要将句柄保存到变量中:
// 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
,请务必检查它们。)
答案 1 :(得分:5)
在调用setInterval时,正在调用slide方法将内联调用更改为如下所示:
setInterval(function(){slides(-30);},300);
答案 2 :(得分:2)
它不起作用的原因是因为你正在调用你传递给setInterval的函数
您需要将函数包装在匿名函数中,以将参数作为间隔的一部分传递。
function slides(x) {
$("#irack").stop().animate({"left": x}, 20);
};
setInterval(function(){slides(-30)},300);
注意slides(-30)
现在如何包含在一个匿名函数中。
答案 3 :(得分:2)
哦,我发现了问题:D
$("#irack").stop().animate({"left": x}, 20);
问题是“x”是一个常数,它将“left”改为x并保持这种状态。
我应该这样做:
x=$("#irack").offset().left+x;
$("#irack").stop().animate({"left": x}, 20);
非常感谢指出“包装”的东西:D。
答案 4 :(得分:0)
最短的答案是:
header('Content-Type: text/html; charset=utf-8');