Как получить положение мыши в jQuery без мышиных событий? - PullRequest
91 голосов
/ 23 декабря 2010

Я хотел бы получить текущую позицию мыши, но я не хочу использовать:

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

потому что мне просто нужно получить должность и обработать информацию

Ответы [ 6 ]

143 голосов
/ 23 декабря 2010

Я не верю, что есть способ запросить положение мыши, но вы можете использовать обработчик mousemove, который просто хранит информацию, поэтому вы можете запросить сохраненную информацию.

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) {
        // ....
    }
});

Но почти весь код, кроме кода setTimeout и т. П., Запускается в ответ на событие, и большинство событий определяют положение мыши.Итак, ваш код, который должен знать, где находится мышь, вероятно, уже имеет доступ к этой информации ...

26 голосов
/ 23 декабря 2010

Вы не можете прочитать положение мыши в jQuery без использования события. Во-первых, обратите внимание, что свойства event.pageX и event.pageY существуют для любого события, поэтому вы можете сделать:

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

Другой вариант - использовать замыкание для предоставления всему коду доступа к переменной, которая обновляется обработчиком перемещения мыши:

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

// do something with mouseX and mouseY
10 голосов
/ 27 сентября 2012

Я использовал этот метод:

$(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);
}

Таким образом, я всегда буду сохранять расстояние от вершины, сохраненное в y, и расстояние слева, сохраненное в x.

6 голосов
/ 14 мая 2013

Более того, mousemove события не инициируются, если вы выполняете перетаскивание над окном браузера.Для отслеживания координат мыши во время перетаскивания вы должны прикрепить обработчик для события document.ondragover и использовать его свойство originalEvent.

Пример:

var globalDragOver = function (e)
{
    var original = e.originalEvent;
    if (original)
    {
        window.x = original.pageX;
        window.y = original.pageY;
    }
}
2 голосов
/ 13 марта 2019

use window.event - он содержит последний event и как любой event содержит pageX, pageY и т. Д. Работает для Chrome, Safari, IE, но не FF.

0 голосов
/ 04 августа 2015

я сталкивался с этим, малышом было бы неплохо поделиться ... что вы, ребята, думаете.

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

и бум, вот оно у нас ..

...