Как получить положение мыши в jQuery без событий мыши?

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

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

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

Ответ 1

Я не верю, что есть способ запросить позицию мыши, но вы можете использовать обработчик 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 и т.д., запускается в ответ на событие, а большинство событий предоставляют положение мыши. Таким образом, ваш код, который должен знать, где мышь, вероятно, уже имеет доступ к этой информации...

Ответ 2

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

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

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

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

// do something with mouseX and mouseY

Ответ 3

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

$(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.

Ответ 4

Кроме того, события mousemove не запускаются, если вы выполняете drag'n'drop над окном браузера. Чтобы отслеживать координаты мыши во время drag'n'drop, вы должны присоединить обработчик для события document.ondragover и использовать его свойство originalEvent.

Пример:

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

Ответ 5

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

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

и стрела, там у нас есть.