关于一个JS计算鼠标进入方向的算法
/*主函数 返回数字来判断从哪个方向进入*/
function (e) {
var w = this.id.scrollWidth;
var h = this.id.scrollHeight;
var x = (e.offsetX - (w / 2)) * (w > h ? (h / w) : 1);
var y = (e.offsetY - (h / 2)) * (h > w ? (w / h) : 1);
var number = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4;
return number;
};
这是一个判断鼠标进入目标区域方向的算法,研究很久也没明白上面获取x,y两个值为什么要这么算。我自己也试着分析了一下,感觉像是按照正方形对角线划分4个方向角度,然后再根据实际的区域换算为正方形的实际角度。
希望有大婶帮我分析一下,不胜感激!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
判断鼠标从元素矩形区域的那个方向进入的的标准为:
当鼠标从元素矩形区域外移入元素矩形区域,和鼠标行动轨迹发生交叉的那条边就认为鼠标进入的方法
`例如鼠标从上方往下和上边有交叉,就认为从上方进入~~
Math.atan2能放回-PI到PI之间的弧度
假设元素形成的矩形框的长度为w,高度为h
以选定的元素的矩形框的中心框为圆心P(rx,ry),并这个点为坐标点原点
假设以一个圆,元素矩形框的4个点坐标分别为
P(w/2,y/2),P(w/2,-y/2),P(-w/2,-y/2),P(-w/2,y/2),
在中心点和矩形框的4个顶点画出4条连线
P(rx,ry),P(w/2,y/2)->Line1
P(rx,ry),P(w/2,-y/2)->Line2
P(rx,ry),P(-w/2,-y/2)->Line3
P(rx,ry),P(-w/2,y/2)->Line4
从图形中我们得出
Line1和Line2形成扇形区域rightS
Line2和Line3形成扇形区域bottomS
Line3和Line4形成扇形区域leftS
Line4和Line1形成扇形区域topS
因为我们无法知道进入矩形区域前鼠标的位置,如果能知道就可以直接可以知道从哪里进入了:)
但是我们能知道鼠标进入元素矩形区域后,当前鼠标相对于元素矩形区域的位置
offsetX
,offfsetY
那么我反推,将鼠标进入元素矩形区域后的位置和其可能进入前的原位置之间画一条直线,看这条直线有什么特征
看图:
红色线代表鼠标轨迹
灰色线代表鼠标轨迹,但是跨了2个扇形区,在进入第1个扇形区后就可计算出从哪个方向进入,后续的鼠标轨迹对计算无意
我们可以发现从一个扇形区内的鼠标进入元素矩形框其轨迹就会和对应的矩形边有交叉,可以计算出鼠标从那边移入。
计算方法自然得到:
只要进入元素矩形后我们获得的鼠标位置和矩形中心点之间形成的夹角在对应的扇形区域夹角范围内即可~~~
步骤1:计算获得的鼠标位置和矩形中心点之间形成的夹角
步骤2:计算对象扇形的夹角范围
步骤3:判断再哪个扇形区域中
关于js判断鼠标移入元素的方向--解释
简单得说就是:判断“光标进入时的点”与“矩形的中心点”之间的连线的角度。