搜索
javascript如何判断鼠标移动的方向(左,上,右,下)?
黄舟
黄舟 2017-04-11 11:56:40
[JavaScript讨论组]
$(document).mousemove(function( e ) {
    var x = e.clientX;
    var y = e.clientY;

    /*
        请帮忙提供算法思路,谢谢大家!
    */
});
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(6)
ringa_lee
function(wrap){  
        var wrap = document.getElementById(wrap);  
        var hoverDir = function(e){  
            var w = wrap.offsetWidth,  
                h = wrap.offsetHeight,  
                x = ( e.clientX - wrap.offsetLeft - ( w / 2 ) ) * ( w > h ? ( h / w ) : 1 ),  
                y = (e.clientY - wrap.offsetTop - (h / 2)) * (h > w ? (w / h) : 1),  
                // 上(0) 右(1) 下(2) 左(3)  
                direction = Math.round( ( ( ( Math.atan2( y, x ) * ( 180 / Math.PI ) ) + 180 ) / 90) + 3 ) % 4,  
                eventType = e.type,  
                dirName = new Array('上方','右侧','下方','左侧');  
            if( e.type == 'mouseover' || e.type == 'mouseenter' ){  
                wrap.innerHTML = dirName[direction] + '进入';  
            }else{  
                wrap.innerHTML = dirName[direction] + '离开';  
            }  
        }  
        if( window.addEventListener ){  
            wrap.addEventListener( 'mouseover',hoverDir,false );  
            wrap.addEventListener( 'mouseout',hoverDir,false );  
        }else if( window.attachEvent ){  
            wrap.attachEvent( 'onmouseenter',hoverDir );  
            wrap.attachEvent( 'onmouseleave',hoverDir );  
        }  
    }  
    
    

这是通用的代码,核心就是 Math.round( ( ( ( Math.atan2( y, x ) * ( 180 / Math.PI ) 原理我也不太清楚,然后就能返回四个值,就可判断 四个方向。

黄舟

间隔一次时间保存一次鼠标坐标,
每次与上一次坐标分别走过的X,Y. 然后用X,Y求夹角

阿神

保存上一次的鼠标位置不就行了

PHPz

有一些这类手势识别的函数库,思路无非是定时获取鼠标坐标(一般是20ms),然后使用线性回归等方程判断手势连续情况。
如果你只是业务开发的话,建议直接搜索此类库,感兴趣就自己实现一个。

PHPz

http://www.cnblogs.com/lyzg/p...

PHP中文网

function mouseHover(){

 $(".advanttage-item").bind("mouseenter mouseleave",function(e) {
       var w = $(this).width();
       var h = $(this).height();
       var x = (e.pageX - this.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1);
       var y = (e.pageY - this.offsetTop - (h / 2)) * (h > w ? (w / h) : 1);
       var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4; //direction的值为“0,1,2,3”分别对应着“上,右,下,左”
       var eventType = e.type;
       var dirName = new Array('top','right','down','left');
       if(e.type == 'mouseenter'){
          $(".advanttage-item").html(dirName[direction]+'进入');
      }else{
          $('.advanttage-item').html(dirName[direction]+'离开');
      }
  });

}
原文参考 http://sentsin.com/web/112.html

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号