【发布时间】:2013-09-05 22:26:25
【问题描述】:
我试图让一些东西在 javascript 中向下滚动屏幕,但是,在执行时,它只会说一点并立即显示所有内容。所以$("#Menu").html('') 函数并没有清除它,setTimeout(function {},500) 只是为整个页面而不是代码段设置超时。
var MenuData = [
{'Name':'pictures','x':'30'},
{'Name':'blog','x':'50'},
{'Name':'contact','x':'42'}
]
;
var PositionArray = new Array();
$(document).ready(function () {
for (var count = 0; count < 1000; count++) {
$("#Menu").html('');
if (PositionArray[count] != null) {
PositionArray[count]++;
} else {
PositionArray[count] = 0;
}
setTimeout(function () {
for (var i in MenuData) {
$("#Menu").append('<div style="position:relative; left:' + MenuData[i].x + 'px; top:' + PositionArray[i] + 'px; ">123</div>');
}
}, 500);
}
});
这是小提琴:http://jsfiddle.net/LbjUP/
编辑:代码中存在一些不适用于问题的错误。这是新的:http://jsfiddle.net/LbjUP/1/,我刚刚将 PositionArray[count] 作为 PositionArray[i] 移动到 setTimeout 函数中
【问题讨论】:
-
因为你给它们的持续时间都是一样的。请注意,由于在 for 循环中使用 setTimeout 而没有正确创建保留
i值的子范围,您还会遇到严重的范围问题 -
基本上,您会立即同时创建 1000 个设置超时,所有这些都将在 500 毫秒后触发。因此,在 500 毫秒后,所有 1000 都会触发。
-
我想你可以使用 500*count。您也可以设置它,以便 setTimeout 函数递归调用自身。
-
有没有办法让 setTimeout() 每次都调用而不是等到 for 循环结束(这对我来说没有意义——为什么要这样做?)?
-
@Jamil:看我的回答。
setInterval也应该可以工作,如果您在 1000 次通话后清除间隔计时器。实际上应该更好地避免调用堆栈。
标签: javascript jquery settimeout