2016-07-04 120 views
1

在我的Web應用程序中,我使用JSF和primefaces。 在一些按鈕上我有耗時的功能。在此期間,我想顯示一個加載動畫,直到整個網站完全建成。這我通過調用函數showLoading()和hideLoading()是這樣做的:顯示加載動畫延遲

<p:commandLink oncomplete="hideLoading();" onstart="showLoading()" process="@form" update="@form" actionListener="#{dummyController.dummyMethod}" 
Content 
</p:commandLink> 

裏面的功能,我只是顯示/ DIV hidings的對象具有指定ID:

function showLoading() { 
    $("#loader").show(); 
} 

這一切工作正常。 現在我只想顯示加載動畫,如果頁面需要超過一秒的構建。這就是爲什麼我修改的功能是這樣的:

function showLoading() { 
    $(#loader").delay(1000).show(0); 
} 

function hideLoading() { 
    $("#loader").clearQueue(); 
    $("#loader").hide(); 
} 

我在這點問題:有時加載器工作正常,但在某些情況下,它不會出現。 我的建議:showLoading在不同的時間被調用(由客戶管理)。有時它在開始時被稱爲正確,但有時其他操作在showLading之前執行,因此建立頁面的其餘部分不到一秒鐘。

有人有任何建議來解決這個問題嗎?也許用Javascript中的多線程(我讀了一些關於Web Workers的內容...)

感謝您的幫助。

+0

http://javaevangelist.blogspot.nl/2014/02/jsf-22-tip-of-day-using -jsf-ajax-events.html –

回答

0

從jQuery delay頁:

的.delay()方法是最適合排隊jQuery效果之間延遲。因爲它是有限的 - 例如,它不提供取消延遲的方法.delay()不是JavaScript本地setTimeout函數的替代品,這對於某些用例可能更合適。

我想你可以使用的setTimeout javascript函數,這樣的事情

var timer; 

function showLoading() { 
    timer = setTimeout(function(){ 
          $(#loader").show(0); 
         }, 1000); 
} 

function hideLoading() { 
    if(timer){ 
     clearTimeout(timer); 
    } 
    $("#loader").hide(); 
} 
+0

當我使用setTimeout時,所有頁面進程停止一秒鐘,直到顯示加載器。但在我的情況下,這些進程(構建頁面,等待第二個顯示加載器)需要並行運行。 – filla2003