Jeff: offsetX für Netscape/Firefox ???

hallo,

ich habe ein pulldown menu system, wenn die ganze web-site links im browser ausgerichtet ist gibts kein problem mit der positionierung der layer/pulldown-menu's, wenn nun aber die web-site zentriert im browser ausgerichtet ist, muss ich die x-pos der pulldown-menu layers berechnen, im IE ist dies auch ganz einfach mit offsetX zu erreichen, aber im Netscape bzw. Firefox (wahrscheinlich auch Opera) schaffe ich es einfach nicht die x-koordinaten des aufrufenden links zu bestimmen.

habe auch schon im archiv gesucht aber leider nichts gefunden, deshalb habe ich eine "light" version mit vereinfachter funktion hier gepostet (sorry wegen eventuell zu langem post!), vielleicht findet jemand einen weg, bin für jede hilfe dankbar...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script type="text/javascript">

var isover = false;

if (navigator.appName == 'Netscape') {
    window.captureEvents(Event.MOUSEOVER);
    window.onmouseover=mauspos;
}

function mauspos(e) {
        if (navigator.appName == 'Netscape') {
           xpos = e.pageX;
          }
}

function PopDown()
 {
     if(!isover) { eval("window.document.all.M1.style.visibility='hidden'"); }
 }

function PopUp(p)
 {
     if(navigator.appVersion.indexOf("MSIE") > 0) {
      anfX=window.event.clientX-window.event.offsetX;
      eval("window.document.all.M" + p + ".style.left=anfX");
      eval("window.document.all.M" + p + ".style.visibility='visible'");
      cx=window.event.clientX;
      cxoffset=window.event.offsetX;
//      alert("MSIE\n\nX-Pos: " + cx + "\nX-Abs: " + cxoffset + "\nPopup: " + anfX);
     }
     else {
      mauspos;
      eval("window.document.all.M" + p + ".style.left=xpos");
      eval("window.document.all.M" + p + ".style.visibility='visible'");
//      alert("NS/MOZ\n\nX-Pos: " + xpos);
     }
 }

function over()
 {
 isover = true;
 }

function out()
 {
 isover = false;
 setTimeout('PopDown()',2000);
 }

</script>

</head>

<body>

<div id="M1" style="z-index:2;left:0px;position:absolute;top:48px;visibility:hidden;" onMouseOver="over()" onMouseOut="out()">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td>Submenu</td></tr></table>
</div>

<div align="center">
<table width="300" border="0" cellspacing="2" cellpadding="2">
<tr>
<td bgcolor="#EEEEEE"><a href="#" onmouseover="PopDown();PopUp('1');over()" onmouseout="out()">Menu1</a></td>
<td bgcolor="#EEEEEE"><a href="#" onmouseover="PopDown();PopUp('1');over()" onmouseout="out()">Menu2</a></td>
<td bgcolor="#EEEEEE"><a href="#" onmouseover="PopDown();PopUp('1');over()" onmouseout="out()">Menu3</a></td>
</tr>
</table>
</div>

</body>
</html>

  1. hi,

    ich habe ein pulldown menu system, wenn die ganze web-site links im browser ausgerichtet ist gibts kein problem mit der positionierung der layer/pulldown-menu's, wenn nun aber die web-site zentriert im browser ausgerichtet ist, muss ich die x-pos der pulldown-menu layers berechnen

    mir scheint, mit absoluter positionierung hast du dich noch nicht intensiver beschäftigt?

    ich kann so auf die schnelle für dein vorhaben keine notwendigkeit für javascript-gewurstel erkennen, CSS sollte für die richtige positionierung durchaus ausreichend sein.

    gruß,
    wahsaga

    --
    Rest in peace, Dimebag!
    #
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. mir scheint, mit absoluter positionierung hast du dich noch nicht intensiver beschäftigt?

      ich kann so auf die schnelle für dein vorhaben keine notwendigkeit für javascript-gewurstel erkennen, CSS sollte für die richtige positionierung durchaus ausreichend sein.

      ich weiss schon was du meinst, leider muss ich aber vorher die x-pos bestimmen wo das pulldown menu erscheinen soll (clientX-offsetX), und genau das funktioniert im netscape/firefox nicht...

      bitte schau dir mal mein script an, und starte es einmal im internet explorer und dann im firefox oder netscape, du wirst gleich erkennen wo das problem liegt...

      habe hier im forum-archiv einen hinweis gefunden, da wollte jemand das gleich erreichen wie ich, fazit in diesem thread war per getelementbyid die x-pos des aufrufenden links zu ermittlen, es wäre dann egal wo genau der user hinklickt...

      gr
      jeff

      1. hi,

        ich weiss schon was du meinst, leider muss ich aber vorher die x-pos bestimmen wo das pulldown menu erscheinen soll (clientX-offsetX), und genau das funktioniert im netscape/firefox nicht...

        warum musst du das?
        wirklich sicher, dass eine positionierung in bezug auf ein anderes element nicht das gewünschte erzielen kann?

        bitte schau dir mal mein script an

        sobald du ein online-beispiel bereitstellst, gerne.

        gruß,
        wahsaga

        --
        Rest in peace, Dimebag!
        #
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. ich weiss schon was du meinst, leider muss ich aber vorher die x-pos bestimmen wo das pulldown menu erscheinen soll (clientX-offsetX), und genau das funktioniert im netscape/firefox nicht...

          wirklich sicher, dass eine positionierung in bezug auf ein anderes element nicht das gewünschte erzielen kann?

          daran habe ich auch schon gedacht (getElementbyID), leider kam ich zu keinem funktionierenden ergebnis...

          bitte schau dir mal mein script an
          sobald du ein online-beispiel bereitstellst, gerne.

          http://members.chello.at/pleasure/test.html

          im IE funkt alles super, im Firefox probleme mit positionierung und Netscape 7.1 dt. hat probleme mit den layern wie ich soeben bemerkt habe...

          danke + gr
          jeff

          1. Hi,

            http://members.chello.at/pleasure/test.html

            ganz übel:
               if (navigator.appName == 'Netscape')
               ...
               if(navigator.appVersion.indexOf("MSIE") > 0)
               else { ... eval("window.document.all.M"
            auf den UserAgent kannst Du Dich nicht verlassen und wieso in aller Welt konfrontierst Du nicht-IEs mit document.all?

            Den ganzen Firlefanz brauchst Du nicht, wenn Du Dein HTML vernünftig strukturierst und dafür sorgst, daß die Untermenüpunkte innerhalb des Elements sind, daß die Hauptmenüpunkte enthält. Dann hast Du einen verläßlichen Bezug für die Positionierung.

            freundliche Grüße
            Ingo