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圆形浮动菜单特效代码
Mar 03 Javascript
js function使用心得
May 10 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
May 08 Javascript
Jquery动态替换div内容及动态展示的方法
Jan 23 Javascript
jQuery子属性过滤选择器用法分析
Feb 10 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
Sep 18 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
Oct 27 Javascript
Angular.js中$apply()和$digest()的深入理解
Oct 13 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
Jan 23 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
May 02 Javascript
JavaScript的垃圾回收机制与内存管理
Aug 06 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+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
非常漂亮的JS代码经典广告
2007/10/21 Javascript
JavaScript开发时的五个注意事项
2007/12/08 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
python实现事件驱动
2018/11/21 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
机械设计专业应届生求职信
2013/11/21 职场文书
自荐信怎么写呢?
2013/12/09 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
小学生评语集锦
2014/04/18 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
师范生教育见习总结
2015/06/23 职场文书
2016大一新生军训感言
2015/12/08 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP
52条SQL语句教你性能优化
2021/05/25 MySQL
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
React列表栏及购物车组件使用详解
2021/06/28 Javascript