如何检测鼠标在特定元素上的方向

问题描述:

我目前有一个函数可以检测鼠标输入的方向。它会为每个部分返回一个整数(0-3),如下所示。如何检测鼠标在特定元素上的方向

Example 1

我试图找出如何改变这种功能来生成基于此图的输出:

Example 2

基本上,我只是想,如果用户要弄清楚正在从左侧或右侧进入图像。我已经尝试了几次尝试和错误,但我不擅长这种数学。

我已经设置了一个JSFiddle with a console output为例。

来确定方向的功能是:

function determineDirection($el, pos){ 
    var w = $el.width(), 
     h = $el.height(), 
     x = (pos.x - $el.offset().left - (w/2)) * (w > h ? (h/w) : 1), 
     y = (pos.y - $el.offset().top - (h/2)) * (h > w ? (w/h) : 1); 

    return Math.round((((Math.atan2(y,x) * (180/Math.PI)) + 180))/90 + 3) % 4; 
} 

pos是一个对象:{x: e.pageX, y: e.pageY},和$el是含有目标元素的jQuery对象。

更换return Math.round((((Math.atan2(y,x) * (180/Math.PI)) + 180))/90 + 3) % 4;return (x > 0 ? 0 : 1);

,我更喜欢(简单的想法)另一种选择:

function determineDirection($el, pos){ 
    var w = $el.width(), 
     middle = $el.offset().left + w/2;   
    return (pos.x > middle ? 0 : 1); 
} 
+0

哇,这是令人尴尬的简单(我会尽快,我可以接受)。这里是其他人的JSFiddle链接:http://jsfiddle.net/aBK5Q/2/ – ahren

+3

只是一些点点滴滴的评论:你仍然不能真正确定mouseenter运动的方向。你只需确定你的光标第一次到达你图形的哪一半。所以,如果你快速移动鼠标,你可以从左边输入图形,但最终在右半边。如果你想处理这种行为,你可能需要在鼠标移动时保存你的鼠标坐标,并在mouseenter事件之后将你的最后坐标与坐标进行比较。但我认为上述答案对于任何现实生活中的情况都适用。 – basilikum