2011-12-09 62 views
4

我想这个代码来检测,如果鼠标方向上升或下降:检测鼠标方向

<html> 
    <head></head> 
    <body> 
     <div style="width: 500px; height: 500px; background: red;"></div> 
    </body> 
</html> 

var mY = 0; 
$('body').mousemove(function(e) { 
    mY = e.pageY; 
    if (e.pageY < mY) { 
     console.log('From Bottom'); 
     return; 

    } else { 
     console.log('From Top'); 
    } 

}); 

但是这个代码不工作是我期待。控制台日志始终显示“从顶部”

任何想法?

demo

回答

9
var mY = 0; 
$('body').mousemove(function(e) { 

    // moving upward 
    if (e.pageY < mY) { 
     console.log('From Bottom'); 

    // moving downward 
    } else { 
     console.log('From Top'); 
    } 

    // set new mY after doing test above 
    mY = e.pageY; 

}); 
+0

非常感谢,有效! – overallduka

4

比较它,这意味着比较将始终等于之前你设置my = e.pageY(因此假。)

尝试这样

var mY = 0; 
$('body').mousemove(function(e) { 

    if (e.pageY < mY) { 
     console.log('From Bottom'); 

    } else { 
     console.log('From Top'); 
    } 
    mY = e.pageY; 

}); 
+1

小心去除这里的return语句,否则'mY'不被设置,向上移动鼠标 –

+0

它是如何,只有答案,那就是目前上市后,即将无法正常工作是评分最高的答案? – xbrady

0

您需要确定方向后设置您的mY值(以前你之前设置它 - 这样收到的总是特定的结果)

代码:

//Values starts at middle of page 
var mY = $('window').height()/2; 

//Compares position to mY and Outputs result to console 
$('body').mousemove(function(e) { 
    if (e.pageY < mY) { 
     console.log('Going Up'); 
    } 
    else { 
     console.log('Going Down'); 
    } 
    mY = e.pageY; 
}); 

Working Example

0

如果使用if/else,它将始终输出'Going Down',即使e.pageY == mY。

改用2个if语句!

var mY = 0; 
$('body').mousemove(function(e) { 

// moving upward 
if (e.pageY < mY) { 
    console.log('From Bottom'); 

// moving downward 
} 
if (e.pageY > mY) { 
    console.log('From Top'); 
} 

// set new mY after doing test above 
mY = e.pageY; 

}); 

只是复制从macek代码,并取代了“其他”与“如果(...)”顺便说一句

0

做到这一点最简单的方法。这样,您就可以检测方向的变化:

var tempMouseY=0; 
$('body') 
.mousemove(function(e) { 
    moveY = -(tempMouseY-e.pageY); 
    tempMouseY = e.pageY; 
    if (moveY<0) { 
     console.log('From Bottom'); 
    } else { 
     console.log('From Top'); 
    } 

});