如何检测特定元素上的mouseenter方向

ahr*_*ren 8 javascript math angle

我目前有一个功能,可以检测鼠标输入的方向.它返回每个部分的整数(0-3),如下所示.

例1

我试图找出如何更改此函数以基于此插图生成输出:

例2

基本上,我只想弄清楚用户是从左边还是右边输入图像.我曾尝试过几次试错,但我对这种类型的数学并不擅长.

我已经设置了一个带控制台输出JSFiddle作为示例.

确定方向的功能是:

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

pos对象在哪里:{x: e.pageX, y: e.pageY},$el是包含目标元素的jQuery对象.

Tom*_*azy 5

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

  • 只是一点挑剔的评论:您仍然无法真正确定 mouseenter 移动的方向。您只需确定光标首先到达图形的哪一半。因此,如果您快速移动鼠标,您可以从左侧输入图形,但最终会进入右半部分。如果您想处理这种行为,您可能需要在每次 mousemove 时保存鼠标坐标,并将上次坐标与 mouseenter 事件之后的坐标进行比较。但我认为上述答案可能适用于任何现实生活中的案例。 (4认同)