慕虎7371278
2023-08-18 16:16:24
下面的代碼在30s用戶進入頁面 30 秒后發送 Google Analytics 事件。setTimeout(function(){
gtag('event', '30s');
}, 30000);但是當用戶最小化窗口時,該事件仍然會觸發。我真正想要的是一種在用戶最小化頁面時“暫?!钡姆椒╯etTimeout,并且當用戶最大化頁面時,setTimeout從停止的那一刻起繼續計數。我試圖將聲明放入setTimeout其中hasFocus,但它沒有按預期工作。有辦法做到嗎?
2 回答

繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
您可以使用頁面可見性 API來檢測頁面焦點何時丟失。隱藏時,清除現有超時,并將剩余時間設置為變量;顯示時,設置setTimeout
剩余時間。大致如下:
let run = false;
const fn = () => {
? gtag('event', '30s');
? run = true;
};
let timeoutId;
let runAt;
let timeLeft = 30_000;
const resume = () => {
? runAt = Date.now() + timeLeft;
? timeoutId = setTimeout(fn, timeLeft);
};
resume();
document.addEventListener('visibilitychange', () => {
? if (document.hidden) {
? ? timeLeft = runAt - timeLeft;
? ? clearTimeout(timeoutId);
? } else if (!run) {
? ? resume();
? }
});
添加回答
舉報
0/150
提交
取消