JS用斜率判断鼠标进入DIV四个方向的方法


Posted in Javascript onNovember 07, 2016

网上大部分判断鼠标移入div移入移出都是使用一下方法:

这个方法确实十分奇特,使用起来十分方便。

后来自己看了一些文章,看到有另一种以斜率的方法来判断鼠标的移动方向。

JS用斜率判断鼠标进入DIV四个方向的方法

上图是此方法的示意图,以浏览器左上角做原点,水平轴作为x轴,往右为正;竖直轴作为y轴,向上为正。

中间的div的左上角坐标(x1,y1),右下角坐标(x2,y2),中心点的坐标(x0,y0)。

设如图两点的斜率为k(k<0),关于x轴对称的斜率为-k。

另外鼠标刚移入时,鼠标的坐标设为(x,y);

window.onload = function(){
var oDiv = document.getElementById('div1');
var x1 = oDiv.offsetLeft,
y1 = -oDiv.offsetTop, //注意坐标,所有的y坐标都是负数
x2 = x1 + oDiv.offsetWidth,
y2 = y1 - oDiv.offsetHeight, //同样y坐标为负数
x0 = (x1 + x2) / 2,
y0 = (y1 + y2) / 2;
var k = (y2 - y1) / (x2 - x1); //斜率k
// alert(-k)
oDiv.onmouseover = function(e){
var e = e || window.event;
var x = e.clientX, //鼠标刚移入div内,记录下当前的x坐标
y = -e.clientY; //鼠标刚移入div内,记录下当前的y坐标
var K = (y - y0) / (x - x0); //K是鼠标移入点和中心点的斜率
//当K大于k并且小于-k时,则肯定是左右移入,当移入点的x坐标大于中心点 ,则为右移入,小于则是左移入
if(k < K && K < -k){
if(x > x0){
alert('右');
}else{
alert('左');
}
}else{
//注意此处y是负数,判断上下的方法同上
if(y > y0){
alert('上');
}else{
alert('下');
}
}
}
}

首先我们计算出了斜率k和-k,主要是通过鼠标进入div的坐标和中心点之间的斜率判断‘左右'或者‘上下';

JS用斜率判断鼠标进入DIV四个方向的方法

通过这张图可以看出,当鼠标移入点和中心点的斜率K在 k和-k 之间时,可以判断出是左右移入。所以K在其他区间内都是上下移入;

至于怎么分辨左还是右,则就通过移入点的x坐标值是否大于中心点的x0值,大于就是右移入,小于就是左移入。

上下的判断跟左右的原理一样,不过要注意y坐标都是负的,不可将大小分辨错了。

以上所述是小编给大家介绍的JS用斜率判断鼠标进入DIV四个方向的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
音乐播放用的的几个函数
Sep 07 Javascript
jQuery学习笔记之jQuery原型属性和方法
Jun 09 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
深入浅析react native es6语法
Dec 09 Javascript
JavaScript判断表单为空及获取焦点的方法
Feb 12 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
Mar 07 Javascript
jQuery遍历json的方法分析
Apr 16 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
Jun 17 Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 Javascript
基于JavaScript实现焦点图轮播效果
Mar 27 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
10行代码实现微信小程序滑动tab切换
Dec 28 Javascript
基于Phantomjs生成PDF的实现方法
Nov 07 #Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
Nov 07 #Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
Nov 07 #Javascript
jQuery插件WebUploader实现文件上传
Nov 07 #Javascript
jQuery利用sort对DOM元素进行排序操作
Nov 07 #Javascript
AngularJS的ng Http Request与response格式转换方法
Nov 07 #Javascript
easyUI实现(alert)提示框自动关闭的实例代码
Nov 07 #Javascript
You might like
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
基于jquery的超简单上下翻
2010/04/20 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
python中黄金分割法实现方法
2015/05/06 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
python爬虫使用cookie登录详解
2017/12/27 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
python中的句柄操作的方法示例
2019/06/20 Python
django的model操作汇整详解
2019/07/26 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
《圆明园的毁灭》教学反思
2014/02/28 职场文书
个人合伙协议书范本
2014/10/14 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
经典爱情感言
2015/08/03 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
Vue全家桶入门基础教程
2021/05/14 Vue.js
讨论nginx location 顺序问题
2022/05/30 Servers