Probleme mit Firefox -> Div-Layer

Diskutiere und helfe bei Probleme mit Firefox -> Div-Layer im Bereich Webmaster Support, Scripts, etc im SysProfile Forum bei einer Lösung; Hallo! Ich bin für meine Arbeit an einem Onlineshop am arbeiten, möchte den Kunden auch die Möglichkeit bieten können, per MouseOver bei einem Bild... Dieses Thema im Forum "Webmaster Support, Scripts, etc" wurde erstellt von Spacerat, 9. März 2007.

  1. Spacerat
    Spacerat ٩(̾●̮̮̃̾•̃̾)۶ /dev/null
    Registriert seit:
    25. Dezember 2006
    Beiträge:
    8.597
    Zustimmungen:
    196
    Name:
    Christian
    1. SysProfile:
    11226
    Steam-ID:
    Spacerat2911

    Hallo!

    Ich bin für meine Arbeit an einem Onlineshop am arbeiten, möchte den Kunden auch die Möglichkeit bieten können, per MouseOver bei einem Bild ein kleines Layer angezeigt zu bekommen, welches die Beschreibung enthält. Funktioniert im IE super, im FF allerdings nicht (da is was faul, ich weiß).

    Mal hier das JavaScript:

    Code:
    <script type="text/javascript">
     descarray = new Array(
     "Beschreibung 1",
     "Beschreibung 2",
     "Beschreibung 3",
     "Beschreibung 4"
     );
     overdiv="0";
     function popLayer(a)
     {
      if(!descarray[a])
      {
       descarray[a]="<font color=red>Beschreibung fehlt</font>";
      }
      pad="0"; bord="0 bordercolor=black";
      desc = "<table cellspacing=0 cellpadding="+pad+" border="+bord+" bgcolor='#000000'><tr><td>\n"
              +"<table cellspacing=0 cellpadding=10 border=0 width=100%><tr><td bgcolor=#017CC2><p align=\"center\" style=\"font-size: 12; color: white\">\n"
              +descarray[a]
              +"</p>\n</td></tr></table>\n"
              +"</td></tr></table>";
      document.getElementById("object1").innerHTML=desc;
                document.getElementById("object1").style.position = "absolute";
      document.getElementById("object1").style.left=x+15;
      document.getElementById("object1").style.top=y-5;
      return desc;
     }
     function hideLayer()
     {
      if (overdiv == "0")
      {
       document.getElementById("object1").style.top="-500";
           }
     }
     var isNav = (navigator.appName.indexOf("Netscape") != -1);
     function handlerMM(e)
     {
      x = (e) ? e.pageX : event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
      y = (e) ? e.pageY : event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
     }
     if (document.layers) alert("1");
     document.onmousemove = handlerMM;
          if (document.all){
             // Microsoft-Modell
          } else if (typeof(document.getElementById)=="function") {
             // wenn Netscape-Modell
             for (var i=1; i<=document.adminForm.zahlungsart.length; i++){
                name = ("zahlung"+i);
                document.getElementById("zahlung"+i).style.visibility ="hidden";
                document.getElementById("zahlung"+i).style.position = "absolute";
                document.getElementById("zahlung"+i).style.display = "none";
              }
          } else {
             // wenn Modell nicht unterstützt
             alert("Ihr Browser wird nicht unterstützt.");
          }
    </script>
    und der DIV:

    Code:
    <div id="object1" style="position:absolute; background-color:FFFFDD; color:black; border-color:black;border-width:20; visibility:show; left:25px; top:-100px; z-index:+1" onmouseover="overdiv=1;"  onmouseout="overdiv=0; setTimeout('hideLayer()',1)"></div>

    Im IE bekomme ich ein wunderbares Layer angezeigt, welches sich auch in der Höhe und Breite anpasst, der FF zeigt mir gar nichts an.
    Hier mal ein Beispiel (es fehlen Background, etc):
    http://sunmega.f2k-hosting.net/hk.html
    Wenn ich das nicht schnell bräuchte würd ich gar nicht nachfragen, es eilt nur sehr :(

    Ich danke euch schon Mal im Vorraus für eure Hilfe!

    MfG
    SynN
     
  2. Spacerat
    Spacerat ٩(̾●̮̮̃̾•̃̾)۶ /dev/null
    Themenstarter
    Registriert seit:
    25. Dezember 2006
    Beiträge:
    8.597
    Zustimmungen:
    196
    Name:
    Christian
    1. SysProfile:
    11226
    Steam-ID:
    Spacerat2911

    Bisher konnte mir also leider niemand helfen. Ich weiß aber nun, dass der Fehler beim onmousemove() auftritt, d.h. dass der DIV-Tag sonst soweit ok ist. Der DIV-Tag hat eine Position von -100, die wird beim mousemove nicht geändert.
    Hat jemand ne Ahnung wie man das ändern kann?

    Code:
    function handlerMM(e)
     {
      x = (e) ? e.pageX : event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
      y = (e) ? e.pageY : event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
     }
     document.onmousemove = handlerMM;
    Der bereinigte Code des Javascript sieht insgesamt so aus:

    Code:
    <script type="text/javascript">
     descarray = new Array(
     "Beschreibung 1",
     "Beschreibung 2",
     "Beschreibung 3",
     "Beschreibung 4"
     );
     var overdiv="0";
     function popLayer(a)
     {
      if(!descarray[a])
      {
       descarray[a]="<font color=red>Beschreibung fehlt</font>";
      }
      pad="0"; bord="0 bordercolor=black";
      desc = "<table cellspacing=0 cellpadding="+pad+" border="+bord+" bgcolor='#000000'><tr><td>\n"
              +"<table cellspacing=0 cellpadding=10 border=0 width=100%><tr><td bgcolor=#017CC2><p align=\"center\" style=\"font-size: 12; color: white\">\n"
              +descarray[a]
              +"</p>\n</td></tr></table>\n"
              +"</td></tr></table>";
      document.getElementById("object1").innerHTML=desc;
                document.getElementById("object1").style.position = "absolute";
      document.getElementById("object1").style.left=x+15;
      document.getElementById("object1").style.top=y-5;
     }
     function hideLayer()
     {
      if (overdiv == "0")
      {
       document.getElementById("object1").style.top="-500";
           }
     }
     var isNav = (navigator.appName.indexOf("Netscape") != -1);
     function handlerMM()
     {
      x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
      y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
     }
     document.onmousemove = handlerMM;
    </script>
    und nochmal der DIV:

    Code:
    <div id="object1" style="position:absolute; background-color:FFFFDD; color:black; border-color:black;border-width:20; visibility:show; left:25px; top:-100px; z-index:+1" onmouseover="overdiv=1;"  onmouseout="overdiv=0; setTimeout('hideLayer()',1)"></div>
    Wie gesagt es scheint am document.onmousemove zu liegen...
    bitte helft mir ;_;
     
  3. alex
    alex killed in action
    Registriert seit:
    30. Dezember 2006
    Beiträge:
    8.187
    Zustimmungen:
    282
    1. SysProfile:
    63644
    2. SysProfile:
    18897
    40873
    Hi SynN,

    probier's mal mit allen Browsern aus, die die Gecko-Engine zur Darstellung nutzen
    (d.h. Firefox, Mozilla Browser, K-Meleon, UBrowser, Netscape Navigator 8 usw.)

    wenn's bei allen nicht geht, dann liegt's halt irgendwie an der art, wie die gecko-
    engine die seiten darstellt

    besser kann ich dir leider auch nicht helfen, da ich fast keine erfahrung mit
    javascript hab ;)

    Gruß
    alexirsi
     
  4. Kakerlake
    Kakerlake Grünschnabel
    Registriert seit:
    25. April 2007
    Beiträge:
    1
    Zustimmungen:
    0

    Du wirsts vieleicht nicht glauben aber ein kleiner Blick in die Fehlerkonsole hätte Wunder gewirkt.
    Code:
    document.getElementById("object1").style.left=x+15;
    document.getElementById("object1").style.top=y-5;[FONT=monospace]
    [/FONT]
    Diese Zeilen sind völlig falsch, das der IE die interpretieren kann ist pure Glückssache.

    Wie du hier anscheinend erkannt hast
    Code:
    document.getElementById("object1").style.top="-500";
    ist die Position kein numerischer Wert sondern ein STRING. Allerdings muss dieser String mit den Zeichen "px", "pt" oder "em" enden da es sich um eine Höhenangabe handelt.

    Somit sollte dan folgender Code funktionieren:
    Code:
    document.getElementById("object1").style.left= (x+15)+"px";
    document.getElementById("object1").style.top= (y-5)+"px";[FONT=monospace]
    [/FONT]
    Und da du ansonsten gleich mit dem nächsten Fehler ankommen wirst...
    Code:
    document.getElementById("object1").style.top="-500px";
     
    #4 Kakerlake, 25. April 2007
Thema:

Probleme mit Firefox -> Div-Layer

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden