Struppi: Mausposition über positionierten Layer (IE)

Hi,

hier erstmal der Link an dem das Phänomen auftaucht:
http://home.arcor.de/struebig/js/lib/mouse-test.html

Das Problem ist folgendes, wie kann man im IE (in MZ/OP funktioniert es) die absoluten Koordinaten rauskriegen.

Für die die zu faul sind auf der Seite mal zu gucken, die Funktion, mit der ich die Mauskoordinaten auslese:

function mouse_pos(evt, obj)
{
    if(!evt)  evt = window.event;
    var p = {left:0, top:0};
    p.left = evt.pageX ? evt.pageX : evt.offsetX + document.body.scrollLeft;
    p.top = evt.pageY ? evt.pageY : evt.offsetY + document.body.scrollTop;

var debug = '(left/top) ' + p.left + '/' + p.top;

window.status = debug
    return true;
}

Wie gesagt dies funktioniert so lang, bis man über einen positionierten Layer fährt, dann werden nur noch die relativen Koordinaten auf dem Layer ausgegeben.

Steckt da im window.event Objekt noch eine brauchbare Information?

Struppi.

  1. hi,

    Wie gesagt dies funktioniert so lang, bis man über einen positionierten Layer fährt, dann werden nur noch die relativen Koordinaten auf dem Layer ausgegeben.

    dann addiere doch die absoluten koordinaten dazu (diese solltest du ja haben, da sie ja von _dir_ vorgegeben wurden).

    gruss,
    wahsaga

  2. Wie gesagt dies funktioniert so lang, bis man über einen positionierten Layer fährt, dann werden nur noch die relativen Koordinaten auf dem Layer ausgegeben.

    Nein, werden sie nicht. Du verwendest offset[X|Y]

    Steckt da im window.event Objekt noch eine brauchbare Information?

    client[X|Y]

    1. client[X|Y]

      Ahja, wie komm ich nur auf offset?
      keine Ahnung, aber danke erstmal, das scheint ja brauchbar zu sein.

      Struppi.

    2. Wie gesagt dies funktioniert so lang, bis man über einen positionierten Layer fährt, dann werden nur noch die relativen Koordinaten auf dem Layer ausgegeben.

      Nein, werden sie nicht. Du verwendest offset[X|Y]

      Steckt da im window.event Objekt noch eine brauchbare Information?

      client[X|Y]

      Also im IE 4 hat das funktioniert im IE 6 funktioniert es wieder nicht, da client dort nicht den Scrolloffset berücksichtigt.

      Ich ha jetz das:
      p.left = e.pageX ? e.pageX : e.clientX + document.body.scrollLeft;
      p.top = e.pageY ? e.pageY : e.clientY + document.body.scrollTop;

      aber scrollLeft/Top ist im IE 6 immer 0, d.h. die obere Ecke im Browserfenster ist sind nicht die Koordinaten des Dokumentes. Was will der IE 6 noch?

      Struppi.

      1. p.left = e.pageX ? e.pageX : e.clientX + document.body.scrollLeft;
        p.top = e.pageY ? e.pageY : e.clientY + document.body.scrollTop;

        Das ist soweit korrekt.

        aber scrollLeft/Top ist im IE 6 immer 0, d.h. die obere Ecke im Browserfenster ist sind nicht die Koordinaten des Dokumentes. Was will der IE 6 noch?

        Doch, eigentlich schon. Zwei Dinge sind möglich (kenne Deinen Anwendugsfall nicht): entweder Du solltest eine Event-Überwachung auf SCROLL fahren, und jedes mal scrollLeft/Top in globale Variablen schreiben, die Du dann referenzierst... oder: was für eine DTD verwendest Du?

        1. p.left = e.pageX ? e.pageX : e.clientX + document.body.scrollLeft;
          p.top = e.pageY ? e.pageY : e.clientY + document.body.scrollTop;

          Das ist soweit korrekt.

          aber scrollLeft/Top ist im IE 6 immer 0, d.h. die obere Ecke im Browserfenster ist sind nicht die Koordinaten des Dokumentes. Was will der IE 6 noch?

          Doch, eigentlich schon. Zwei Dinge sind möglich (kenne Deinen Anwendugsfall nicht): entweder Du solltest eine Event-Überwachung auf SCROLL fahren, und jedes mal scrollLeft/Top in globale Variablen schreiben, die Du dann referenzierst... oder: was für eine DTD verwendest Du?

          http://home.arcor.de/struebig/js/lib/mouse-test.html
          Es geht eigentlich nur um's Prinzip, bzw. wie bekomm ich die Mauskoordintaten, wenn diese über einem postionierten Element ist.

          Dein Lösungsansatz ist: für den IE 6 muss eine Workaround geschaffen werden?
          Das ist ja hart, ich dachte die Browser kommen sich immer näher und dann das.

          Na gut, wie gesagt es ist nur ein Ansatz für eine Mausbibliothek. Lass ich das mal.

          Struppi.

          1. Dein Lösungsansatz ist: für den IE 6 muss eine Workaround geschaffen werden?

            Also, ich hab's mal ausprobiert: mit der von Dir verwendeten DTD ist document.body.offsetWhatever nicht mehr anwendbar. document.documentElement.offsetWhatever schon :)