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 相关文章推荐
两个SUBMIT按钮,如何区分处理
Aug 22 Javascript
为调试JavaScript添加输出窗口的代码
Feb 07 Javascript
javaScript NameSpace 简单说明介绍
Jul 18 Javascript
window.open()详解及浏览器兼容性问题示例探讨
May 29 Javascript
javascript实现英文首字母大写
Apr 23 Javascript
JavaScript实现Iterator模式实例分析
Jun 09 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
Nov 18 Javascript
DOM 事件的深入浅出(二)
Dec 05 Javascript
layui表单验证select下拉框实现验证的方法
Sep 05 Javascript
bootstrap-table后端分页功能完整实例
Jun 01 Javascript
JS寄快递地址智能解析的实现代码
Jul 16 Javascript
Element Breadcrumb 面包屑的使用方法
Jul 26 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
实用函数7
2007/11/08 PHP
php中filter_input函数用法分析
2014/11/15 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
JS实现多选框的操作
2020/06/24 Javascript
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
Python实现KNN邻近算法
2021/01/28 Python
python3.6数独问题的解决
2019/01/21 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
医院院务公开实施方案
2014/05/03 职场文书
会议接待欢迎标语
2014/10/08 职场文书
房屋维修申请报告
2015/05/18 职场文书
解决mysql的int型主键自增问题
2021/07/15 MySQL
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫