2012-02-09 62 views
1

我寫了下面這個簡單的函數,它接受兩個參數,這兩個參數主要來自服務器返回的另一個json函數。jQuery:超時/延遲與通知功能?

var timing = 10000; 

function notificationOutput(type, message) { 
    console.log('output now!'); 
    var note = $('.notification'); 
    note.css('display', 'none'); 
    if (type == "success") { note.removeClass('warning').addClass('success'); } 
    if (type == "warning") { note.removeClass('success').addClass('warning'); } 
    note.find('.message').html(message); 
    note.slideDown(function() { 
     note.delay(timing).slideUp(); 
    }); 
} 

它所做的只是從頁面頂部向下滑動一個欄,以顯示一條消息(成功或警告)。 timing變量用於通知欄停留10秒。所以當功能被觸發時,我想要欄爲slideDown(),保持該位置10秒,然後再次輸入slideUp()

但是現在,當功能被觸發時,會出現一個奇怪的超時,直到出現通知欄。這意味着當函數被觸發時,我現在在那裏的輸出console.log()會立即記錄在我的JS控制檯中,但是slideDown()需要幾秒鐘纔會出現!這是爲什麼?

我想(如output now在控制檯登錄在同一時間)slideDown()立即發生。爲什麼會有延遲發生?

感謝您的幫助!

+0

注意:'note.slideDown()。delay(timing).slideUp();'也可以。這裏不需要使用完成的回調。 – Yoshi 2012-02-09 09:13:07

回答

0

那裏沒有什麼明顯的。我會嘗試修剪代碼,直到按預期滑落。刪除回調,刪除HTML集,刪除成功/警告類的制定者,輸出到控制檯之前選擇的音符元素,替換立即顯示幻燈片等


還嘗試調用.stop(true,true)注意事項:note.stop(true,true).slideDown();。這是爲了防止某些其他動畫忙碌,並且正在向下滑動排隊。

+0

奇怪,那'note.stop(true,true).slideDown()'完成了這項工作。當我將它設置爲show()時,它確實沒有問題。不知道這個排隊可能來自哪裏。有任何想法嗎? – matt 2012-02-09 09:29:33

+0

不是。也許還有其他一些動畫被偶然地粘貼到它上面。如果你真的想知道,那麼我會盡可能多地刪除/禁用其他任何東西,直到它按預期工作。 – Supr 2012-02-09 09:35:57

+0

嘿,另一個問題。我有與'delay()'函數相同的問題...事件通過'時間'變量設置爲10000通知停留只有3秒左右。 – matt 2012-02-09 17:26:47

0

試試這個

note.slideDown().delay(timing).slideUp(); 
0

我認爲問題可能是由了slideDown使用的easing功能是swing默認情況下(這是logaritmic)。嘗試使用直線,也許嘗試使用更快了slideDown時間

note.slideDown(400, 'linear').delay(timing).slideUp(400, 'linear'); 
0

你是不是傳遞一個值durationslideDown。嘗試:

note.slideDown(1000, function() { 
    note.delay(timing).slideUp(); 
});