$(document).mousemove(function( e ) {
var x = e.clientX;
var y = e.clientY;
/*
请帮忙提供算法思路,谢谢大家!
*/
});
有一些这类手势识别的函数库,思路无非是定时获取鼠标坐标(一般是20ms),然后使用线性回归等方程判断手势连续情况。
如果你只是业务开发的话,建议直接搜索此类库,感兴趣就自己实现一个。
间隔一次时间保存一次鼠标坐标,
每次与上一次坐标分别走过的X,Y. 然后用X,Y求夹角
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 )
原理我也不太清楚,然后就能返回四个值,就可判断 四个方向。
保存上一次的鼠标位置不就行了
http://www.cnblogs.com/lyzg/p...