我想知道是否有一個簡單的方法來延遲點擊事件處理一段指定的時間。例如,我們可以有延遲點擊事件
$('#someElement').on('click', 'a', function(event) {
var duration = 1000;
someAsynchronousFunction(); // Start as soon as click occurs
... // Code to delay page transition from taking place for duration specified
});
所以在這種情況下,異步函數將保證運行一段時間。如果它沒有完成它在這個時間的工作,我不會在意,只是想繼續頁面轉換。我知道這是可能實現的東西親近
event.preventDefault();
...
setTimeout(function(){
window.location = $(this).attr('href');
}, duration);
但這隻有當被點擊的鏈接進入到一個整版的作品。我希望能夠處理用於Ajax調用的鏈接(它不會更改url)。
我注意到mixpanel庫有一個函數track_links,它似乎完成了頁面轉換的延遲,雖然該函數似乎不支持我提到的對ajax鏈接的支持。
任何幫助將是巨大的!謝謝。
編輯:所以我想我的問題不完全清楚,所以我會盡力在下面提供一些細節。
我不在乎async函數是否完成運行!我只想給它保證它有一定的時間來執行,之後我不在乎它是否完成,並且希望繼續進行頁面轉換。
即我想延遲不是異步函數的開始,而是頁面轉換的開始。異步功能會在點擊發生後立即開始運行。
希望這會更清楚一點!
我不明白,你想延遲執行功能嗎?什麼? – Qchmqs
我應該更具體,對不起。我希望異步函數在鏈接被點擊後立即啓動,但是我希望它在頁面更改之前能夠保證一定的時間運行(並且希望能夠完成它正在執行的操作)。 – nitarshan
看起來你陷入了JavaScript中最古老的陷阱:在異步事件完成後,希望它能夠執行的東西得到延遲。不要這樣做:使用回調或承諾。你不知道'someAsynchronousFunction();'調用需要多長時間。 – msanford