2009-03-04 88 views
15

Tôi có thể tìm vị trí con trỏ. Nhưng tôi cần phải tìm hiểu xem con chuột có ổn định không. Nếu con chuột không được di chuyển trong hơn 1 phút, thì chúng ta phải cảnh báo người dùng.Phát hiện khi chuột không di chuyển

Làm thế nào có thể, có sự kiện đặc biệt nào cho điều này không? (Chỉ dành cho IE trong javascript)

Trả lời

36

Set một thời gian chờ khi con chuột được di chuyển một phút trong tương lai, và nếu chuột được di chuyển, xóa thời gian chờ:

var timeout; 
document.onmousemove = function(){ 
    clearTimeout(timeout); 
    timeout = setTimeout(function(){alert("move your mouse");}, 60000); 
} 
+0

tôi thấy một vấn đề tiềm năng: Mỗi cuộc gọi đến setTimeout trả về một số cho một quầy tính tiền.Khi nào nó quấn quanh và chuyện gì sẽ xảy ra? Tôi đề nghị một setInterval (cập nhật, 1000) thay vào đó, trong đó 'update' tăng một biến mà sự kiện onmousemove reset. Nếu biến được cập nhật trên 60, người dùng thông báo – some

+2

Hãy cảnh báo, điều này không còn hoạt động trong Chrome – Jay

+2

@Jay hoạt động cho tôi –

1

Có cách nào để đặt hẹn giờ bắt đầu tăng sau mỗi sự kiện di chuyển chuột không?

Nếu đến một phút thì hãy bật hộp tin nhắn, nhưng mỗi khi chuột di chuyển bộ hẹn giờ sẽ được đặt lại.

0

Bạn có thể sử dụng các sự kiện onmousemove. Bên trong nó, clearTimeout(), và setTimeout (your_warning, 1 phút).

0

Bạn có thể sử dụng this script/snippet để phát hiện vị trí con trỏ chuột và "nhớ" vị trí đó. Sau đó, sử dụng bộ đếm thời gian "setTimeout (...)" để kiểm tra vị trí, giả sử mỗi giây và nhớ thời gian đó.

Nếu hơn một phút trôi qua và vị trí không thay đổi, bạn có thể thông báo cho người dùng.

1

Có, bạn có một sự kiện onmousemove trong Javascript, vì vậy để đạt được những gì bạn cần bạn chỉ cần thực hiện mã như sau:

startTimer(); 
element.onmousemove = stopTimer(); //this stops and resets the timer 

Bạn có thể sử dụng mã này trên thẻ body của tài liệu chẳng hạn.

CẬP NHẬT: @Marius đã đạt được ví dụ tốt hơn phiên bản này.

0

Dưới đây là một chức năng một và làm điều đó có thể kiểm tra bất kỳ yếu tố cho phong trào:

function mouse (element, delay, callback) { 

    // Counter Object 
    element.ms = {}; 

    // Counter Value 
    element.ms.x = 0; 

    // Counter Function 
    element.ms.y = function() { 

     // Callback Trigger 
     if ((++element.ms.x) == delay) element.ms.callback(element, element.ms); 
    }; 

    // Counter Callback 
    element.ms.callback = callback; 

    // Function Toggle 
    element.ms.toggle = function (state) { 

     // Stop Loop 
     if ([0, "off"][state]) clearInterval(element.ms.z); 

     // Create Loop 
     if ([1, "on"][state]) element.ms.z = setInterval(element.ms.y, 1); 
    }; 

    // Function Disable 
    element.ms.remove = function() { 

     // Delete Counter Object 
     element.ms = null; return delete element.ms; 
    }; 

    // Function Trigger 
    element.onmousemove = function() { 

     // Reset Counter Value 
     element.ms.x = -1; 
    }; 

    // Return 
    return element.ms; 
}; 

Cách sử dụng: mouse(element, delay, callback)

Ví dụ: Thực hiện một ẩn video player chuột sau 5 giây khi không hoạt động và toàn màn hình

let x = mouse(video, 5000, function (a) { 
    if (document.webkitIsFullScreen) video.style.cursor = "none"; 
}); 

x.toggle(1); addEventListener("mousemove", function() { 
    video.style.cursor = "auto"; 
}); 

Chat Room AFK (45 Giây) (giả sử bạn có một hộp chat và một chức năng gửi tin nhắn):

let x = mouse(chatBox, (45e3), function (a) { 
    chatBox.send({ text: chatBox.username + " is AFK.", italic: true }); 
}); 

x.toggle(1); x.addEventListener("mousemove", function() { 
    chatBox.send({ text: chatBox.username + " is no longer AFK", italic: true }); 
}); 
Các vấn đề liên quan