2016-09-25 25 views
0

助けてください。ユーザーがページ上のアクティビティを完了した合計時間を確認する必要があります。私はjqueryコードを作った、このコードは、ユーザーが10秒間アイドル状態になっている場合、コードがアイドル時間を増加させるかどうかを調べます。しかし、このコードの問題は、ユーザーがそのページ上でアイドル状態(30秒間)で連続している場合、コードはアイドル時間に10秒+ 10秒+10秒合計30秒を追加する必要があることです。上記の例のように、アイドル時間には10秒しか追加されず、残りの20秒はスキップされます。ユーザーがmousemoveなどのようなアクティビティをタイムアウト後にページ上に実行したときにうまくいきますが、それはidletimeに10秒追加しますが、今度は10秒間だけでなくフルタイムスパンではありません。jqueryタイムアウト関数を1回呼び出した後でもう一度呼び出されていません

タイムアウトの可能性があります。タイムアウト関数が呼び出された後に再度呼び出されていません。連続したタイムアウト呼び出しが行われていないと思います。私はわかりません。ここ

は助けてくださいコード

var timeoutID; \t 
 
var start, end, pagefocustime = 0; 
 
var opentime, midtime = 0; 
 
var exacttime = 0; 
 
var inactivetime = 10000, idletime = 0; \t 
 
var window_focus = true; 
 
$(document).ready(function() { 
 
    start = performance.now(); //Calculating Startup Time 
 
    midtime = start; 
 
    
 
    $(window).on('blur', function() { 
 
\t window_focus = false; 
 
    end = performance.now(); 
 
    pagefocustime += end - midtime; 
 
\t exacttime += end - midtime; 
 
    }) 
 

 
    $(window).on('focus', function() { 
 
\t window_focus = true; 
 
    midtime = performance.now(); 
 
    }) 
 
    
 
    if(window_focus){ 
 
\t function setup() { 
 
\t \t this.addEventListener("mousemove", resetTimer, false); 
 
\t \t this.addEventListener("mousedown", resetTimer, false); 
 
\t \t this.addEventListener("keypress", resetTimer, false); 
 
\t \t this.addEventListener("DOMMouseScroll", resetTimer, false); 
 
\t \t this.addEventListener("mousewheel", resetTimer, false); 
 
\t \t this.addEventListener("touchmove", resetTimer, false); 
 
\t \t this.addEventListener("MSPointerMove", resetTimer, false); 
 
\t \t startTimer(); 
 
\t } 
 
\t 
 
\t setup(); 
 
\t 
 
\t function startTimer() { 
 
\t \t // wait 10 seconds before calling goInactive 
 
\t \t timeoutID = window.setTimeout(goInactive, 10000); 
 
\t } 
 
\t 
 
\t function resetTimer(e) { 
 
\t \t window.clearTimeout(timeoutID); 
 
\t 
 
\t \t goActive(); 
 
\t } 
 
\t 
 
\t function goInactive() { 
 
\t \t idletime = idletime + inactivetime; 
 
\t \t console.log("I am called"); 
 
\t } 
 
\t 
 
\t function goActive() {  
 
\t \t startTimer(); 
 
\t } 
 

 
    } \t 
 
    $(window).on('beforeunload',function(){ 
 
    end = performance.now(); 
 
    pagefocustime += end - midtime; 
 
    console.log("Total page focus Time : " + pagefocustime); 
 
\t opentime = end - start; 
 
\t console.log("Total Page Open time : " + opentime); 
 
\t exacttime = pagefocustime - idletime; 
 
\t console.log("exact time : " + exacttime); 
 
    });    
 
});

です。 事前に感謝します

+0

jQueryを使用している場合は、 'addEventListener()'に対する7回の個別の呼び出しではなく、 '$(this)).on(" mousemove mousedown keypress etc "、resetTimer) – nnnnnn

答えて

0

「goInactive」メソッドの中で「startTimer」を呼び出して、もう一度チェックを開始することができます。

このコードでは、これらのイベント名をすべて配列に格納してから、map関数を使用してリスナーをアタッチすることができます。

関連する問題