SPX_25: Mauskoordinaten zurückgeben lassen

Hallo!

Ich habe folgendes Problem. Ich möchte mir die Mauskoordinaten aus folgender Funktion zurückgeben lassen. Dafür habe ich ein Array erzeugt, in welches die Koordinaten abgespeichert werden. Bis dahin ist auch alles ok.

function watchMousePos(mousePos)
{
 eventArray=new Array();

var mousePosX;
 var mousePosY;

if(window.event)
 {
  mousePos=window.event;
 }

eventArray[0]=mousePos.screenX;
 eventArray[1]=mousePos.screenY;

return(eventArray);
}

Nun ist das Problem, daß der Aufruf document.onmousemove=watchMousePos; ja nichts zurückgibt.

Wenn ich nun ein Array erzeuge und diesem den Rückgabewert der Funktion zuweise passiert nichts.

eventArray=new Array();
eventArray=document.onmousemove=watchMousePos;
alert(eventArray[0]+":"+eventArray[1]);

Die Ausgabe zeigt "undefined:undefined" an.

Gibt es einen Weg, sich die Koordinaten aus der Funktion zurück geben zu lassen?

Gruß, SPX_25

  1. Liebe(r) SPX_25,

    [ ] Du hast das Archiv durchsucht
    [ ] Du hast diesen Treffer studiert

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Hallo!

      Hmmmmm. In dem Beispiel wird pos aus der Funktion zurück gegeben. Aber das Problem ist ja, daß der Funktionsaufruf ansich nicht richtig zu funktionieren scheint...

      eventArray=document.onmousemove=watchMousePos;

      Anstelle des Arrays könnte ich auch eine Variable hinschreiben und bekäme bei alert die komplette Funktion angezeigt... :-(

      Gruß, SPX_25.

      1. Liebe(r) SPX_25,

        *seufz* Ich glaube Dein Konzept hinkt irgendwie...
        Schau Dir einfach mal meinen Mausverfolger an!

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Hallo Felix.

          Schau Dir einfach mal meinen Mausverfolger an!

          Kleine Info: dein Server liefert für den Content-Type UTF-8, das Script ist jedoch nicht dieserart kodiert. (Folge: �)

          Einen schönen Sonntag noch.

          Gruß, Mathias

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          debian/rules
          1. Lieber Mathias,

            dein Server liefert für den Content-Type UTF-8, das Script ist jedoch nicht dieserart kodiert. (Folge: �)

            das habe ich mittlerweile auch gemerkt. Ich weiß noch nicht, was ich da tun kann, da ich das Script ohne PHP ausliefere... Ich hatte bisher angenommen, dass der Server "weiß", in welcher Kodierung die Datei gespeichert ist und sie entsprechend ausliefert (auf den MIME-Typ habe ich noch überhaupt nicht geachtet).

            Was könnte ich denn da tun?

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            1. Hallo Felix.

              dein Server liefert für den Content-Type UTF-8, das Script ist jedoch nicht dieserart kodiert. (Folge: �)

              das habe ich mittlerweile auch gemerkt. Ich weiß noch nicht, was ich da tun kann, da ich das Script ohne PHP ausliefere...

              Verwende die AddCharset-Direktive des Apachen.

              Einen schönen Sonntag noch.

              Gruß, Mathias

              --
              sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
              debian/rules
              1. Liebe(r) Mathias,

                Verwende die AddCharset-Direktive des Apachen.

                bedeutet das, dass der Apache eine Textdatei, die als UTF-8 gespeichert wurde auch als UTF-8, und eine in ISO-8859-1 gespeicherte Datei eben als ISO-8859-1 ausliefert, sofern er diese "Charsets" kennt? Das wäre dann tatsächlich _die_ Lösung!

                Deinem Link nach zu urteilen regelt diese Direktive aber nur eines: Je nach Datei-Endung wird die Datei mit der durch die Direktive festgelegten Kodierung ausgegeben, egal in welcher Kodierung diese Datei tatsächlich gespeichert wurde. - Schade! Das hätte die Lösung sein können!

                So wie es aussieht, müsste ich mittels der AddHandler-Direktive (auf der von Dir verlinkten Seite) einen Ausgabehandler einrichten, der mein Dokument auf die Kodierung hin untersucht und entsprechend ausliefert... Was ein Wahnsinn!

                Bin fast genauso schlau als wie zuvor. Was nun?

                Liebe Grüße aus Ellwangen,

                Felix Riesterer.

                1. Hallo Felix.

                  Verwende die AddCharset-Direktive des Apachen.

                  bedeutet das, dass der Apache eine Textdatei, die als UTF-8 gespeichert wurde auch als UTF-8, und eine in ISO-8859-1 gespeicherte Datei eben als ISO-8859-1 ausliefert, sofern er diese "Charsets" kennt?

                  Äh, nein. Der Apache liefert sämtliche Dateien mit der eingestellten (AddCharset, AddDefaultCharset) Kodierung aus. In welcher Kodierung die jeweilige Datei nun wirklich vorliegt, interessiert ihn nicht.

                  So wie es aussieht, müsste ich mittels der AddHandler-Direktive (auf der von Dir verlinkten Seite) einen Ausgabehandler einrichten, der mein Dokument auf die Kodierung hin untersucht und entsprechend ausliefert... Was ein Wahnsinn!

                  Mich erstaunt dein Erstaunen. Dieses Verhalten des Apachen war schon seit jeher Gang und Gebe. Jeglicher Versuch, ihn automagisch die in einer Datei festgelegte Kodierung erkennen zu lassen, würde eine enorme Performanceeinbuße zur Folge haben. (Schließlich müsste *jede* einzelne angeforderte [Nurtext-]Datei nach kodierungs-typischen Bitmustern durchsucht werden. Und selbst hier kann nicht immer eindeutig die korrekte Kodierung erkannt werden.)

                  Bin fast genauso schlau als wie zuvor. Was nun?

                  Lege – wie schon gesagt – die gewünschte Kodierung mit obiger Direktive fest.

                  Einen schönen Sonntag noch.

                  Gruß, Mathias

                  --
                  sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                  debian/rules
        2. Liebe(r) SPX_25,

          *seufz* Ich glaube Dein Konzept hinkt irgendwie...
          Schau Dir einfach mal meinen Mausverfolger an!

          Liebe Grüße aus Ellwangen,

          Felix Riesterer.

          Irgendwie werd ich da nicht richtig schlau draus.

          Wenn ich mit "posElement.onmousemove=watchMousePos;" die Funktion "watchMousePos" der Variablen "onmouseover" von dem Element "posElement" zuweise, wie kann ich dann auf die Variablen "mousePosX" und "mousePosY" zugreifen, die sich in der Funktion "watchMousePos" befinden?

          1. Lieber SPX_25,

            *seufz* Ich glaube Dein Konzept hinkt irgendwie...

            die Grundidee ist, dass der Eventhandler die Koordinaten in eine global verfügbare Variable (am besten eine Eigenschaft eines eigenen Objektes) schreibt und sich dann wieder verabschiedet. Wie ein "Interrupt" im System: Er kommt, tut was, geht wieder und hinterlässt einen bleibenden Eindruck.

            An anderer Stelle holst Du Dir dann den abgespeicherten Wert aus Deiner global verfügbaren Variable (der "bleibende Eindruck") und tust etwas damit. Soweit klar?

            In Deinem Beispiel verändert die Handlerfunktion den style.top- und style.left-Wert Deines DIVs, indem sie anhand des Ereignisses die Koordinaten holt, auswertet und entsprechende Pixelwerte in die eben genannten Style-Eigenschaften schreibt.

            Noch Fragen?

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            1. Hallo Felix!

              Noch Fragen?

              Ja. Nimm's mir nicht übel, aber ich beschäftige mich erst seit kurzem intensiver mit JavaSCRIPT.

              Auf mein Beispiel bezogen... Muß ich extra ein div-Element erzeugen, um die Variablen nutzen zu können?

              Quasi nach dem Prinzip, daß irgendwo ein "unsichtbares" Element in der Seite ist, in dem die Variablen gespeichert werden und ich diese mittels  JavaSCRIPT dann auslesen kann, wann immer ich sie benötige?

              1. Liebe(r) SPX_25,

                Nimm's mir nicht übel,

                nö.

                Muß ich extra ein div-Element erzeugen, um die Variablen nutzen zu können?

                Nö. Dein Konzept hinkt deshalb, weil Du Deine Eventhandler-Funktion nicht bei Bedarf aufrufen kannst, um an Mauskoordinaten zu kommen. Diese Funktion wird aufgerufen (aber nicht von Dir), es wird ihr ein Parameter (das Event-Objekt) übergeben und das war's! Willst Du an die Koordinaten, dann musst Du sie entweder in dieser Funktion gleich "vor Ort" verarbeiten (die style-Werte Deines Tooltips anpassen), oder Du speicherst sie in einer globalen Variablen ab, um damit an anderer Stelle weiter zu arbeiten.
                Dein HTML-Element enthält übrigens keine "Variable" onmousemove, sondern eine sogenannte Eigenschaft mit diesem Namen. Du kannst diesem HTML-Element auch noch weitere Eigenschaften zuweisen, z.B. "gehoertMir = true". Der Unterschied ist der, dass Javascript bei dieser Eigenschaft den Wert für eine Ereignisüberwachung (eben das Bewegen der Maus über diesem Element) benutzt, um im Falle eine gleichnamige Funktion aufzurufen. Deshalb ist es zwecklos diese Funktion selbst aufzurufen (oder hast Du den Wert des Event-Objektes? Wozu fragst Du dann noch nach den Koordinaten?) - man muss "darauf warten", dass sie aufgerufen wird (denn nur dann kriegt die Funktion die Infos, die Du willst)!

                Jetzt klarer?

                Quasi nach dem Prinzip, daß irgendwo ein "unsichtbares" Element in der Seite ist, in dem die Variablen gespeichert werden

                Die "Variablen" sind nicht an ein HTML-Element gebunden. Es kann höchstens umgekehrt sein: Eine Variable speichert die Referenz auf ein Element. Das sieht dann so aus.

                <div id="meinDivElement">Text</div>  
                  
                <script type="text/javascript">
                
                    var globaleVariable = 5; // ist einfach so eine Variable  
                    var meinDiv = document.getElementById("meinDivElement"); // ist auch global und enthält eine Referenz auf ein <div>  
                    alert(globaleVariable); // liefert "5" ohne Anführungszeichen  
                    alert(meinDiv); // liefert "HTMLDivObject" oder so ähnlich  
                    alert(meinDiv.id); // liefert "meinDivElement"
                

                </script>

                und ich diese mittels  JavaSCRIPT dann auslesen kann, wann immer ich sie benötige?

                Das geht bei globalen Variablen immer, da sie von überall aus (eben "global") verfügbar sind! Eine Variable ist immer dann global, wenn Du kein "var " davor notierst. Aber auch mit einem "var" davor kann sie global sein, wenn sie (wie im obigen Beispiel) außerhalb einer Funktion einfach so im Quelltext notiert wurde.

                Man sollte sich das mit den globalen Variablen sehr gut überlegen, da bei einer Kombination mit mehreren Scripten das eine Script die Variable des anderen Scripts überschreiben könnte (z.B. wenn beide eine Variable "pos" verwenden). In meinem Mausverfolger, der ein gößeres Objekt ist, ist das nicht möglich (oder extremst unwahrscheinlich), daher wollte ich es Dir von der Vorgehensweise her einmal gezeigt haben.

                Liebe Grüße aus Ellwangen,

                Felix Riesterer.