2009-10-22 40 views
6

Tôi có một hàm trong javascript di chuyển một div tùy thuộc vào vị trí của chuột. Hàm này được đặt trên một hàm setInterval() và được thực thi mỗi giây. Tôi cần chụp vị trí chuột như sau:chụp vị trí chuột trên setInterval() trong Javascript

function mousemov() { 
    document.getElementById("myDiv").style.left = Event.clientX; //don't work 
} 

window.onload = function() { 
    setInterval("mousemov()",1000); 
} 

Ps: Tôi không thể sử dụng sự kiện mousemove vì chức năng phải được thực thi ngay cả khi chuột bị dừng.

Cảm ơn bạn đã trợ giúp!

+1

Tại sao không sử dụng sự kiện mousemove? Bạn không thực sự muốn thay đổi tọa độ của 'div' nếu con chuột không di chuyển. Chỉ cập nhật tọa độ trên mousemove. –

+1

Nếu chuột bị dừng, bạn không thể sử dụng giá trị trước đó mà bạn nhận được trên sự kiện mouseMove? – pgb

Trả lời

7

Thời gian duy nhất mà bạn có thể truy cập vào các đối tượng sự kiện là trong việc thực hiện các phương thức thụ lý sự kiện. Vì vậy, những gì bạn cần làm là tạo ra một sự kiện OnMouseMove trên tài liệu và lưu tọa độ chuột trong một đối tượng có thể truy cập toàn cầu. Sau đó, bạn có thể truy cập các giá trị này từ bất kỳ nơi nào khác trong tập lệnh của mình để xác định vị trí chuột.

Dưới đây là một ví dụ (bạn không sử dụng jQuery, vì vậy đây là thẳng mã DOM):

document.onmousemove = function(e) { 
    var event = e || window.event; 
    window.mouseX = event.clientX; 
    window.mouseY = event.clientY; 
} 

function mousemov() { 
    document.getElementById("myDiv").style.left = window.mouseX; 
} 

window.onload = function() { 
    setInterval(mousemov, 1000); 
} 

tôi nên lưu ý rằng clientX và clientY không dùng di chuyển vào tài khoản. Bạn sẽ cần phải lấy các dời dời cuộn và áp dụng chúng cho các giá trị trả về.

+3

+1. Bạn có thể muốn giải thích rằng một đối tượng sự kiện không được tạo trừ khi bạn chụp một sự kiện. Vì vậy, những gì ông về cơ bản cần làm là nắm bắt sự kiện mousemove và lưu trữ vị trí chuột trong một nơi có thể truy cập trên toàn cầu và sau đó sử dụng giá trị đó trong hàm interval. –

+3

Ngoài ra, 'setInterval (" functionName() ", 1000)' không phải là một thực hành tốt (nó tương tự như 'eval()'). Đi cho một trong hai 'setInterval (mousemov, 1000)' hoặc 'setInterval (function() {mousemove()}, 1000)' –

+1

FYI 'clientX' /' clientY' loại trừ bất kỳ cuộn tài liệu nào có thể tồn tại. –

1

tốt, nếu bạn nghe di chuyển chuột cho tài liệu và lưu vị trí của tài liệu, sau đó, bất cứ khi nào bạn muốn, ví dụ: mỗi giây trong trường hợp của bạn, bạn có vị trí chuột đăng ký mới nhất.

đây là một ví dụ jquery

$(document).ready(function() 
{ 
    $().mousemove(function(e) 
    { 
     window.mouseX = e.pageX; 
     window.mouseY = e.pageY; 
    }); 
}); 

và chức năng MouseMove của bạn sẽ là

function mousemov() { 
    document.getElementById("myDiv").style.left = window.mouseX; 
} 
Các vấn đề liên quan