dangermouse: Vierte und weitere Maustaste abfangen

Hallo,

ich möchte die Klicks auf die vierte (und gebenenfalls auch weitere) Maustaste(n) meiner Mehrtastenmaus abfangen.

window.addEventListener('mouseup', function, false) scheint ja nur die linke, mittlere und rechte Maustaste aufzunehmen.

Gibt es ein Event, dass die anderen Maustasten abfängt?
Es ist für eine Firefox-Erweiterung, eine geckospezifische Lösung würde mir also schon reichen.

Schon mal vielen Dank für Hinweise und alles Gute

dangermouse

  1. Hallo,

    ich habe jetzt herausgefunden, dass ich die Tasten mit window.addEventListener('keyup', function_m, false) abfangen kann.

    Ausgeben kann ich den Wert der Taste dann mit:
    function_m(e) {
       alert(e.which);
    }

    Vierte und fünfte Maustaste geben den Wert 224 zurück.
    Gibt es eine Möglichkeit, die Tasten zu unterscheiden?
    Weiß jemand, ob der Wert allgemein ist, oder kann der spezifisch für meine Maus sein?

    Alles Gute

    dangermouse

    1. Ausgeben kann ich den Wert der Taste dann mit:
      function_m(e) {
         alert(e.which);
      }

      Es muss natürlich
      function function_m(e) {
         alert(e.which);
      }
      heißen.

      danger

    2. Vierte und fünfte Maustaste geben den Wert 224 zurück.
      Gibt es eine Möglichkeit, die Tasten zu unterscheiden?

      Du musst hier ein Bitmaske anlegen. Oder lasse dir den Wert mal im Binärformat anzeigen (am besten ohne altert).

      window.addEventListener('mousedown', function(e) {  
       var taste = e.which;  
       var div = getCreate('out');  
       div.innerHTML = taste.toString(2);  
      }, false);  
        
      function getCreate(id) {  
       var div = document.getElementById(id);  
       if(!div) {  
        div = document.createElement('div');  
        div.id = id;  
        document.body.appendChild(div);  
       }  
       return div;  
      }
      

      Weiß jemand, ob der Wert allgemein ist, oder kann der spezifisch für meine Maus sein?

      Nein, das weiß ich nicht. aber ich vermute, dass das Browserspezifisch sein kann.

      Struppi.

      1. Hallo Struppi,

        vielen Dank für deinen tollen und komplexen Code!

        Das Problem wurde durch Verwendung des keydown-Events gelöst.
        Du hast mich auf die richtige Spur gebracht.
        Mit keydown werden unterschiedliche Werte abgefangen, mit keyup wie beschrieben identische.
        Die Idee mit der binären Darstellung ist auch spannend, womöglich kann ich das gut einsetzen.

        Nochmals danke und alles Gute

        danger

        1. Ergänzung der Vollständigkeit halber:

          Für meine vierte Taste (history.back-Taste) erhalte ich:
          37 (dezimal) bzw. 100101 (binär).

          Für die fünfte Taste (history.forward):
          39 bzw. 100111.

          Viel Spaß

          danger

          1. Gerade habe ich festgestellt, dass die „nach links“- und „nach rechts“-Pfeiltasten bei keydown die selben Codes ergeben wie die Zusatztasten meiner Maus.
            Nämlich 37 bzw. 39 (dezimal).

            Bei keyup unterscheiden sich die Codes. Die Pfeiltasten liefern ebenfalls 37 und 39, während die Maustasten beide 224 liefern.

            Um die Maustasten eindeutig zu identifizieren, müssen also wohl beide Ereignisse abgefangen und die Rückgabe mit den obigen Werten abgeglichen werden.
            Ich hab das noch nicht gemacht, befürchte aber, dass eine robuste Lösung nicht ganz trivial sein wird, da ja Tastendrücke zwischen down und up gegebenfalls eliminiert werden müssen usw.

            Auch hab ich das ganze noch nicht mit anderen Mäusen getestet.

            Wenn jemand noch Ideen dazu hat, freue ich mich.

            Alles Gute

            danger

            1. [latex]Mae  govannen![/latex]

              Wenn jemand noch Ideen dazu hat, freue ich mich.

              Keine Ahnung, ich habe eine Standard-Maus und kann es daher nicht selber probieren, aber auf Anhieb würde ich bei einem Test mit type bzw. button anfangen. Ob das passt, mußt du mal schauen, ggf. auch andere Eigenschaften auf dieser Seite. Unbedingt die Browsericons zur Beschreibung beachten, gerade bei Events ist in verscheidenenen Browsern alles völlig unterschiedlich

              Cü,

              Kai

              --
              Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
              SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
              1. Hey Kai,

                danke für die Antwort. So weit hab ich es ja schon im Griff.
                onkeydown und onkeyup scheinen die richtigen Eventhaendler zu sein.
                Die Ergebnisse sind halt etwas verwirrend.

                Das ganze soll im Firefox ablaufen.
                Ich werde auch noch mal mit onkeypress herumexperimentieren, aber heute nicht mehr und die nächsten Tage komm ich auch nicht dazu.
                Wenn sich was tolles ergibt, poste ich es hier noch.

                Alles Gute

                danger

                1. [latex]Mae  govannen![/latex]

                  danke für die Antwort. So weit hab ich es ja schon im Griff.
                  onkeydown und onkeyup scheinen die richtigen Eventhaendler zu sein.
                  Die Ergebnisse sind halt etwas verwirrend.

                  Und deshalb solltest du versuchen unter Zuhilfenahme der Werte einer der verlinkten Eigenschaften festzustellen, ob das onkey... Event von einer Tastatur oder einer Maus kommt und über eine entsprechende Verknüpfung dieser Werte nur im gewünschten Fall zu reagieren.. Ich weiß nur eben nicht, _ob_ es für alle Tasten möglich ist, da ich keine Zusatztasten habe. Ansonsten vielleich das MDC zuhilfe nehmen, da sind auch Mozilla-spezifische Event-Eigenschaften und -Methoden bei.

                  Cü,

                  Kai

                  --
                  Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                  SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
                  1. Und deshalb solltest du versuchen unter Zuhilfenahme der Werte einer der verlinkten Eigenschaften festzustellen, ob das onkey... Event von einer Tastatur oder einer Maus kommt und über eine entsprechende Verknüpfung dieser Werte nur im gewünschten Fall zu reagieren.. Ich weiß nur eben nicht, _ob_ es für alle Tasten möglich ist, da ich keine Zusatztasten habe. Ansonsten vielleich das MDC zuhilfe nehmen, da sind auch Mozilla-spezifische Event-Eigenschaften und -Methoden bei.

                    Die aber alle keine Information über Maustasten zu Verfügung stellen. Dangermouse ist schon auf dem richtigen Weg, das Problem ist aber, dass es für exotische Maustasten anscheinend keinen Standard gibt und seine Experimente mit meinem Skript unterschiedliched Ergebnisse gebracht haben.

                    Ich würde das Skript noch etwas erweitern:

                    window.addEventListener('mousedown', function(e) {  
                     var taste = e.button;  
                     var div = getCreate('out');  
                     div.innerHTML = 'Down<br>e.button: '  + e.button.toString(2)  
                     + ' e.which: '+ e.which.toString(2);  
                     e.preventDefault();  
                     e.stopPropagation();  
                     return false;  
                      
                    }, false);  
                    window.addEventListener('mouseup', function(e) {  
                     var taste = e.button;  
                     var div = getCreate('out1');  
                     div.innerHTML = 'UP<br>e.button: '  + e.button.toString(2)  
                     + ' e.which: '+ e.which.toString(2);  
                     e.preventDefault();  
                     e.stopPropagation();  
                     return false;  
                      
                    }, false);  
                      
                    function getCreate(id) {  
                     var div = document.getElementById(id);  
                     if(!div) {  
                      div = document.createElement('div');  
                      div.id = id;  
                      document.body.appendChild(div);  
                     }  
                     return div;  
                    }
                    

                    Jetzt kann man beide Events und die Standardeigenschaft .button beobachten.

                    Aber ich befürchte, dass es schwierig oder unmöglich ist eine Maus mit mehr als drei Tasten per JS zu steuern.

                    Mehr Informationen:
                    http://www.quirksmode.org/dom/w3c_events.html
                    oder vielleicht findet sich noch etwas beim w3c

                    Struppi.

                    1. Hallo.

                      Aber ich befürchte, dass es schwierig oder unmöglich ist eine Maus mit mehr als drei Tasten per JS zu steuern.

                      Da hat auch hoffentlich der Nutzer seine Hand drauf.
                      MfG, at

                      1. Hallo.

                        Aber ich befürchte, dass es schwierig oder unmöglich ist eine Maus mit mehr als drei Tasten per JS zu steuern.

                        Da hat auch hoffentlich der Nutzer seine Hand drauf.
                        MfG, at

                        Ja, der Nutzer hat hoffentlich seine Hand auf der Maus, wenn mein Killerskript die Kontrolle übernimmt. Mit history.back() wird dann nämlich die Zeitreise eingeleitet.

                        Du bist auf dem falschen Dampfer.

                        danger

                        1. Hallo.

                          Du bist auf dem falschen Dampfer.

                          Du bist auf dem falschen Dampfer. An der etwas hilflosen Grammatik meiner Aussage hätte man durchaus erkennen können, dass es mir ausschließlich um das Wortspiel ging.
                          MfG, at

                          1. An der etwas hilflosen Grammatik meiner Aussage hätte man durchaus erkennen können, dass es mir ausschließlich um das Wortspiel ging.

                            Ok, nichts für ungut. ;-)
                            Dachte, hier läge ein Standardforenreflex vor.
                            Mein Skript will ja nicht die Maus steuern, sondern nur ermitteln, welche Taste gedrückt wurde.

                            Peace & alles Gute

                            danger

                            1. Hallo.

                              Ok, nichts für ungut. ;-)

                              Nein, kein Problem.

                              Dachte, hier läge ein Standardforenreflex vor.

                              Stimmt, hätte ja auch sein können.

                              Mein Skript will ja nicht die Maus steuern, sondern nur ermitteln, welche Taste gedrückt wurde.

                              Zum einen das, zum anderen deutet die Beschränkung auf Mozilla ja bereits auf eine geschlossene Benutzergruppe, für die dein Ansatz ja durchaus hilfreich sein kann.
                              MfG, at

                              1. Zum einen das, zum anderen deutet die Beschränkung auf Mozilla ja bereits auf eine geschlossene Benutzergruppe, für die dein Ansatz ja durchaus hilfreich sein kann.

                                Hm, ich habe es ja noch gar nicht erzählt:
                                Meine vierte Maustaste (die Daumentaste) ist mit history.back() belegt (bzw. mit einer „Zurück“-Eigenschaft fürs Browsen). Überaus praktisch, wie ich finde.
                                Bei früheren Firefox-Versionen hat das auch immer geklappt.
                                Bei neueren funktioniert die Taste auf Seiten, bei denen der Fokus in einem Textfeld ist, nicht mehr.
                                Jetzt möchte ich eine Firefox-Erweiterung schreiben, so dass history.back() immer ausgeführt wird.

                                Also eine ganz kleine Sache und prinzipiell läuft es auch schon, nur eben die eindeutige Erkennung der Tasten hab ich noch nicht fertig.

                                Wie gesagt, hab ich gerade viel zu tun, aber die Tage werde ich den fertigen Code hier posten.

                                Alles Gute

                                dangermouse

                                1. Hallo.

                                  Jetzt möchte ich eine Firefox-Erweiterung schreiben, so dass history.back() immer ausgeführt wird.

                                  Verstehe, also doch eine etwas andere Spezialanwendung als ich vermutet hatte.
                                  MfG, at

                    2. Danke sehr, das hatte ich schon gemacht, mit dem beschriebenen Ergebnis.

                      Zu deinem Code: Also benötigt wird onkeyup/down, wie beschrieben.
                      Die Sache mit der Binärdarstellung ist mir etwas unklar...
                      Es macht doch keinen Unterschied, bezüglich welcher Basis ich eine Zahl betrachte.

                      Vielen Dank jedenfalls für die Mühe!

                      danger

                  2. Also, die Zusatztasten meiner Maus, gelten nicht als Maustasten (genauer: nicht als „buttons“).
                    onmouseup/down wartet nur auf linke, mittlere und rechte Maustaste.

                    Die Zusatztasten werden als „keys“ gewertet. Deshalb kann ich sie mit onkeyup/down abfragen.

                    Nur geben sie bei keydown den selben Code zurück wie die Pfeiltasten nach rechts/links und bei keyup beide 224.
                    Das ist so ein bißchen witzig.

                    Alle anderen „keys“ (also die auf meiner Tastatur) geben bei up/down den selben Wert zurück.

                    Danke für die Mozilla-Events-Liste, die wird mir gute Dienste leisten.

                    Alles Gute

                    danger