判断鼠标进入元素的方向

javascript版:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8" />
 5         <title>判断鼠标进入和离开容器的方向</title>
 6         <style>
 7             #test{
 8                 width:300px;
 9                 height:200px;
10                 border:1px solid red;
11             }
12         </style>
13         <script>
14             window.onload=function(){
15
16             var target=document.getElementById(‘test‘);
17             //得到鼠标进入元素的方向
18             function showDirection(e){
19                 //1、获取元素的宽高
20                 var
21                     width=target.offsetWidth,
22                     height=target.offsetHeight;
23
24                 //2、计算鼠标在以元素中心为原点的坐标系中的位置,并矫正位置
25                 var
26                     x=(e.clientX-target.offsetLeft-width/2)*(width>height?(height/width):1),
27                     y=(e.clientY-target.offsetTop-height/2)*(height>width?(width/height):1);
28
29                 //3、计算方向(智商不足,没完全理解)
30                 /*
31                  * 3.1 atan2函数是计算点(x,y)与坐标系原点形成的线段与X轴的夹角  取值(-π,π)
32                  * 3.2 乘以(180/Math.PI)是将弧度装成角度
33                  * 3.3 加上180是为了消除负值对结果的影响
34                  * 3.4 除以90是为了判断当前鼠标在哪个象限
35                  * 3.5 加3对4取模 是为了把象限转换成合适的顺时针方向(上、右、下、左)
36                  *
37                  * 计算结果为0、1、2、3分别对应上、右、下、左
38                 */
39                 var
40                     direction=Math.round((((Math.atan2(y,x)*(180/Math.PI))+180)/90)+3)%4,
41                     dirName=[‘上‘,‘右‘,‘下‘,‘左‘];
42
43                 if(‘mouseover‘===e.type || ‘mouseenter‘===e.type){
44                     target.innerHTML=‘从【‘+dirName[direction]+‘】进入‘;
45                 }else{
46                     target.innerHTML=‘从【‘+dirName[direction]+‘】离开‘;
47                 }
48             }
49
50             //事件监听
51             if(window.addEventListener){//DOM标准
52                 target.addEventListener(‘mouseover‘,showDirection,false);
53                 target.addEventListener(‘mouseout‘,showDirection,false);
54             }else if(window.attachEvent){//IE
55                 target.attachEvent(‘onmouseenter‘,showDirection);
56                 target.attachEvent(‘onmouseleave‘,showDirection);
57             }
58             }
59         </script>
60     </head>
61     <body>
62         <div id="test"></div>
63     </body>
64 </html>

效果:

http://jsfiddle.net/aBK5Q/16/

jQuery版本:

 1 $(".overlayLink").bind("mouseenter mouseleave",function(e){
 2         /** the width and height of the current div **/
 3         var w = $(this).width();
 4         var h = $(this).height();
 5
 6         /** calculate the x and y to get an angle to the center of the div from that x and y. **/
 7         /** gets the x value relative to the center of the DIV and "normalize" it **/
 8         var x = (e.pageX - this.offsetLeft - (w/2)) * ( w > h ? (h/w) : 1 );
 9         var y = (e.pageY - this.offsetTop  - (h/2)) * ( h > w ? (w/h) : 1 );
10
11         /** the angle and the direction from where the mouse came in/went out clockwise (TRBL=0123);**/
12         /** first calculate the angle of the point,
13          add 180 deg to get rid of the negative values
14          divide by 90 to get the quadrant
15          add 3 and do a modulo by 4  to shift the quadrants to a proper clockwise TRBL (top/right/bottom/left) **/
16         var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180 ) / 90 ) + 3 )  % 4;
17
18
19         /** do your animations here **/
20         switch(direction) {
21          case 0:
22           /** animations from the TOP **/
23          break;
24          case 1:
25           /** animations from the RIGHT **/
26          break;
27          case 2:
28           /** animations from the BOTTOM **/
29          break;
30          case 3:
31           /** animations from the LEFT **/
32          break;
33         }
34 });

参考:

http://stackoverflow.com/questions/3627042/jquery-animation-for-a-hover-with-mouse-direction

http://sentsin.com/web/112.html

这个更好理解http://blog.csdn.net/bluesky466/article/details/41706871

时间: 2024-09-29 02:38:30

判断鼠标进入元素的方向的相关文章

JS判断鼠标移入元素的方向

最终效果 这里的关键主要是判断鼠标是从哪个方向进入和离开的 $("li").on("mouseenter mouseleave",function(e) { var w = this.offsetWidth; var h = this.offsetHeight; var x = e.pageX - this.getBoundingClientRect().left - w/2; var y = e.pageY - this.getBoundingClientRect

关于js判断鼠标移入元素的方向——上下左右

一开始我是这么想的,将待移入的元素分割四块,用mousemove获取第一次鼠标落入的区域来判断鼠标是从哪个方向进去的. 所以只要写个算法来判断鼠标的值落入该元素的区域就可以得出鼠标移入的方向,如下图: 对于数学不太好的我,只能上网找下看有没有人解决了.找到了如下这段: var x = (e.pageX - this.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1); var y = (e.pageY - this.offsetTop - (h / 2))

判断鼠标移入元素方向

$(this).bind("mouseenter mouseleave",function(e){ var w = $(this).width(); var h = $(this).height(); var x = (e.pageX - $(this).offset().left - (w / 2)) * (w > h ? (h / w) : 1); var y = (e.pageY - $(this).offset().top - (h / 2)) * (h > w ?

判断鼠标滚轮的滚动方向

function mousewheelHandler(e){ var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); console.log(delta > 0 ? "向上滚动" : "向下滚动"); } //for Firefox document.addEventListener("DOMMouseScroll", mousewheelHandler, fa

判断鼠标进入容器的方向小Demo

参考资料: 贤心博客:http://sentsin.com/web/112.html, Math.atan2(y,x) 解释 :http://www.w3school.com.cn/jsref/jsref_atan2.asp; Demo: Demo 截图: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t

判断鼠标移入移出元素时的方向

本文要介绍的是一种鼠标从一个元素移入移出时,获取鼠标移动方向的思路.这个方法可以帮助你判断鼠标在移入移出时,是从上下左右的哪个方向发生的.这个思路,是我自己琢磨出来,利用了一点曾经高中学过的数学知识,但是非常简单好理解,希望能对你有所帮助. 在线demo: http://liuyunzhuge.github.io/blog/mouse_direction/demo1.html 相关代码: https://github.com/liuyunzhuge/blog/blob/master/mouse_

canvas 使用 isPointInPath() 判断鼠标位置是否在绘制的元素上

canvas 里绘制的图形不是一个实体 DOM,所以要给每个绘制的图形添加事件操作比给 DOM 添加事件要复杂很多. 所以,我们需要使用一个 canvas 的 isPointInPath(x, y) 方法,来获取鼠标相对于浏览器的坐标,然后还需要计算出鼠标相对于 canvas 画布的坐标,最后通过 isPointInPath(x, y) 方法判断此坐标是否在绘制的元素上,进行相应的操作. isPointInPath() 方法是针对的当前绘制的路径,而鼠标在执行操作的时候,我们会根据需要监听鼠标的

判断鼠标从哪个方向进入容器

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>判断鼠标进入方向</title> </head> <body> <style> html,body{margin:0;padding:0;} #wrap{width:300px;height:300px;background:#33aa00;margin:50p

判断鼠标从div的哪一方向划入-------Day74

发现一种很有意思的效果,感觉很漂亮很华丽,想实现一下,大体效果来介绍下: 鼠标从左端划入,则遮盖层从左边划入遮盖div,而从上方划入,则遮盖层从上方划入遮盖div,同理对于右方和下方,而同样从哪个方向鼠标移出div,遮盖层也就从哪个方向消失,你能想象的出么?如果还想象不出效果,可以看你一下"拉勾网",我就从上面发现的这个效果. 其实单纯说遮盖层划出的效果,我们大约知道好几种方法,如果遮盖层是需要新创建div,那么javascript完全可以实现,至于划出效果也可以实现,遮盖层的widt