JS用斜率判断鼠标进入DIV四个方向的方法

 更新时间:2016年11月07日 12:00:07   作者:小_前端  
在网上去搜判断鼠标移入div移入移出的方法大同小异,下面小编给大家分享一篇文章关于js判断鼠标进入div方向的代码,感兴趣的朋友一起看看吧

网上大部分判断鼠标移入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的坐标和中心点之间的斜率判断‘左右'或者‘上下';

通过这张图可以看出,当鼠标移入点和中心点的斜率K在 k和-k 之间时,可以判断出是左右移入。所以K在其他区间内都是上下移入;

至于怎么分辨左还是右,则就通过移入点的x坐标值是否大于中心点的x0值,大于就是右移入,小于就是左移入。

上下的判断跟左右的原理一样,不过要注意y坐标都是负的,不可将大小分辨错了。

以上所述是小编给大家介绍的JS用斜率判断鼠标进入DIV四个方向的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 前端JavaScript实现本地模糊搜索功能的方法实例

    前端JavaScript实现本地模糊搜索功能的方法实例

    对于模糊查询,一般都是传关键字给后端,由后端来做。但是有时候一些轻量级的列表前端来做可以减少ajax请求,在一定程度上提高用户体验,这篇文章主要给大家介绍了关于前端JavaScript如何实现本地模糊搜索功能的相关资料,需要的朋友可以参考下
    2021-07-07
  • 详解JavaScript中js对象与JSON格式字符串的相互转换

    详解JavaScript中js对象与JSON格式字符串的相互转换

    本篇文章主要介绍了JavaScript中js对象与JSON格式字符串的相互转换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • 深入浅出聊一聊js中的'this'关键字

    深入浅出聊一聊js中的'this'关键字

    js中的this关键字平时在开发中使用时倒是也能正常应用,但是对其使用和判断并不能信手拈来,所以下面这篇文章主要给大家介绍了关于js中this关键字的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 使用TypeScript实现杨辉三角的代码示例

    使用TypeScript实现杨辉三角的代码示例

    杨辉三角,又称帕斯卡三角,是一个数学上非常有趣和重要的概念,它是一种数学结构,它不仅可以用于组合数学,还可以应用于代数、概率和许多其他领域,在本文中,我们将通过使用 TypeScript 来编写杨辉三角的程序,同时深入探讨 TypeScript 的类型系统
    2023-09-09
  • WdatePicker.js时间日期插件的使用方法

    WdatePicker.js时间日期插件的使用方法

    本篇文章主要介绍了WdatePicker.js时间日期插件的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • OpenLayers加载缩放控件使用方法详解

    OpenLayers加载缩放控件使用方法详解

    这篇文章主要为大家详细介绍了OpenLayers加载缩放控件的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • JavaScript动态改变表格单元格内容的方法

    JavaScript动态改变表格单元格内容的方法

    这篇文章主要介绍了JavaScript动态改变表格单元格内容的方法,涉及javascript操作html中table表格的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • JavaScript的arguments对象应用示例

    JavaScript的arguments对象应用示例

    使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们,下面为大家介绍下其具体的应用
    2014-09-09
  • JS 中可以提升幸福度的小技巧(可以识别更多另类写法)

    JS 中可以提升幸福度的小技巧(可以识别更多另类写法)

    本文主要介绍一些JS中用到的小技巧,可以在日常Coding中提升幸福度,将不定期更新
    2018-07-07
  • 微信小程序分享海报生成的实现方法

    微信小程序分享海报生成的实现方法

    为了吸引更多的用户,设计好一个分享海报还是很有必要的,这篇文章主要介绍了微信小程序分享海报生成的实现方法,非常具有实用价值,需要的朋友可以参考下
    2018-12-12

最新评论