Làm thế nào để có được vị trí chuột trong jQuery mà không có sự kiện chuột?


101

Tôi muốn có được vị trí chuột hiện tại nhưng tôi không muốn sử dụng:

$(document).bind('mousemove',function(e){ 
        $("#log").text("e.pageX: " + e.pageX + ", e.pageY: " + e.pageY); 
}); 

bởi vì tôi chỉ cần nhận vị trí và xử lý thông tin


3
.pageX và .pageY có thể được đọc ra khỏi bất kỳ sự kiện nào, không chỉ .mousemove (). Ví dụ: có lẽ bạn muốn biết chính xác nơi người dùng đã nhấp vào bên trong một div cụ thể: Đây là một ví dụ trong đó chúng tôi lắng nghe sự kiện nhấp chuột bên trong một div cụ thể được gọi là #special. ..... docs.jquery.com/…
Haim Evgi

điều này cũng có thể giúp bạn tìm vị trí con trỏ chuột cho các trang web đáp ứng. kvcodes.com/2014/03/…
Kvvaradha 16/02/16

Câu trả lời:


151

Tôi không tin là có cách để truy vấn vị trí chuột, nhưng bạn có thể sử dụng mousemovetrình xử lý chỉ lưu trữ thông tin, vì vậy bạn có thể truy vấn thông tin đã lưu trữ.

jQuery(function($) {
    var currentMousePos = { x: -1, y: -1 };
    $(document).mousemove(function(event) {
        currentMousePos.x = event.pageX;
        currentMousePos.y = event.pageY;
    });

    // ELSEWHERE, your code that needs to know the mouse position without an event
    if (currentMousePos.x < 10) {
        // ....
    }
});

Nhưng hầu hết tất cả các mã, ngoại trừ setTimeoutmã và tương tự, đều chạy để đáp ứng với một sự kiện và hầu hết các sự kiện đều cung cấp vị trí chuột. Vì vậy, mã của bạn cần biết vị trí của con chuột có thể đã có quyền truy cập vào thông tin đó ...


7
$(window).load(function(e){ console.log(e.pageX,e.pageY); });trả về không xác định cho vị trí chuột
spb 22/12/11

9
@TJCrowder Tôi nghĩ khá rõ ràng, anh ấy đang nói rằng có một sự kiện ngoài đó không cung cấp vị trí chuột, để phản hồi câu trả lời khẳng định rằng các sự kiện "gần như tất cả (tất cả?)" Cung cấp vị trí chuột.
fabspro

2
Trong bảo vệ @TJCrowder, anh ấy KHÔNG nói GẦN tất cả. Bằng cách trả lời một câu không phải là tất cả đều hữu ích hoặc có mục đích. Tôi nghĩ rằng điểm của câu trả lời này là cho người dùng thấy rằng trong ví dụ của anh ta, anh ta không phải sử dụng di chuyển chuột ... anh ta có thể sử dụng bất cứ thứ gì. Người dùng không nói cụ thể là nhận được nó mà không có sự kiện nào, mà TJCrowder chỉ ra rằng gần như TẤT CẢ mã đều xảy ra sau MỘT SỐ sự kiện. Tất nhiên anh ấy đề cập đến điều này SAU KHI chỉ ra một cách khả thi để làm cho chức năng của riêng bạn thực hiện những gì anh ấy cần. Câu trả lời đã giúp tôi anyway.
Tyler

1
@Tyler: Cảm ơn. :-) "gần như tất cả" là một thay đổi sau đó, ngôn ngữ ban đầu của tôi quá mạnh.
TJ Crowder

26

Bạn không thể đọc vị trí chuột trong jQuery mà không sử dụng sự kiện. Trước tiên, hãy lưu ý rằng các thuộc tính event.pageXevent.pageYthuộc tính tồn tại trên bất kỳ sự kiện nào, vì vậy bạn có thể làm:

$('#myEl').click(function(e) {
    console.log(e.pageX);
});

Tùy chọn khác của bạn là sử dụng bao đóng để cấp cho toàn bộ mã của bạn quyền truy cập vào một biến được cập nhật bởi trình xử lý di chuyển chuột:

var mouseX, mouseY;
$(document).mousemove(function(e) {
    mouseX = e.pageX;
    mouseY = e.pageY;
}).mouseover(); // call the handler immediately

// do something with mouseX and mouseY

Một vấn đề với điều này là bạn không có pageX và pageY hoặc clientX và clientY khi kéo trong firefox ... Có cách nào để lấy pageY khi kéo không?
JamesTBennett

11

Tôi đã sử dụng phương pháp này:

$(document).mousemove(function(e) {
    window.x = e.pageX;
    window.y = e.pageY;
});

function show_popup(str) {
    $("#popup_content").html(str);
    $("#popup").fadeIn("fast");
    $("#popup").css("top", y);
    $("#popup").css("left", x);
}

Bằng cách này, tôi sẽ luôn có khoảng cách từ đỉnh được lưu trong y và khoảng cách từ trái được lưu trong x.


6

Hơn nữa, mousemovecác sự kiện sẽ không được kích hoạt nếu bạn thực hiện kéo 'không' thả trên cửa sổ trình duyệt. Để theo dõi tọa độ chuột trong quá trình drag'n'drop, bạn nên đính kèm trình xử lý cho document.ondragoversự kiện và sử dụng thuộc tính originalEvent.

Thí dụ:

var globalDragOver = function (e)
{
    var original = e.originalEvent;
    if (original)
    {
        window.x = original.pageX;
        window.y = original.pageY;
    }
}

2

sử dụng window.event- nó chứa cuối cùng eventvà như bất kỳ eventchứa nào pageX, pageYv.v. Hoạt động cho Chrome, Safari, IE nhưng không phải FF.


0
var CurrentMouseXPostion;
var CurrentMouseYPostion;

$(document).mousemove(function(event) {
    CurrentMouseXPostion = event.pageX;
    CurrentMouseYPostion = event.pageY;
});

Tạo eventListener trên đối tượng chính, trong trường hợp của tôi là đối tượng document, để lấy chuột cuộn mọi khung và lưu trữ chúng trong các biến toàn cục, và như vậy bạn có thể đọc chuột Y & Z bất cứ khi nào bạn thích, bất cứ nơi nào bạn muốn.


-1

Tôi đã xem qua điều này, rất vui được chia sẻ ...

các bạn nghĩ sao?

$(document).ready(function() {
  window.mousemove = function(e) {
    p = $(e).position();  //remember $(e) - could be any html tag also.. 
    left = e.left;        //retrieving the left position of the div... 
    top = e.top;          //get the top position of the div... 
  }
});

và bùng nổ, chúng tôi có nó ..

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.