<DIV> zentrieren abhängig von größe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • <DIV> zentrieren abhängig von größe

    Hi@all

    Ich versuche einen Container nachträglich zu platzieren und Größenmäßig anzupassen.
    Leider funktioniert es immer erst auf den zweiten Klick ???

    Das Script:
    PHP-Code:
    function MM_showHideLayers() 

     
    //v6.0
     
    var i,p,v,t,obj,sW=0,sH=0,oW=0,oH=0,args=MM_showHideLayers.arguments;
     for (
    i=0i<(args.length-2); i+=3
     if ((
    obj=MM_findObj(args[i]))!=null
     {
      
    v=args[i+2];
      
    t=args[i+1];
      if (
    obj.style)
      {
       
    v=(v=='show')?'block':(v=='hide')?'none':v
      }

      
    obj.style.display  v;  
      
    // Position berechnen
      
    sW document.body.offsetWidth;
      
    sH document.body.offsetHeight;
      var 
    bild=document.getElementById('picture');
      
    pW bild.offsetWidth;
      
    pH bild.offsetHeight;
      
    oW obj.offsetWidth;
      
    oH obj.offsetHeight;
      
    // Wenn Bild größer wie Bildschirm Objekt auf Bildschrimgröße setzen
      
    if( pH sH 
      {
       
    oH = (sH*90/100);
       
    obj.style.height oH "px";
       
    obj.style.top = ((sH/2)-(oH/2)) + "px";   
       
    obj.style.overflow "scroll";
      }
      else
      {
       
    // Layer anzeigen
       
    obj.style.top = ((sH/2)-(oH/2)) + "px";
      }
      
    obj.style.left = ((sW/2)-(oW/2)) + "px";  
      
    obj.style.position "fixed";
      
    // Textausgabe
      
    if(t)
      {
       
    document.getElementById('text').innerHTML t;
       
    document.getElementById('text').style.display "block";
      }
      else
      {
       
    document.getElementById('text').innerHTML "";
       
    document.getElementById('text').style.display "none";
      }
      
    obj.style.display  "none"  ;
      
    obj.style.display  v;  
     }
    }
    //--> 
    Aufruf mit:
    PHP-Code:
    MM_showHideLayers('layer','','show'
    Der Layer:
    PHP-Code:
    <!-- Beginn Layer Bildanzeige -->
    <
    div id="layer" style="position:absolute; top:0 left:0; z-index:1; border: 2px solid black; 
    background:#FFFFFF; padding:5px; display:none;"
    >
    <
    div style="position:absolute; right:5px; width:18px; border: 1px solid black; 
    background:#FFFFFF; font-weight:bold; text-align:center; vertical-align:middle; display:inline; "
    >
    <
    a href="javascript:MM_showHideLayers('layer','','hide')" 
    onmouseover="top.status='LAYER SCHLIESSEN';return true;" 
    title="SCHLIESSEN" 
    style="text-decoration:none; color:#000;"><b>x</b></a></div>
    <
    div id="text" style="color:#000000; font-weight:bold; display:none;"></div>
    <
    img src="http://www.php-resource.de/forum/images/null_pix.gif" id="picture" 
    style="cursor:pointer; border:1px solid black;" title="Klick -> Close" alt="" 
    onclick="javascript:MM_showHideLayers('layer','','hide')" />
    </
    div>
    <!-- 
    Ende Layer Bildanzeige --> 
    Hinweis: Der Inhalt (meistens ein Bild) für den Layer wird zuvor durch eine andere Funktion geladen.

    Also, wie gesagt, das Script funktioniert soweit, aber leider erst wenn man den Lnk-Aufruf ein zweites mal anklickt,
    beim ersten Klick wird zwar der Layer angezeigt, aber weder größe noch Position stimmen,
    und wenn zuvor ein größer Inhalt geladen wurde bleibt der Layer groß bis man ein zweites mal auf den kleineren Inhalt klickt.

    Hoffe auf Verständnis und bitte um Hilfe.
    Thx@all
    Zuletzt geändert von Prominenter; 24.11.2011, 16:33. Grund: Umbruch eingefügt

  • #2
    http://www.php-resource.de/forum/php...html#umbrechen
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Die Fehlerkonsole von Firebug sagt:
      MM_findObj is not defined
      Peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Naja, die Funktion ist hier im Forum nicht implementiert,weil die ja funktioniert, die sucht übrigens nur den zu ändernden Layer und funktioniert problemlos.

        Aber hier nochmal das ganze Script:
        PHP-Code:
        <!--
        function 
        MM_reloadPage(init)
        {
         
        //reloads the window if Nav4 resized
         
        if (init==truewith (navigator
         {
          if ((
        appName=="Netscape")&&(parseInt(appVersion)==4)) 
          {
           
        document.MM_pgW=innerWidthdocument.MM_pgH=innerHeightonresize=MM_reloadPage;
          }
         }
         else if (
        innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgHlocation.reload();
        }
        MM_reloadPage(true);

        function 
        MM_findObj(nd
        {
         
        //v4.01
         
        var p,i,x;  if(!dd=document;
         if((
        p=n.indexOf("?"))>0&&parent.frames.length
         {
          
        d=parent.frames[n.substring(p+1)].documentn=n.substring(0,p);
         }
         if(!(
        x=d[n])&&d.allx=d.all[n];
         for (
        i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
         for(
        i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
         if(!
        && d.getElementByIdx=d.getElementById(n);
         return 
        x;
        }

        function 
        MM_showHideLayers() 

         
        //v6.0
         
        var i,p,v,t,obj,sW=0,sH=0,oW=0,oH=0,args=MM_showHideLayers.arguments;
         for (
        i=0i<(args.length-2); i+=3
         if ((
        obj=MM_findObj(args[i]))!=null
         {
          
        v=args[i+2];
          
        t=args[i+1];
          if (
        obj.style)
          {
           
        v=(v=='show')?'block':(v=='hide')?'none':v
          }

          
        obj.style.display  v;  
          
        // Position berechnen
          
        sW document.body.offsetWidth;
          
        sH document.body.offsetHeight;
          var 
        bild=document.getElementById('picture');
          
        pW bild.offsetWidth;
          
        pH bild.offsetHeight;
          
        oW obj.offsetWidth;
          
        oH obj.offsetHeight;
          
        // Wenn Bild größer wie Bildschirm Objekt auf Bildschrimgröße setzen
          
        if( pH sH 
          {
           
        oH = (sH*90/100);
           
        obj.style.height oH "px";
           
        obj.style.top = ((sH/2)-(oH/2)) + "px";   
           
        obj.style.overflow "scroll";
          }
          else
          {
           
        // Layer anzeigen
           
        obj.style.top = ((sH/2)-(oH/2)) + "px";
          }
          
        obj.style.left = ((sW/2)-(oW/2)) + "px";  
          
        obj.style.position "fixed";
          
        // Textausgabe
          
        if(t)
          {
           
        document.getElementById('layer_text').innerHTML t;
           
        document.getElementById('layer_text').style.display "block";
          }
          else
          {
           
        document.getElementById('layer_text').innerHTML "";
           
        document.getElementById('layer_text').style.display "none";
          }
          
        obj.style.display  "none"  ;
          
        obj.style.display  v;  
         }
        }
        //--> 

        Kommentar


        • #5
          Ich bekomme immer noch einen Script-Fehler. Stell mal das komplette Beispiel online.

          Peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Hi@all
            PRELOAD
            Also immer dort wo Bilder geöffnet werden sollen (alle Bilder mit Cursorointer).

            Thx@all

            Kommentar


            • #7
              Ich habe mir das mal angesehen. Keine Ahung, was dieser Dreamweaver-Pseudo-Javascript-Code macht, aber mir ist aufgefallen, dass es im Quelltext kein Element mit der ID "picture" gibt. Möglicherweise wird das nach dem ersten Einblenden erzeugt? Ich vermute mal, dass es daher bei dem folgenden Code Probleme geben könnte:
              PHP-Code:
              var bild=document.getElementById('picture');
              pW bild.offsetWidth;
              pH bild.offsetHeight;
              ...
              if( 
              pH sH 
              An der Stelle könntest du ansetzen. Ist aber nur eine Vermutung.

              Peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                @kropff

                ich habe inzwischen ein paar ID's umbenennen müssen.
                Das besagte Picture findest du nun als ID='layer_picture' ganz unten im Quellcode (<!-- Beginn Layer Bildanzeige -->)

                Natürlich habe ich auch das Script entsprechend angepasst und wie gesagt soweit alles gut, nur eben das man es quasi erst zweimal aufrufen muss,damit die Position und Skalierung übernommen wird.


                Thx@all

                Kommentar


                • #9
                  wenn das layer_picture-Teil erst "da unten" im Quellcode auftaucht, deine JS-Funktion aber schon im Head drauf zugreifen will , dann geht das nicht - beim 2ten Aufbau hat er dann wohl die ganze Seite geparst und er findet das Objekt im DOM-Baum ... ergo bau mal sowas wie DOMReady ein, damit er erst den kompletten DOM-Baum baut und DANN versucht zu manipulieren
                  [font=Verdana]
                  Wer LESEN kann, ist klar im Vorteil!
                  [/font]

                  Kommentar


                  • #10
                    @eagle275

                    Ich hab auch schon das Script an das Ende der Seite gepackt, also nach dem 'layer_picture', hat auch nichts gebracht.

                    Die Funtion im Script wird doch sowieso erst beim Aufruf über den Link geladen und ausgeführt, ist es da nicht egal wo das Script steht?

                    DOMReady ??? Hilfe

                    Thx@all

                    Kommentar


                    • #11
                      Sorry, aber durch diesen Pseudo-JavaScript-Müll vom Dreamweaver wühl ich mich nicht durch. Ein Tipp: lerne es vernünftig, dann helfe ich dir gerne weiter. Und wohl auch einige andere hier im Forum. Aber DW-Code ist ein no-go, da den auf Anhieb keiner blickt.

                      Gruß
                      Peter
                      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                      Meine Seite

                      Kommentar


                      • #12
                        Zitat von Kropff Beitrag anzeigen
                        ...Pseudo-JavaScript-Müll vom Dreamweaver ...
                        Dreamweaver ??? - Nie benutzt !!!

                        Kommentar


                        • #13
                          Zitat von Prominenter Beitrag anzeigen
                          Dreamweaver ??? - Nie benutzt !!!
                          Dann hast du dir diesen Code irgendwo zusammengeklaubt und angepasst. Aber alles mit function MM_irgendwas ist gewöhnlich vom Dreamweaver. Das MM steht noch für die alte Firmenbezeichnung Macromedia.

                          Peter
                          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                          Meine Seite

                          Kommentar


                          • #14
                            Ja durchaus möglich, das einige Sachen aus verschiedenen Scripten 'zusammengeklaubt' sind, aber das tut doch der Sache ansich nichts ab - oder ???

                            Thx@all

                            Kommentar


                            • #15
                              Zitat von Prominenter Beitrag anzeigen
                              aber das tut doch der Sache ansich nichts ab - oder ???
                              Um da den Fehler zu finden, müsste ich mich wahrscheinlich auch durch den Original-Dreamweavercode wühlen. Und der ist so dermaßen unleserlich, dass ich mir das nicht antue. Programmier das mal händisch nach. Einen großen Teil des notwendingen(!) Codes hast du ja schon.

                              Peter
                              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                              Meine Seite

                              Kommentar

                              Lädt...
                              X