setTimeout传递参数问题
setTimeout passing arguments issue
我正在尝试传递元素和slideUp每个列表项内容的索引与延迟
这是我的代码
for(var i = 1; i <= $("#colContainer li").length ; i++) {
var el = $("#colContainer li:nth-child(" + i + ") .colContent");
var delay = function() {
slide(el);
};
setTimeout(delay, 10);
function slide(el){
el.slideUp();
};
};
但每次只有最后一个滑上来
我期望的是它们从索引1滑到末尾,延迟
我也试过这个
index = $(this).parent("li").index();
for(var i = 1; i <= $("#colContainer li").length ; i++) {
(function(i) {
var el = $("#colContainer li:nth-child(" + i + ") .colContent");
var delay = function() {
slide(el);
};
setTimeout(delay, 10);
function slide(el){
el.slideUp();
};
})(i);
};
但是它们同时滑动,我想让索引1滑动,在索引2之后,然后。
有FOR循环的方法吗?
这是因为var el
的作用域是函数块,而不是循环块。
试试这样写:
for( var i=1; ......) { (function(i) {
var el = ...
// rest of your code, unchanged
})(i); }
您需要一个闭包来为每次循环的el值限定范围。
for(var i = 1; i <= $("#colContainer li").length ; i++) {
var el = $("#colContainer li:nth-child(" + i + ") .colContent");
(function(el) {
setTimeout(function(){
el.slideUp();
},10);
})(el);
}
然而,这仍然会导致它们同时动画,如果这是想要的结果,你可以用jQuery一步完成。如果你想让它们一次动画一个,你可以这样做:
for(var i = 1; i <= $("#colContainer li").length ; i++) {
(function(i) {
var el = $("#colContainer li:nth-child(" + i + ") .colContent");
setTimeout(function(){
el.slideUp();
}, i * 10);
})(i);
}
您是想让它们排队,还是在它们全部滑动之前等待10毫秒的延迟?
需要for
回路吗?
下面的语句不符合后者吗?
setTimeout(function() {
$("#colContainer li .colContent").slideUp();
}, 10);
排队幻灯片示例:
(function slideContent(index) {
$("#colContainer li:nth-child(" + index + ") .colContent").slideUp();
if ($("#colContainer li:nth-child(" + (index + 1) + ") .colContent").length == 1) {
setTimeout(function() { slideContent(index + 1); }, 250);
}
})(1);
除非你打算让它们同时动画,否则你不能以这种方式在循环中设置它们。如果你这样做,它们几乎是同时执行的,正如你所说,你实际上只会看到最后一个。
您需要在前一个任务完成后触发每个后续任务。用回调将它们链接在一起。
delay
应该设置下一个setTimeout。然后你就会得到你想要的结果。
编辑鉴于这里的其他答案,我将补充说,您可能希望将暂停时间从10ms增加到100毫秒,然后使用其他人建议的* I解决方案。用10ms乘以i不会得到很多明显的延迟。我将从100毫秒开始,如果这太不稳定,那么以10毫秒的增量向下移动,直到你得到一个让你满意的动画。
相关文章:
- 参数变量出现ngTable指令问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- 简单的ES6承诺问题-交换解决和拒绝参数
- 视点参数关闭标记问题
- 参数未正确传递给AJAX-编码问题
- 传递参数的问题,以及为MYSQL集成准备代码的问题
- javascript中传递参数的问题
- 作为参数传递时出现撇号问题
- Javascript函数和这个参数的一些问题
- 列表.js参数问题
- 问题将 Javascript 数组发送到带有 List
参数的 Web API 方法 - VBScript 将参数传递给 JavaScript 问题
- 删除导致页面刷新出现问题的查询参数
- Angular js - 解决不将参数传递给控制器的问题
- 在angularjs/javascript中将参数传递给命名回调函数的问题
- 使用函数作为参数 - 问题
- CoffeeScript - 将参数传递给超级构造函数时出现问题
- 作用域和将参数传递给动态创建的事件处理程序时出现问题
- 参数数量错误的问题
- 在 javascript 中通过初始化器函数传递参数时遇到问题