Michael: Verständnisproblem mit clientX bzw. clientY

Hallo,

Ich versuche gerade einen ganz gewöhnlichen Drag & Drop Effekt auf ein DIV anzuwenden und bin allmählich am verzweifeln...

Mein Problem ist, das ich einfach nicht verstehe, wie clientX und clientY arbeiten. Ich habe mir dazu diese Seite in der SelfHTML-Referenz angesehen:

http://de.selfhtml.org/javascript/objekte/event.htm#client_x_y

Was ich absolut nicht kapiere, ist das hier:

function Mausklick (Ereignis) {
  if (!Ereignis)
    Ereignis = window.event;

Woher kommt das Wort Ereignis? Wofür ist es gut? Und was soll diese komische if-Abfrage gleich am Anfang.

Es wäre super, wenn mir das Script in oben genannten Link jemand verständlich erklären könnte.

Danke im Voraus!

  1. Hallo,

    Woher kommt das Wort Ereignis? Wofür ist es gut? Und was soll diese komische if-Abfrage gleich am Anfang.

    Das wird auf der Seite erklärt:
    http://de.selfhtml.org/javascript/objekte/event.htm#allgemeines

    Mathias

    1. Das hab ich mir jetzt ausführlich durchgelesen. Was ich nicht verstehe ist, wie der Parameter in der Funktion verwendet wird. Normalerweise übergibt man doch in den Klammern beim Funktionsaufruf einen Parameter, der dann in der Funktion an den jeweiligen Stellen eingesetzt wird.

      Zum Beispiel so:

      function quadrat (faktor)
      {
      var produkt = faktor * faktor;
      return produkt;
      }

      Und dann beim Aufruf:

      quadrat(5);

      Und in diesem Beispiel steht das Wort Ereignis "einfach so" in der Klammer ohne dass beim Funktionsaufruf ein Wert übergeben wird.

      Ich hoffe irgendwer versteht mich und kann mir das erklären...

      1. Hallo,

        Was ich nicht verstehe ist, wie der Parameter in der Funktion verwendet wird. Normalerweise übergibt man doch in den Klammern beim Funktionsaufruf einen Parameter, der dann in der Funktion an den jeweiligen Stellen eingesetzt wird

        wenn du Ereignisse über solche Zuweisungen überwachst:
        element.onevent = handlerfunktion;
        Dann wird handlerfunktion automatisch ausgeführt, wenn bei element das entsprechende Ereignis eintritt.

        Diese Funktion bekommt dann automatisch das Eventobjekt als Parameter übergeben. Das ist einfach so festgelegt (Netscape hat das einst mal erfunden). Im MSIE läuft das etwas anders, da muss man wie im Text beschrieben über window.event darauf zugreifen.

        Und in diesem Beispiel steht das Wort Ereignis "einfach so" in der Klammer ohne dass beim Funktionsaufruf ein Wert übergeben wird.

        Du selbst notierst auch nirgendwo keinen Funktionsaufruf; im Code steht nirgendwo handlerfunktion() oder ähnliches. Bei
        element.onevent = handlerfunktion;
        wird die Funktion nicht aufgerufen - genau gesagt wird das Funktionsobjekt nur in der Eigenschaft onevent gespeichert. Den Rest erledigt der Browser, der ruft die Funktion beim Eintreten des Ereignisses auf und übergibt ihr das Event-Objekt (IE ausgenommen).

        Mathias

        1. Hallo,

          Was ich nicht verstehe ist, wie der Parameter in der Funktion verwendet wird. Normalerweise übergibt man doch in den Klammern beim Funktionsaufruf einen Parameter, der dann in der Funktion an den jeweiligen Stellen eingesetzt wird

          wenn du Ereignisse über solche Zuweisungen überwachst:
          element.onevent = handlerfunktion;
          Dann wird handlerfunktion automatisch ausgeführt, wenn bei element das entsprechende Ereignis eintritt.

          Diese Funktion bekommt dann automatisch das Eventobjekt als Parameter übergeben. Das ist einfach so festgelegt (Netscape hat das einst mal erfunden). Im MSIE läuft das etwas anders, da muss man wie im Text beschrieben über window.event darauf zugreifen.

          Vielen Dank.

          Ich wusste nicht, dass das Objekt übergeben wird. Jetzt versteh ichs. Mein Drag&Drop-Effekt funktioniert jetzt auch, nur wenn man mit der Maus zu schnell wird, kommt der Layer nicht mehr nach.

          Ich hab es hier mal hochgeladen:

          http://web565.serverdrome.de/dragdrop/drag.html

          Ich hab den gesamten JS-Code in eine externe Datei ausgelagert. Kann es vielleicht daran liegen?

          1. hi,

            Mein Drag&Drop-Effekt funktioniert jetzt auch, nur wenn man mit der Maus zu schnell wird, kommt der Layer nicht mehr nach.

            "Zu schnell" bedeutet dabei, dass der Mauszeiger aus dem Objekt herausbewegt wird - der Browser kommt mit dem Rendern der Positionsveränderung nicht so schnell nach, wie du mit der Maus bist.
            Dann kannst du den Event onmousemove nicht mehr über deinem Objekt #drag abfangen und verarbeiten - weil er schlicht nicht mehr auf diesem auftritt.

            Es könnte helfen, den Event über document abzufangen - das wird gerade aktuell in diesem Thread diskutiert.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }