2013-05-20 14 views
7

Mam obecnie funkcję, która wykrywa kierunek wprowadzania myszy. Zwraca liczbę całkowitą (0-3) dla każdej sekcji, jak pokazano poniżej.Jak wykrywać kierunek myszy na konkretnym elemencie?

Example 1

Próbuję dowiedzieć się, jak zmienić tę funkcję, aby produkować wyjście oparte na tej ilustracji:

Example 2

Zasadniczo, po prostu chcę, aby dowiedzieć się, jeśli użytkownik wprowadza obraz z lewej lub z prawej strony. Miałem kilka prób prób i błędów, ale nie jestem zbyt dobry w tego rodzaju matematyce.

Jako przykład ustawiłem JSFiddle with a console output.

Funkcja celu określenia kierunku jest:

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; 
} 

przypadku pos Przedmiotem: {x: e.pageX, y: e.pageY} i $el obiektem jQuery zawierający element docelowy.

Odpowiedz

4

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

Innym rozwiązaniem, które lubię lepiej (prostszy pomysł):

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

Wow, to żenująco proste (Będę przyjąć tak szybko, jak mogę). Oto link do JSFiddle dla innych: http://jsfiddle.net/aBK5Q/2/ – ahren

+3

Troszkę zaskakujący komentarz: wciąż nie jesteś w stanie określić bezpośredniego kierunku ruchu myszy. Po prostu określasz, w której połowie twojej grafiki przybywa twój kursor. Jeśli więc szybko poruszysz myszką, możesz wprowadzić grafikę od lewej strony, ale kończysz w prawej połowie. Jeśli chcesz poradzić sobie z tym zachowaniem, prawdopodobnie będziesz musiał zapisać współrzędne myszy przy każdym przesunięciu myszy i porównać ostatnie współrzędne ze współrzędnymi zaraz po zdarzeniu myszy. Ale myślę, że powyższa odpowiedź działa dobrze na prawdopodobnie w prawdziwych przypadkach życia. – basilikum

Powiązane problemy