2017-06-05 14 views
-1

ユーザーが自分のウェブサイトに45秒間いたときに関数を呼び出すには、どのようにsetTimeout()または他のjavascriptメソッドを使用しますか?1つのページだけでなく、サイト全体の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に保存し、を使用してタイマーを開始し、ユーザがあなたのサイトから行くときにonbeforeUnlaodイベントを聞く必要があります。

また、ユーザーがlastTimeのlocalStorageに戻ってきたら、タイマーを再設定します。ここで

ちょうどsetTimeout機能を持つすべてのページにそのjavascriptのファイルを追加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

です。ユーザーが他のページに行くとき、それは自動的にリセットされます:

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

私は、ユーザーがページ上で45秒以上である場合は、時間を節約したい正しく理解している場合。次に、localStorageを使用してください。あなたはその時間の使用にアクセスしたいときはいつでも

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

:次に

let timer = new Date() 

(ミリ秒単位)localStorage上の差異を保存:まず、彼は日付オブジェクトをサイトにされている時刻を取得

localStorage.getItem("Time on site") 

内のページがロードタイマーを実行します。

let timer 
window.addEventListener('load',() => { 
    timer = new Date() 
}) 
関連する問題