2012-04-05 4 views
1

Ich habe ein ziemlich großes Problem beim Versuch, die Navigation auf meiner Seite zu erstellen. Wenn die Maus ein Element eingibt, wird es ausgewählt, und wenn Sie die Pfeiltasten verwenden, werden die Elemente ausgewählt, die sich auf das ausgewählte Element beziehen. Dies ist jedoch ein Problem, wenn die Pfeiltasten zum Blättern der Seite führen, da (abhängig von der Position der Maus) das entsprechende Element ausgewählt wird und dann sofort das Element ausgewählt wird, mit dem die Maus nach dem Verschieben der Seite verbunden ist (selbst wenn Sie dies getan haben) Bewege die Maus nicht.Erkennen, wenn sich die Maus tatsächlich bewegt, nicht nur wenn sich die Seite bewegt

Kann jemand dieses Problem beheben? Ich habe versucht, daran herumzubasteln, aber keine meiner Lösungen schien zu funktionieren. Jede Hilfe wird geschätzt, danke.

+0

Do you * Willst du die Seite bewegen oder nicht? Kannst du vielleicht eine Geige aufstellen, die dein Problem illustriert? –

+0

Ich möchte, dass es die Seite mit der Taste nach oben und nach unten bewegt, aber es ist die Tatsache, dass wenn die Seite sich bewegt, die Maus sich jetzt über einem anderen Gegenstand befindet, dann wählt sie diesen Gegenstand aus. Wenn sich der Cursor in der Mitte der Seite befindet und Sie mit den Pfeiltasten auf der Seite navigieren, wird jedes Mal, wenn die Seite nach unten bewegt wird, das Element ausgewählt, das sich jetzt in der Mitte der Seite befindet der Boden. Ich werde in die Einrichtung eines Spiels schauen. – Ian

Antwort

1

Es klingt wie Sie sollten die „wählen, wenn die Maus betritt“ binden Ereignis auf mousemove und Dieses Ereignis auf mousestop entbinden. mousestop existiert nicht alleine, also müssen Sie es irgendwie erstellen oder ein Plugin verwenden (es gibt mindestens ein paar da draußen wie https://github.com/richardscarrott/jquery-mousestop-event/). Ich denke, das wäre die einfachste Lösung, aber Ihre Benutzeroberfläche scheint etwas bizarr (Sie möchten die Pfeiltaste normalerweise die Seite scrollen und "Wählen Sie ein Element, das möglicherweise größer als die Größe der Rolle ist?)

0

Try falsch aus dem Handler Tastaturereignis zurückkehren, wo Sie Pfeiltasten überprüfen:

element.onkeypress = function(ev) { 
    // ... 
    return false; 
} 

Dies wird das „Standardverhalten“ verhindern, dass der Browser für die Veranstaltung hat, die blättern ist. Dies gilt auch für Links, zum Beispiel: Wenn Sie false von einem click Event-Handler für einen Link zurückgeben, wird der Link nicht automatisch folgen.

+0

Nein, auch bei Rückgabe false wird weiterhin das Element ausgewählt, auf dem sich der Cursor befindet. – Ian

+0

Die Rückgabe von false soll das Scrollen verhindern, nicht das Element auswählen, in dem sich der Cursor befindet. –

+0

Ich versuche nicht mit dem Scrollen zu stoppen ... Ich versuche, den Mauszeiger daran zu hindern, das Element auszuwählen, wenn Sie mit den Pfeiltasten navigieren, anstatt die Maus zu bewegen. – Ian

1

nicht sicher, ob ich völlig verstehen, aber man sollte eine Kombination der mousemove und keypress Veranstaltungen nutzen können:

$("#element").mousemove(function(e){ 
    alert("mouse moved"); 
}); 

$("#element").keypress(function(e){ 
    if (e.keyCode == 38 || e.keyCode == 40){ //up & down arrow keys 
     e.preventDefault(); 
    } 
});