0
也許我的問題,從自身的簡單偏離:鑑於我.trigger()
一個事件,我怎麼能確保代碼之後說.trigger()
不會執行,直到整個事件處理函數已完成,包括其中的所有動畫,延遲等等?jQuery事件觸發器;回調和定時相對於動畫
我希望我在這裏失去了一些東西;我正在設置一系列自定義事件的用戶界面。其中一些事件實際上只是其他事件的集合;例如:
// ...
'cb-ui.hide': function(event){
// do stuff to hide
},
'cb-ui.close': function(event){
$(this).trigger('cb-ui.hide');
// more stuff for close
},
// ...
由於沒有在cb-ui.hide
事件的動畫,像.fadeOut(1500)
,它出現(在我的測試),剩餘的// more stuff for close
不等待動畫在觸發事件完成。我想(之前的引用文檔),其.trigger()
將可能有一個可選的回調參數很像動畫的方法:
$(this).trigger('cb-ui.hide', function(event){
// more stuff for close
});
但是這似乎並不如此。由於事件觸發器沒有被阻塞(或者看起來不是至少),我能做些什麼來強制實現所需的功能,同時保持我一直在構建的事件處理程序/觸發器實現?
更具體地:
$('[data-cb-ui-class="window"]').live({
'cb-ui.hide': function(event){
$(this).find('[data-cb-ui-class="content"]').animate({
opacity: 0
}, 1000);
},
'cb-ui.show': function(event){
$(this).find('[data-cb-ui-class="content"]').animate({
opacity: 1
}, 1000);
}
'cb-ui.close': function(event){
$(this).trigger('cb-ui.hide');
$(this).find('[data-cb-ui-class="content"]').animate({
height: 'hide' // happening simultaneously to the animation of 'cb-ui.hide'
// expected to happen in tandem; one after the other
}, 1000);
},
'cb-ui.update': function(event, html){
// none of this is working as expected; the expected being, the 'cb-ui.hide'
// event is triggered (thus fading the [...-content] out) the HTML content is
// updated, then the [...-content] is faded back in from 'cb-ui.show'
// instead its just a mess that results in it fading out
$(this).trigger('cb-ui.hide');
$(this).find('[data-cb-ui-class="content"]').html(html);
$(this).trigger('cb-ui-show');
}
});
$('#foo').trigger('cb-ui.update', ['<p>Hello world!</p>']); // #foo is bound
該實施例的動畫必須採取〜2秒,但似乎正在1;兩個動畫都是同時發生的,而不是按照邏輯順序。
謝謝@Wes - 也許,我會與更新一起測試;檢查所述更新的問題。 – Dan