Как получить позицию мыши в jQuery без mouse-событий?

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

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

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

5 ответов


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


вы не можете прочитать положение мыши в 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

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

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


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

пример:

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

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

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

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