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 相关文章推荐
jquery中获取select选中值的代码
Jun 27 Javascript
JavaScript字符串String和Array操作的有趣方法
Dec 18 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 Javascript
解析JavaScript中的不可见数据类型
Dec 02 Javascript
JS模拟键盘打字效果的方法
Aug 05 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
Nov 07 Javascript
jquery实现鼠标悬浮停止轮播特效
Aug 20 Javascript
Cookies 和 Session的详解及区别
Apr 21 Javascript
分享5个顶级的JavaScript Ajax组件库
Sep 16 Javascript
vue实现滑动超出指定距离回顶部功能
Jul 31 Javascript
vue.js购物车添加商品组件的方法
Sep 17 Javascript
jQuery HTML设置内容和属性操作实例分析
May 20 jQuery
基于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
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
php微信开发之百度天气预报
2016/11/18 PHP
一个JS翻页效果
2007/07/23 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
javascript实现当前页导航激活的方法
2015/02/27 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
JavaScript实现区块链
2018/03/14 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
Python 文件操作实现代码
2009/10/07 Python
Python中非常实用的一些功能和函数分享
2015/02/14 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
Django分组聚合查询实例分享
2020/04/29 Python
html5时钟实现代码
2010/10/22 HTML / CSS
介绍一下.net和Java的特点和区别
2012/09/26 面试题
比较一下entity bean和session bean
2013/12/27 面试题
业务助理岗位职责
2013/11/18 职场文书
安全资金保障制度
2014/01/23 职场文书
工商企业管理专业自荐信范文
2014/04/12 职场文书
企业指导教师评语
2014/04/28 职场文书
专家推荐信模板
2014/05/09 职场文书
2014年爱国卫生工作总结
2014/11/22 职场文书
欢送会主持词
2015/07/01 职场文书
Python中OpenCV实现查找轮廓的实例
2021/06/08 Python
MongoDB使用场景总结
2022/02/24 MongoDB