我不知道是否調用這個嵌套是否正確?但是我知道這不是一個很好的代碼,它有很多功能。大多數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