如何在没有鼠标事件的情况下在jQuery中获得鼠标位置?

Mar*_*cka 97 mouse jquery position

我想获得当前的鼠标位置,但我不想使用:

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

因为我只需要获得位置并处理信息

T.J*_*der 150

我不相信有一种查询鼠标位置的方法,但您可以使用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) {
        // ....
    }
});
Run Code Online (Sandbox Code Playgroud)

但是除了代码之外,几乎所有代码setTimeout都会响应事件而运行,并且大多数事件都提供鼠标位置.所以你的代码需要知道鼠标可能已经访问过那些信息......

  • @TJCrowder我认为相当明显,他说有一个事件没有提供鼠标位置,回应声称"几乎所有(所有?)"事件提供鼠标位置的答案. (9认同)
  • `$(window).load(function(e){console.log(e.pageX,e.pageY);});`为鼠标位置返回undefined (7认同)
  • 在@TJCrowder辩护中,他几乎说了所有话。通过回答没有帮助的人并不是那么有用或有目的。我认为这个答案的重点是向用户表明,在他的示例中,他不必使用鼠标移动...他可以使用任何东西。用户没有明确说没有事件就获取它,TJCrowder指出几乎所有代码都在某些事件后发生。当然,他提到此事后,展示了一种可行的方法来实现自己需要的功能。无论如何,答案对我有帮助。 (2认同)

lon*_*day 26

如果不使用事件,您无法在jQuery中读取鼠标位置.首先请注意,任何事件都存在event.pageXevent.pageY属性,因此您可以这样做:

$('#myEl').click(function(e) {
    console.log(e.pageX);
});
Run Code Online (Sandbox Code Playgroud)

您的另一个选择是使用闭包来让您的整个代码访问由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
Run Code Online (Sandbox Code Playgroud)


Nic*_*ste 10

我用这个方法:

$(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);
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我将始终保持y中保存的顶部距离和x中保存的左边距离.


Alf*_*she 6

此外,mousemove如果您在浏览器窗口上执行拖放操作,则不会触发事件.要在drag'n'drop期间跟踪鼠标坐标,您应该为document.ondragover事件附加处理程序并使用它的originalEvent属性.

例:

var globalDragOver = function (e)
{
    var original = e.originalEvent;
    if (original)
    {
        window.x = original.pageX;
        window.y = original.pageY;
    }
}
Run Code Online (Sandbox Code Playgroud)