2013-05-20 72 views
7

我目前有一個函數可以檢測鼠標輸入的方向。它會爲每個部分返回一個整數(0-3),如下所示。如何檢測鼠標在特定元素上的方向

Example 1

我試圖找出如何改變這種功能來生成基於此圖的輸出:

Example 2

基本上,我只是想,如果用戶要弄清楚正在從左側或右側進入圖像。我已經嘗試了幾次嘗試和錯誤,但我不擅長這種數學。

我已經設置了一個JSFiddle with a console output爲例。

來確定方向的功能是:

function determineDirection($el, pos){ 
    var w = $el.width(), 
     h = $el.height(), 
     x = (pos.x - $el.offset().left - (w/2)) * (w > h ? (h/w) : 1), 
     y = (pos.y - $el.offset().top - (h/2)) * (h > w ? (w/h) : 1); 

    return Math.round((((Math.atan2(y,x) * (180/Math.PI)) + 180))/90 + 3) % 4; 
} 

pos是一個對象:{x: e.pageX, y: e.pageY},和$el是含有目標元素的jQuery對象。

回答

4

更換return Math.round((((Math.atan2(y,x) * (180/Math.PI)) + 180))/90 + 3) % 4;return (x > 0 ? 0 : 1);

,我更喜歡(簡單的想法)另一種選擇:

function determineDirection($el, pos){ 
    var w = $el.width(), 
     middle = $el.offset().left + w/2;   
    return (pos.x > middle ? 0 : 1); 
} 
+0

哇,這是令人尷尬的簡單(我會盡快,我可以接受)。這裏是其他人的JSFiddle鏈接:http://jsfiddle.net/aBK5Q/2/ – ahren

+3

只是一些點點滴滴的評論:你仍然不能真正確定mouseenter運動的方向。你只需確定你的光標第一次到達你圖形的哪一半。所以,如果你快速移動鼠標,你可以從左邊輸入圖形,但最終在右半邊。如果你想處理這種行爲,你可能需要在鼠標移動時保存你的鼠標座標,並在mouseenter事件之後將你的最後座標與座標進行比較。但我認爲上述答案對於任何現實生活中的情況都適用。 – basilikum

相關問題