避免在jQuery中出现巨大的级联
Avoid giant cascading in jQuery?
我觉得这是我在jQuery中听说过的"延期"或"承诺"来解决的问题,但是搜索相关文章并不能完全显示我正在寻找什么。
我希望能够做一个简单的jquery函数调用(如animate()
或slideUp()
),然后在完成后调用另一个简单的函数。我当然知道slideUp(400, function(){ //onComplete... });
但是如果你有大量的动画,那很快就会变得非常毛茸茸的。
查看以下jsfiddle:http://jsfiddle.net/ue3daeab/
当你点击第一个按钮时,你会看到我想要实现的视觉效果。但是,我正在使用"级联地狱"来完成它,相关代码是:
$("#clickme").click(function(){
//Cascade hell
$("#my1").slideUp(400, function(){
$("#my2").slideUp(400, function(){
$("#my3").slideUp(400, function(){
$("#my4").slideUp(400, function(){
$("#my5").slideUp(400, function(){
$("#my6").slideUp(400, function(){
$("#my7").slideUp(400, function(){
$("#my8").slideUp(400, function(){
$("#my9").slideUp(400, function(){
$("#my10").slideUp(400);
});
});
});
});
});
});
});
});
});
});
当您单击按钮 2 时,所有div 都会立即折叠,这不是我想要的效果。我觉得我应该能够做这样的事情,但显然它不起作用。第二个按钮的相关代码是:
$.when($("#my1").slideUp())
.done($("#my2").slideUp())
.done($("#my3").slideUp())
.done($("#my4").slideUp())
.done($("#my5").slideUp())
.done($("#my6").slideUp())
.done($("#my7").slideUp())
.done($("#my8").slideUp())
.done($("#my9").slideUp())
.done($("#my10").slideUp());
有什么建议吗?谢谢。
为什么不使用一个简单的 id 数组来折叠,然后一次折叠一个项目?
$("#clickme").click(function(){
var toCollapse = ["#my1", "#my2", ...];
(function collapse(){
var id = toCollapse.shift();
if (!id) return;
$(id).slideUp(400, collapse);
})();
});
我也用这个例子编辑了你的jsfiddle:http://jsfiddle.net/ue3daeab/2/
我会做这样的事情:未经测试
$.each($('.item', '#container'), function(index, value) {
$(this).delay(50*index).slideUp(400);
});
这样,一切都不会试图一下子发生。
相关文章:
- 如何使用PHP和JS级联三个下拉列表
- 对级联下拉列表使用不同的连接字符串
- AngularJS或jquery中的依赖级联下拉框列表
- 文件结构:使用索引.js文件级联访问子模块或子文件
- 如何从一系列级联异步代码中返回值
- 我想创建4个级联下拉列表
- 带有角js的级联下拉列表
- Json级联下拉列表
- 如何级联jQuery Mobile组合框
- 在angular.js中创建级联dropbox
- JavaScript JTable-具有多个级联列表/下拉列表的Null值
- 级联和链接之间的区别是什么
- 级联下拉列表angularjs
- ASP.NET MVC级联下拉列表列出Javascript问题
- 级联下拉菜单干扰自动完成文本框
- 级联遵守形式
- 级联下拉列表mvc3,create方法
- 级联ajax请求
- 在级联 MVC 3 中禁用下拉列表
- 避免在jQuery中出现巨大的级联