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 自动完成 AutoComplete(Ajax 查询)
Jul 07 Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
Jun 19 Javascript
学习JavaScript设计模式之装饰者模式
Jan 19 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
Aug 18 Javascript
基于js中document.cookie全面解析
Sep 14 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
Javascript的this详解
Mar 23 Javascript
layui实现tab的添加拒绝重复的方法
Sep 04 Javascript
element实现合并单元格通用方法
Nov 13 Javascript
javascript实现固定侧边栏
Feb 09 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)
2013/06/21 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php生成随机颜色的方法
2014/11/13 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
python中sets模块的用法实例
2014/09/30 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
2019/07/18 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
python TCP包注入方式
2020/05/05 Python
Django models文件模型变更错误解决
2020/05/11 Python
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
体育教师工作总结的自我评价
2013/10/10 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2014年会计工作总结
2014/11/27 职场文书
贷款承诺书
2015/01/20 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
如何写好闭幕词
2019/04/02 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python