jQuery:是否有机会在没有 "Offset"方法的情况下检测鼠标从哪一侧进入 div?

标签 jquery mouseover

有没有办法检测鼠标光标来自 div 的哪一侧?

目前我正在使用这种方法:

jQuery(this).bind('mousemove',function(e){
    offset_pos_x = parseInt(e.offsetX);
    offset_pos_y = parseInt(e.offsetY);
    ...

然后我查找鼠标在 div 内移动的距离(朝哪个方向)。

问题是,这个方法有点错误,因为我需要所有 4 个边,而不仅仅是两个,所以我必须检查 offsetX 和 offsetY。

如果我在 div 内移动鼠标,例如 X:+15,Y:-3(以像素为单位),我知道鼠标来自左侧,因为鼠标在 x 轴上移动了 15px,但在 x 轴上仅移动了 -3px y 轴。问题在于,当 X 和 Y 几乎相同时,我不知道鼠标是来自左侧还是顶部(例如)。

另外,根据我的另一个问题( jQuery: mouseenter/mousemove/mouseover not recognized with small div and fast mouse movement ),由于浏览器/操作系统的限制,该事件不会在 div 一侧的第一个像素上触发。因此,我的“entered_at”坐标并不那么准确 - 例如:

如果我在 div 内快速移动鼠标光标(从左侧),则“entered_at”坐标位于 x:17,y:76 处。现在,如果我在停止鼠标后将鼠标向左移动,例如 x:6,y:76,则起点和 offsetX 之间的差为负数,因此会触发“光标来自右侧”功能...

还有其他方法可以检测鼠标光标来自哪一侧吗?

您好, 帕特里克

最佳答案

我不会使用偏移量,而是使用 pageX/pageY (jQuery 标准化这些)。如果光标的第一个鼠标移动事件比任何其他边缘更靠近左边缘,则它来自左侧。您还可以考虑使用悬停事件,而不是 mousemove。

JSFiddle,由牙买加国旗提供。 http://jsfiddle.net/MJTkk/1/

function closestEdge(x,y,w,h) {
        var topEdgeDist = distMetric(x,y,w/2,0);
        var bottomEdgeDist = distMetric(x,y,w/2,h);
        var leftEdgeDist = distMetric(x,y,0,h/2);
        var rightEdgeDist = distMetric(x,y,w,h/2);
        var min = Math.min(topEdgeDist,bottomEdgeDist,leftEdgeDist,rightEdgeDist);
        switch (min) {
            case leftEdgeDist:
                return "left";
            case rightEdgeDist:
                return "right";
            case topEdgeDist:
                return "top";
            case bottomEdgeDist:
                return "bottom";
        }
}

function distMetric(x,y,x2,y2) {
    var xDiff = x - x2;
    var yDiff = y - y2;
    return (xDiff * xDiff) + (yDiff * yDiff);
}

关于jQuery:是否有机会在没有 "Offset"方法的情况下检测鼠标从哪一侧进入 div?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15020393/

相关文章:

javascript - 在数据库中插入单选按钮值

javascript - 在 JSON 成功后重定向到其他地方?

jQuery - css 在更高的 Z-index 上禁用 div

JQuery 发布 URL

javascript - 使用 CSS、JavaScript 或 JQuery 在 Android/iOS 设备上放大网页?

javascript - 将元素添加到 body 后运行 javascript

html - 悬停效果超出边界

Java swing鼠标悬停弹出小框显示详情怎么办

javascript - 更改 div 的 z-index,鼠标悬停时具有淡入淡出效果

javascript - 所有 Div 的 CSS 或 JS 规则更改 Div 内部 Div 的 BG 颜色,而不更改父 Div