我不知道是否调用这个嵌套是否正确?但是我知道这不是一个很好的代码,它有很多功能。大多数jQuery方法都有回调函数,我们可以将回调函数放在那里。但是当我们在另一个回调中进行回调并继续这个并且越来越深时,它看起来代码变得不太可读并且可能更少可调试。如何防止过多的嵌套函数jQuery代码?
例如,如果我想在彼此之后做一些动画,我必须调用每一个动画,我想要在它的回调函数之后来到另一个动画。它在回调函数中会越来越深入。看下面这个例子(fiddle):
$('#t').animate({height: 400}, 500, function(){
$(this).animate({height: 200}, 500, function(){
$(this).animate({width: 300}, 500, function(){
$(this).animate({height: 300}, 500, function(){
$(this).animate({'border-radius': '50px'}, 500, function(){
//and so on...
});
});
});
});
});
做一个5个步骤的动画我必须做出一个5级调用堆栈。所以我的问题是你如何避免这种情况?我的Node.js函数也有同样的问题。
更新: 我知道jQuery函数有chinning功能,但不解决问题。因为你无法在连锁店之间做点什么。你可以写上面的代码一样$(selector').animate().animate()...
,但你不能为此做相同的:
$('#t').animate({height: 400}, 500, function(){
console.log('step 1 done: like a boss');
$(this).animate({height: 200}, 500, function(){
console.log('step 2 done: like a boss');
$(this).animate({width: 300}, 500, function(){
console.log('step 3 done: like a boss');
$(this).animate({height: 300}, 500, function(){
console.log('step 4 done: like a boss');
$(this).animate({'border-radius': '50px'}, 500, function(){
//and so on...
});
});
});
});
});
理想的解决办法是这样的代码:
$(selector).doQ(anim1, anim2, myfunc1, anim3, myfunc2)...
但可悲的是jQuery的没有一个API像这样(据我所知)。
我不认为这样的嵌套功能有问题。 – Nathan
@Nathan:真的吗?尝试调试,维护和阅读深层嵌套的代码。 –
@Andrew我的意思是我认为它会起作用。我以为他在问是否合适。是的,调试,阅读和维护非常困难。 – Nathan