2010-03-25 20 views
1

即時進行一些測試以檢查用戶是否「離開」(無效);jquery - 決定用戶是否「離開」

function away_status(){ 
    $("#away_stat_update").everyTime(1000, function(i) { 
     var number = Number($(this).html()); 
     if(number == 20) { 
      // set user as away 
      alert("user away"); 
     } 
     if(number > 20) { 
      $("*").mousemove(function(e){ 
       $("#away_stat_update").html(0); 
       var number = Number(0); 
       // reset user to being online 
       alert("user back online"); 
      }); 
     } 
     $("#away_stat_update").html(number + 1); 
    }); 
    $("*").mousemove(function(e){ 
     $("#away_stat_update").html(0); 
    }); 
} 
away_status(); 

唯一的問題是,當數大於20,鼠標移動它不斷提醒「用戶重新上線」,而不是做一次。這個號碼正在重置。

回答

2

我在一個稍微不同的方式回答這個問題 - 因爲我認爲它總是很高興優雅,與解決問題簡短的可能的代碼。

這個例子完全符合你想要的,完全可行。它不寫入數到DOM,它擁有在內存在JavaScript中 - 你可以把它寫到元素,如果你想顯示的號碼,但是這省去了每次檢索它。

警報也如您所描述的那樣工作。

var number = 0; 
var timer; 

function handle_mouse_move() { 
    if (number > 20) { 
     alert("User back online, was away for approx " + number + " seconds"); 
    } 
    number = 0; 
} 

function handle_timer() { 
    if (number === 20) { 
     alert("User away"); 
    } 
    number++; 
    timer = window.setTimeout(function() { handle_timer(); }, 1000); 
} 

$(document).ready(function() { 
    timer = window.setTimeout(function() { handle_timer(); }, 1000); 

    $("*").mousemove(function(e){ 
     handle_mouse_move(); 
    }); 
}); 
+0

完美,謝謝。這就是我正在尋找的東西。 – 2010-03-25 10:11:53

+0

我很高興我能幫上忙。 – Fenton 2010-03-25 10:21:42

0

您在同一個方法中連接了多個mousemove事件,這些事情都無濟於事......所以每當計時器過去時您都附加了兩個新的事件處理程序。組合並移動mousemove事件代碼,並將其移出away_status()方法。

至於復位,在第一MouseMove事件處理程序的變化:

var number = Number(0); 

number = Number(0); // or just = 0; 

注意我們去掉了var ......它看起來是一個範圍界定問題。

0
$("*").mousemove(function(e){ 
    // ... 
}); 

這將爲mousemove事件分配一個事件處理程序,該事件處理程序將保留在那裏直到您將其刪除。

0

看起來您每次執行回調函數時都會添加一個mousemove事件,即每秒一次。

function away_status(){ 
    $("#away_stat_update").everyTime(1000, function(i) { 
     var number = Number($(this).html()); 
     if(number == 20) { 
      // set user as away 
      alert("user away"); 
     } 
     $("#away_stat_update").html(number + 1); 
    }); 
} 
away_status(); 

$("*").mousemove(function(e){ 
    $("#away_stat_update").html(0); 
    alert("user back online"); 
}); 

這樣,您只需設置mousemove事件一次,並且不需要解除綁定。注意:此重置次數,只要鼠標移動時,它不會等到數> 20

相關問題