Kalle_B: drag & drop - Problem beim Initialisieren

Hallöle,

ein schönes Tool ist drag & drop von http://javascript.jstruebig.de/javascript/67/#more-67, mit dem ich hier experimentiere:
http://osmer.de/dragdrop.php

Allerdings "springen" meine HTML- Objekte an eine andere Position (linke obere Ecke offenbar in die Mitte der Tabellenzelle), wenn ich sie nach 3 sec initialisiere. Deren Position wird also nicht richtig erfasst. Ich vermute, mit der folgenden Funktion, die ich leider nicht verstehe, um sie anpassen zu können:

  
    this.getPos = function()  
    {  
         var o = move;  // ???  
         var t = l = 0;  
         if(typeof o.offsetTop != 'undefined')  
         {  
              t += o.offsetTop;  
              l += o.offsetLeft;  
         }  
         return [t, l];  
    }  

Wer blickt da durch?

Lieben Gruß, Kalle

  1. Hallo Kalle_B,

    die Objekte werden, damit sie bewegt werden können, auf "position:absolut" gesetzt. Dadurch fallen sie aus dem Elementfluss, sie beanspruchen keinen Platz mehr. So rückt der Rest nach oben.

    Gruß, Jürgen

    1. Hallo Jürgen,

      die Objekte werden, damit sie bewegt werden können, auf "position:absolut" gesetzt.

      Ja, das habe ich gesehen. Deshalb habe ich versucht, davor die Position zu "vermessen" und sie hinterher wieder zuzuordnen:

        
            var t  = document.getElementById('fix_body').offsetTop  +document.getElementById('tabelle_2').offsetTop  +move.offsetTop;  
            var l  = document.getElementById('fix_body').offsetLeft +document.getElementById('tabelle_2').offsetLeft +move.offsetLeft;  
               move.style.position = 'absolute';  
            move.style.top = t + 'px';  
            move.style.left = l + 'px';  
      
      

      Dadurch fallen sie aus dem Elementfluss, sie beanspruchen keinen Platz mehr. So rückt der Rest nach oben.

      Hmm, dann sollte doch wenigstens das erste Element ... *ausprobier, Elemente sortier*

      Danke dir, das ist der richtige Ansatz. Das erste Element bleibt stehen. Also muss ich erst alle Elemente vermessen und dann initialisieren.

      Oder dafür sorgen, dass die Hülle nicht zusammenfällt, wenn die Luft raus ist.

      Gruß, Kalle

      1. Oder dafür sorgen, dass die Hülle nicht zusammenfällt, wenn die Luft raus ist.

        oder alle Elemente auf deiner Seite positionieren. Der Punkt ist, eine Element was verschoben werden soll, muss positioniert sein, daran führt auch kein Weg herum. Mit ein wenig Aufwand könnte man auch eine Kopie des Objektes erstellen und dann mit visibility unsichtbar machen.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Hallo, Struppi,

          das .js - Script ist doch von dir? Kannst es gerne mit meiner kleinen Rputinen ergänzen.

          Mit ein wenig Aufwand könnte man auch eine Kopie des Objektes erstellen und dann mit visibility unsichtbar machen.

          Nicht nötig, ich habe in einem Durchlauf den Objekten ihre top- und left- Werte zugeordnet, indem ich alle Parent- Werte ab body- tag herangezogen habe:

            
          var l, t;  
          function vermessenObjekt(o)  
          {  
            t  = document.getElementById('dragdrop').offsetTop  
                +document.getElementById('fix_body').offsetTop  
                +document.getElementById('zelle_1').offsetTop  
                +o.offsetTop;  
            l  = document.getElementById('dragdrop').offsetLeft  
                +document.getElementById('fix_body').offsetLeft  
                +document.getElementById('zelle_1').offsetLeft  
                +o.offsetLeft  
                +50;  
          //o.style.position = 'absolute';  
            o.style.top  = t + 'px';  
            o.style.left = l + 'px';  
          }  
          
          

          Dass die Objekte sich das merken können, klappt vielleicht nur zufällig, denn sie sind ja noch nicht auf absolute gesetzt. Das macht dann im nächsten Durchgang dein Tool. Und siehe da- sie bleiben an Ort und Stelle, schaust du hier: http://osmer.de/dragdrop.php

          Nur ein Macromedia- Objekt verweigert sich. Im Prinzip ist es auch verschiebbar, aber Makromedia deckt da was ab, der Verschiebe- Cursor kommt nicht.

          Und wenn ich einen div drumrumsetze, bricht die Positionierung im Firefox weg, wahrscheinlich ein bug.

          Aber so bin ich erstmal zufrieden, danke für dein Tool.

          Kalle