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 相关文章推荐
Javascript绝句欣赏 一些经典的js代码
Feb 22 Javascript
JS图片无缝滚动(简单利于使用)
Jun 17 Javascript
js中的replace方法使用介绍
Oct 28 Javascript
jQuery实现的Div窗口震动特效
Jun 09 Javascript
JSON取值前判断
Dec 23 Javascript
原生js的数组除重复简单实例
May 24 Javascript
js仿京东轮播效果 选项卡套选项卡使用
Jan 12 Javascript
浅谈vuex之mutation和action的基本使用
Aug 29 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
Nov 14 Javascript
web前端vue之CSS过渡效果示例
Jan 10 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
Jun 04 Javascript
JQuery Ajax如何实现注册检测用户名
Sep 25 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设计模式 php实现适配器模式
2015/12/07 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
jquery日历控件实现方法分享
2014/03/07 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
使用Python写CUDA程序的方法
2017/03/27 Python
python 输出上个月的月末日期实例
2018/04/11 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
python命令行工具Click快速掌握
2019/07/04 Python
html5唤起app的方法
2017/11/30 HTML / CSS
linux面试题参考答案(8)
2015/08/11 面试题
UML设计模式笔试题
2014/06/07 面试题
心得体会范文
2014/01/04 职场文书
复核员上岗演讲稿
2014/01/05 职场文书
秋季运动会加油稿200字
2014/01/11 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
采购部部长岗位职责
2014/02/06 职场文书
客服专员岗位职责
2014/02/28 职场文书
计划生育工作汇报
2014/10/28 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python