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 相关文章推荐
Iframe 自适应高度并实时监控高度变化的js代码
Oct 30 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
Mar 04 Javascript
跟我学习javascript的基本类型和引用类型
Nov 16 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
Dec 03 Javascript
JS简单设置下拉选择框默认值的方法
Aug 20 Javascript
微信小程序 开发工具快捷键整理
Oct 31 Javascript
vue.js实现备忘录功能的方法
Jul 10 Javascript
提升页面加载速度的插件InstantClick
Sep 12 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 jQuery
记一次webapck4 配置文件无效的解决历程
Sep 19 Javascript
vue使用swiper.js重叠轮播组建样式
Nov 14 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
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
谈谈关于php的优点与缺点
2013/04/11 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
Python中functools模块的常用函数解析
2016/06/30 Python
python 显示数组全部元素的方法
2018/04/19 Python
python异常处理和日志处理方式
2019/12/24 Python
python实现人机猜拳小游戏
2020/02/03 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
Linux机考试题
2015/07/17 面试题
促销活动总结报告
2014/04/26 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
ktv好的活动方案
2014/08/17 职场文书
研究生个人学年总结
2015/02/14 职场文书
校运会加油稿大全
2015/07/22 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
vue实现滑动解锁功能
2022/03/03 Vue.js