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 相关文章推荐
js中查找最近的共有祖先元素的实现代码
Dec 30 Javascript
提取字符串中年月日的函数代码
Nov 05 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
Mar 04 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
Dec 04 Javascript
避免jQuery名字冲突 noConflict()方法
Jul 30 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
Sep 23 Javascript
js 弹出虚拟键盘修改密码的简单实例
Oct 10 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
代码详解Vuejs响应式原理
Dec 20 Javascript
react-redux中connect的装饰器用法@connect详解
Jan 13 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
Feb 07 Javascript
Element MessageBox弹框的具体使用
Jul 27 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
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
jQuery实现图片信息的浮动显示实例代码
2013/08/28 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
【python】matplotlib动态显示详解
2019/04/11 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
windows下python安装pip方法详解
2020/02/10 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
英国团购网站:Groupon英国
2017/11/28 全球购物
如何清空Session
2015/02/23 面试题
内容编辑个人求职信
2013/12/10 职场文书
打架检讨书100字
2014/01/19 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
文明村镇申报材料
2014/05/06 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
庆六一开幕词
2015/01/29 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
2015年测量员工作总结
2015/05/23 职场文书
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
java设计模式--三种工厂模式详解
2021/07/21 Java/Android