倒數(shù)計(jì)時(shí)為0時(shí)處罰函數(shù),有一種情況是當(dāng)四個(gè)倒數(shù)都為0時(shí)會同時(shí)觸發(fā)ajax()方法,這種情況我只想觸發(fā)一次,該怎麼做?
我試過宣告一個(gè)count去計(jì)數(shù),超過1就不執(zhí)行ajax()方法,但是這樣有可能後面的倒數(shù)都不執(zhí)行的,因?yàn)椴粷M足count不超過1的邏輯,該怎麼做呢?
html
<span class="clock">4:00</span>//倒計(jì)時(shí)是循環(huán)的,到0后恢復(fù)為4分鐘,其他一樣
<span class="clock">3:00</span>
<span class="clock">2:00</span>
<span class="clock">1:00</span>
js
$('.clock').each(function(elem,index){
$(this).on('finish',function(){//倒計(jì)時(shí)為0時(shí)觸發(fā)ajax()方法
ajax();
});
});
光陰似箭催人老,日月如移越少年。
JS 單執(zhí)行緒所以不會同時(shí)觸發(fā),你可以維護(hù)一個(gè)變數(shù)記錄上次執(zhí)行函數(shù)的時(shí)間,隔太近則不執(zhí)行第二遍。
定義一個(gè)變數(shù)作為請求狀態(tài),預(yù)設(shè)為false,表示目前無請求,請求開始前判斷是否為true,是則說明上次請求未仍在繼續(xù),否則設(shè)為true,並開始執(zhí)行請求,Ajax的complete 方法設(shè)定無論成功與否都還原該狀態(tài)為false,以便下次請求可用。也就是說,用一個(gè)全域或局部變數(shù)控制狀態(tài)。
嘗試這樣:
let loading = false
$('.clock').each(function () {
$(this).on('finish', function () {
if (loading) return
loading = true
ajax({
finish: function () {
loading = false
}
})
})
})