亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

setTimeout() 在 hasFocus() 內部時不起作用

setTimeout() 在 hasFocus() 內部時不起作用

慕虎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();

? }

});


查看完整回答
反對 回復 2023-08-18
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

您可以使用 document.hidden:


setInterval(() => console.log(document.hidden), 1000)


查看完整回答
反對 回復 2023-08-18
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號