2012-07-16 76 views
0

我有以下HTML:我應該使用別的東西而不是setTimeout嗎?

<div id="wrapper"> 
     <div class="p1"> 
      <a href="#" class="quickFlipCta"><img src="Test Pictures/QuestionMark.gif" /></a> 
     </div> 

     <div class="p2"> 
      <a href="#" class="quickFlipCta"><img src="Test Pictures/flower.gif" /></a> 
     </div> 
</div> 

我使用的作品作爲面板之間的翻轉動畫(p1p2

以下作品完美插件:

last.parent().parent().quickFlipper({refresh :1}); 
$(this).parent().parent().quickFlipper({refresh :1}); 

然而,我想$(this).parent().parent().quickFlipper({refresh :1});被延遲。 我嘗試使用的setTimeout:

last.parent().parent().quickFlipper({ 
    refresh: 1 
}); 
setTimeout(function() { 
    $(this).parent().parent().quickFlipper({ 
     refresh: 1 
    }); 
}, 1200); 

當我這樣做,不執行的setTimeout內的功能都沒有。我想知道是否應該使用setTimeout以外的其他東西來延遲$(this).parent().parent().quickFlipper({refresh :1});

我已閱讀關於該插件的文檔,並且沒有關於此問題的內容。

這裏是我的全碼: http://jsfiddle.net/kBDFD/

+0

其因爲'this'指'window'在'的setTimeout ' – Amit 2012-07-16 17:50:31

+0

請不要使用jsfiddle來保存你的代碼,但建立一個工作簡約的例子。 – Bergi 2012-07-16 17:52:26

+0

你能鏈接到那個插件嗎?依靠它的源代碼? – Bergi 2012-07-16 17:56:57

回答

1

裏面的setTimeout(),你將失去的this值所以這就是爲什麼你的代碼將無法正常工作(this將被設置爲window對象)。

您可以使用這樣的事情,而不是:

var self = this; 
setTimeout(function() { 
    $(self).parent().parent().quickFlipper({refresh: 1}); 
}, 1200); 
1

你不能在回調中使用它,它會指向一個其他對象,你想先當運行第二個動畫

last.parent().parent().quickFlipper({ 
    refresh: 1 
}); 
var thiz = this; 
setTimeout(function() { 
    $(thiz).parent().parent().quickFlipper({ 
     refresh: 1 
    }); 
}, 1200); 
2

做已完成或您是否想同時運行它們,但有一些延遲?

您可以隨時使用動畫延遲對象,並且可以這樣做。

var self = this; 
last.parent().parent().quickFlipper({refresh :1}).promise().done(function() { 
    $(self).parent().parent().quickFlipper({refresh :1});  
}); 

第一次完成時將啓動第二個動畫。

0

您不應該需要使用超時。每個優秀的插件都會在動畫完成時提供回調,甚至不會使用.animate()。這意味着,你可以,無論是通過獲取.promise它(像格熱戈日」的答案),或使用.queue上的動畫隊列鉤:

last.parent().parent().quickFlipper({refresh :1}).queue(function(next) { 
    $(this).parent().parent().quickFlipper({refresh :1}); 
    next(); 
}); 
相關問題