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 input 数字验证代码
Jul 30 Javascript
JQuery优缺点分析说明
Apr 10 Javascript
IE8下String的Trim()方法失效的解决方法
Nov 08 Javascript
jquery+css实现的红色线条横向二级菜单效果
Aug 22 Javascript
javascript中SetInterval与setTimeout的定时器用法
Aug 24 Javascript
jQuery mobile 移动web(6)
Dec 20 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
Nov 16 Javascript
第一次接触神奇的前端框架vue.js
Dec 01 Javascript
inner join 内联与left join 左联的实例代码
Sep 18 Javascript
MVVM 双向绑定的实现代码
Jun 21 Javascript
JavaScript中var、let、const区别浅析
Jun 24 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
Oct 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
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
php HTML无刷新提交表单
2016/04/05 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
Python文件操作基本流程代码实例
2017/12/11 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
appium+python adb常用命令分享
2020/03/06 Python
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
上课说话检讨书大全
2014/01/22 职场文书
政府个人对照检查材料
2014/08/28 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
第二次离婚起诉书
2015/05/18 职场文书
2016年公司新年寄语
2015/08/17 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL