2011-12-09 63 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'); 
    } 

});