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 相关文章推荐
弹出广告特效代码(一个IP只弹出一次)
May 11 Javascript
ExtJs之带图片的下拉列表框插件
Mar 04 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
Aug 19 Javascript
jquery实现表格隔行换色效果
Nov 19 Javascript
js模拟支付宝密码输入框
Apr 11 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
浅谈Vue SPA 首屏加载优化实践
Dec 15 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
Aug 16 Javascript
es6数值的扩展方法
Mar 11 Javascript
面试题:react和vue的区别分析
Apr 08 Javascript
JS实现水平遍历和嵌套递归操作示例
Aug 15 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
优化使用mysql存储session的php代码
2008/01/10 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
php之curl设置超时实例
2014/11/03 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
node.js中axios使用心得总结
2017/11/29 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
详解python调用cmd命令三种方法
2019/07/08 Python
django orm模块中的 is_delete用法
2020/05/20 Python
python如何建立全零数组
2020/07/19 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
我的大学生活职业生涯规划
2014/01/02 职场文书
书法比赛获奖感言
2014/02/10 职场文书
师范大学生求职信
2014/06/13 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
党员身份证明材料
2015/06/19 职场文书
详解Redis复制原理
2021/06/04 Redis
python脚本框架webpy模板赋值实现
2021/11/20 Python