2017-06-05 145 views
-1

我將如何使用setTimeout()或任何其他javascript方法來調用一個函數,當用戶已經在我的網站上了45秒。setTimeout爲整個網站,而不僅僅是一個頁面

我用的是下面:

setTimeout(function(){ ....code.... }, 45000); 

但是,如果用戶導航在頁面上和前45秒網站上的其他網頁時,計時器被重置。

我希望setTimeout適用於用戶登錄第一頁的時間,而不管他們現在處於什麼頁面。

我將在網站上的每一頁上都包含此javascript。

謝謝。

+2

它不這樣工作。您必須在每個單獨的頁面上啓動計時器。您可以節省訪客首次到達本地存儲的時間,然後計算出適當的差異。 – deceze

+1

您可以使用本地存儲在頁面訪問之間存儲任何類型的數據。你可以這樣做:localStorage.setItem('key','value');更好的選擇是有服務器端超時計算。 –

+0

你可以從這個選項得到想法https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_coming_soon_js –

回答

2

當用戶訪問您的網頁時,您必須將時間戳存儲到localStorage,並在用戶從您的網站上跳轉時使用setTimeOut開始計時並收聽onbeforeUnlaod事件。

再次當用戶回來查詢localStorage的lastTime並重新啓動計時器。

這裏是一個fiddle

var your_delay = 5*1000; 
window.init= function(){ 
    var start = localStorage.getItem('start'); 
    var end = new Date().getTime(); 
    if(start){ 
     if(end-start<your_delay) 
      setTimeout(action,your_delay-(end-start)); 
    }else{ 
     setTimeout(action,your_delay); 
    } 
} 
window.onbeforeunlaod = function(){ 
     /* Send the timer to server if you want it to be consistant across browser */ 
} 


window.action = function(){ 
    alert("Hi"); 
} 

init(); 
+1

你在'onbeforeUnlaod'上做了什麼... ...? – deceze

+0

@deceze我想象一下,如果你想要這個邏輯,就去掉當地的商店鑰匙...... – Seabizkit

+0

@Seabizkit如果你在那裏存儲時間戳,那麼它就沒有什麼意義,所以它可以在下一頁中找到... – deceze

2

只是,javascript文件添加到所有與setTimeout功能的頁面。當用戶進入到其他頁面將自動復位:

setTimeout(() => { ... }, 45e3)

如果我理解正確,您也想節省時間,如果用戶在頁面上超過45秒。然後使用localStorage。首先讓他一直在網站上有一個日期對象的時間:

let timer = new Date() 

然後保存在localStorage(以毫秒爲單位)的區別:每當你想訪問的時間使用

localStorage.setItem("Time on site", new Date().getTime() - timer.getTime()) 

localStorage.getItem("Time on site") 

執行定時器當頁面加載內:

let timer 
window.addEventListener('load',() => { 
    timer = new Date() 
}) 
相關問題