使用Js判断鼠标移入元素的方向

判断鼠标从元素矩形区域的哪个方向进入的标准为:
当鼠标从元素矩形区域外移入元素矩形区域,和鼠标行动轨迹发生交叉的那条边就认为是鼠标进入的方向,例如鼠标从上方往下和上边有交叉,就认为是从上方进入。

本文要介绍几种方法来判断当鼠标滑入元素时,是从哪个方向进入;滑出元素时,从哪个方向滑出,以此对元素做一些交互效果。

求最小值

该方法是当鼠标滑入元素的时,从事件对象 e 中获取其位于文档中的坐标 (e.pageX, e.pageY),再计算出 x 轴方向坐标减去元素左侧距离文档左侧的距离和 x 轴方向坐标减去元素右侧距离文档左侧的距离,y 轴方向坐标减去元素顶部距离文档顶部的距离和 y 轴方向坐标减去元素底部距离文档顶部的距离,求出这四个数字的绝对值的最小值,即为鼠标进入元素的方向。

在线演示

求角度

Math.atan2(y,x) 返回 -PI 到 PI 之间的值(负180°到正180°),是从 X 轴正向逆时针旋转到点 (x,y) 时经过的角度,这里的结果是一个弧度值

在线演示

求斜率

  1. 上图以浏览器可视区域左上角为原点建立坐标系,坐标系与数学坐标系方向一致,往右表示 x 轴正方向,往下表示 y 轴负方向;
  2. 图中点 (x1, y1) 代表元素框左上角坐标,(x2, y2) 代表元素框右下角坐标,(x0, y0) 代表元素框的中心点坐标,鼠标刚移入时,鼠标的坐标设为 (x, y);
  3. 根据斜率公式:k = (y2 - y1) / (x2 - x1) 可得 (x1, y1) 与(x2, y2) 这条对角线的斜率为 k。由于对称性,元素框另外一条对角线的斜率为 -k。
  4. 根据同样的公式,当鼠标移入移出元素时的瞬间,与元素边框的交点与元素框中心点的斜率 slope = (y - y0) / (x - x0)
  5. 由图可知,当 k < slope < –k 时,则肯定是左右移入,当移入点 x > x0 ,则为右移入,小于则是左移入。
  6. 上下的判断跟左右的原理一样,不过要注意 y 坐标都是负的,不可将大小分辨错了。

在线演示