Home
 
· Hauptseite: Drag&Drop, DHTML für Bilder und Layer
· Optionale Kommandos
· Beispiele
· Geschichte der Updates
· Download
 

Referenz: DHTML API, mit JavaScript Drag & Drop Elemente steuern
 
Drag&Drop BildDrag & Drop Bild
Verwenden Sie für DHTML-Operationen soweit wie möglich die Funktionen und Eigenschaften, die diese Bibliothek zur Verfügung stellt. Wenn Sie beispielsweise zur Größenänderung eines Drag-Drop-Elements nicht die bibliothekseigene resizeTo()- Methode, sondern fremden JavaScript-Code verwenden, wird wz_dragdrop.js nicht mehr funktionieren. Denn seine intern verwalteten Daten (hier: Breite und Höhe des Elements) werden dann nicht mehr mit der Realität übereinstimmen. Überflüssig zu erwähnen, dass Sie bei Verwendung dieses API wahrscheinlich auf viel einfachere Weise viel zuverlässigere Ergebnisse erhalten...
 
 
 
Notation, um ein Element anzusprechen ("ElementName" sei der Bildname bzw. die Layer-ID, die SET_DHTML() übergeben wurde):
dd.elements["ElementName"]  oder dd.elements.ElementName oder dd.elements[i] (Index des Elements im Array dd.elements aller DragDrop-Elemente)
 
 
Eine Eigenschaft eines Elements verwenden:
dd.elements.ElementName.eigenschaft oder
dd.elements["ElementName"].eigenschaft
 
 
Notation für eine Methode:
dd.elements.ElementName.methode(); oder
dd.elements["ElementName"].methode()
 
 
dd.elements.length
Länge des DragDrop-Elemente-Arrays
 
 
 
 
Grau geschriebene Eigenschaften/Methoden in der folgenden Tabelle sind nur für kompliziertere Programmieraufgaben gedacht und können andernfalls getrost überlesen werden.
Eigenschaften der einzelnen Drag & Drop Elemente
Datentyp, [r] nur lesen, [rw] lesen und schreiben
Drag & Dropnumber [r]
Höhe.
Eine vollständiges Beispiel, wie eine Eigenschaft verwendet werden kann: alert(dd.elements.rex.h);
namestring [r]
Bildname bzw. Layer-ID, die SET_DHTML() übergeben wurde.
alert(dd.elements.rex.name);
wnumber [r]
Breite des Elements. Verwenden Sie resizeTo() oder resizeBy(), um die Größe zu ändern.   alert(dd.elements['rex'].w);
xnumber [r]
Derzeitige X-Koordinate im Document. Verwenden Sie moveTo( ) zum Zuweisen einer neuen Position.   alert(dd.elements.rex.x);
ynumber [r]
Y-Koordinate.   alert(dd.elements["rex"].y);
bgColorstring [r]
Derzeitige Hintergrundfarbe eines Layers. Verwenden Sie die Methode setBgColor(), um die Farbe zu ändern.
childrenobject array [r]
Dieses Array enthält die drag-drop-fähigen "Kinder" des Elements, normalerweise Bilder (= Kinder), die per HTML in einem Layer (= Elternelement) verschachtelt sind. Die Kinder folgen automatisch ihrem Elternelement, wenn auf dieses die moveTo()-, moveBy()-, hide()-,   show()- oder maximizeZ()- Methode angewandt wird, und wenn es mit der Maus verschoben wird. Alle/einzelne Kind-Elemente können von ihrem Elternelement unabhängig gemacht werden, indem auf dieses das DETACH_CHILDREN- Kommando oder die .detachChild()- Methode angewandt wird.
 
Beispiele für mögliche Notationen:
dd.elements.layerName.children[i] oder
dd.elements.layerName.children["bildName"] oder
dd.elements["layerName"].children.bildName usw..
dd.elements.layerName.children.length liefert die Anzahl der "Kind-Bilder" des Layers.
copiesobject array [r]

Multiplied Drag&Drop Image
Dieses Array enthält die Kopien eines Drag-Drop-Bildes, das mit dem COPY Kommando oder der copy()- Methode vervielfältigt wurde.
 
Mit dd.elements.bildName.copies[i] wird die i-te Kopie von Bild "bildName" angespochen (Zählung fängt wie bei Arrays üblich bei 0 an),
dd.elements.bildName.copies.length liefert die Anzahl der Kopien.
Weil es sich bei den Kopien um vollwertige Drag-Drop-Bilder handelt, erhalten sie vom Script intern eigene Namen, indem an den Namen des Elternbildes eine Zahl angehängt wird, beginnend bei 1 für die erste Kopie. dd.elements.bildName.copies[3] kann also auch mit dd.elements.bildName4 angesprochen werden.
dd.elements.muckl.copies[].resizeTo(,);
Hinweis ;-) : Originalgröße war (100, 130)
defhnumber [r]
Ursprüngliche Höhe.
defsrcstring [r]
Nur für Bilder. Diese Eigenschaft enthält die URL des ursprünglichen Bildes (defsrc steht für "default source"). Nützlich insbesondere nach Anwendung der swapImage()- Methode.
defwnumber [r]
Ursprüngliche Breite.
defxnumber [rw]
Ursprüngliche X-Koordinate. Wird von der Bibliothek intern verwendet, um Bilder und relativ positionierte Layer nach Fenstergrößenänderungen wieder in den logischen Seitenaufbau einzugliedern, wenn sich Zeilenumbrüche geändert haben. Mit dieser Eigenschaft können Sie aber lesen, wo ein Bild oder relativ positionierter Layer im logischen Seitenaufbau "hingehört" - und das betreffende Element beispielsweise dorthin bewegen:
 
var my_elt = dd.elements["ElementName"];
my_elt.moveTo(my_elt.defx, my_elt.defy);

 
Beachten Sie, dass defx und defy eines Kindelements (siehe children) mit dem Elternelement mitwandern, wenn letzteres verschoben wird.
defynumber [rw]
Ursprüngliche Y-Koordinate.
defznumber [rw]
Ursprünglicher Z-Index. Wird von der Bibliothek intern für Elemente verwendet, auf die das RESET_Z-Kommando angewendet wurde. Der Z-Index eines solchen Elements wird nach Abschluss eines Drag-Vorgangs auf diesen Wert zurückgesetzt. Sie können die defz- Werte auch überschreiben und so die Standard-Stapelreihenfolge der Drag&Drop-Elemente ändern.
divobject [r]
Direkte Referenz auf den DOM-Knoten des Elements, also direkt auf den Layer oder das Bild an sich. Vergrößert die Flexibilität der API erheblich. Beispiel: dd.elements.someName.div.ondblclick = myDblClickFunc;
Dieses Beispiel demonstriert, wie man einem DHTML-Drag&Drop-Element einen Doppelklick-Eventhandler zuweisen könnte. Wie anfangs gesagt, sollten aber keine Element-Eigenschaften direkt geändert werden, die von der API von wz_dragdrop.js verwaltet werden, wie z.B. Position, Größe oder Z-Index. Schreiben Sie z.B. niemals dd.elements.someName.div.width = 314px;. Verwenden Sie stattdessen resizeTo().
horizontalboolean [r]
Ist true, wenn das Element nur horizontal mit der Maus verschoben werden kann, sonst false. Diese Richtungsbeschränkung kann entweder mit dem HORIZONTAL-Kommando oder mit der setHorizontal()-Methode ein- bzw. ausgeschaltet werden.
(Siehe auch vertical-Eigenschaft.)
indexnumber [r]
Index des Elements im dd.elements -Array. Nützlich zum Beispiel, um die Drag&Drop-Elemente direkt per Index auf ein Array von Formularelementen abzubilden:
 
document.myForm.elements[dd.obj.index].value = dd.obj.x;
 
dd.obj ist eine Referenz auf das momentan aktive Element, siehe weiter unten.
is_imageboolean [r]
true bei Bildern, false bei Layern. Beispiel:
 
if (dd.elements[3].is_image)
{
    dd.elements[3].swapImage('images/anotherImg.jpg');
}
maxoffl,
maxofft,
maxoffr,
maxoffb
number [rw]
Diese Eigenschaften limitieren den Bewegungsbereich des Elements, d.h. sie bestimmen, wie weit das Element von seiner Ausgangsposition maximal nach links/oben/rechts/unten mit der Maus entfernt (gedragt) werden kann. Sie reflektieren also ggf. die Werte der MAXOFFLEFT/MAXOFFTOP/MAXOFFRIGHT/MAXOFFBOTTOM-Kommandos, sind auch schreibbar (rw) und können somit zur Laufzeit direkt gesetzt und geändert werden. Ein Werte von -1 bedeutet unbegrenzten Bewegungsbereich.
maxw, maxh,
minw, minh
number [rw]
Maximale bzw. minimale Breite und Höhe, auf die das Element mit der Maus gezogen werden kann. Also nur relevant für Elemente, auf die das RESIZABLE-Kommando angewendet wurde. Diese Eigenschaften reflektieren ggf. die Werte der MAXWIDTH/MAXHEIGHT/MINWIDTH/MINHEIGHT-Kommandos, sind auch schreibbar (rw) und können somit zur Laufzeit direkt gesetzt und geändert werden. Ein Wert von -1 bedeutet unlimitierte Größe.
originalobject [r]
Die Eigenschaft existiert nur für Bilder, bei denen es sich um Kopien handelt. original ist die Referenz auf das Originalbild aus Sicht der Kopie. Beispiel:
 
if (dd.obj.original)
{
    dd.obj.original.swapImage('images/anotherImg.jpg');
}

Diese Zeilen untersuchen zunächst, ob es sich beim momentan dedragten Element (dd.obj) um eine Kopie handelt, indem nach der Existenz der Eigenschaft original gefragt wird. Falls ja, wird das Originalbild ausgetauscht.
parentobject [r]
parent ist quasi die Umkehrung von children. Die Eigenschaft existiert nur für Kinder, die zu einem Elternelement gehöhren (z.B. für Bilder innerhalb eines Layers), und enthält die Referenz auf das Elternelement. Mit if(dd.elements.BildName.parent)...; oder if(dd.obj.parent)...; könnten Sie beispielsweise prüfen, ob ein bestimmtes Bild (oder mit dem zweiten Ausdruck: das momentan gedragte Element) Kind eines Layers ist.
srcstring [r]
Nur für Bilder. Aktuelle URL (aktueller Pfad). Verwenden Sie die swapImage()- Methode zum Auswechseln des Bildes.
textstring [r]
Nur Layer. Momentanes inneres HTML, das mittels der write() -Methode in den Layer geschrieben wurde.
verticalboolean [r]
Ist true, wenn das Element nur vertikal mit der Maus verschoben werden kann. Diese Richtungsbeschränkung kann entweder mit dem VERTICAL-Kommando oder mit der setVertical()-Methode ein- bzw. ausgeschaltet werden.
(Siehe auch horizontal.)
visibleboolean [r]
Zeigt an, ob das Element momentan sichtbar ist (Wert true) oder mittels der hide()- Methode unsichtbar gemacht wurde (Wert false). Verwenden Sie am besten ausschließlich die .hide()- und .show()- Methoden, um die Sichtbarkeit von DHTML&Drag'nDrop-Elementen zu steuern.
znumber [r]
Gegenwärtiger Z-index ("Z-Koordinate"). Überlappen sich zwei Elemente, kann das mit dem höheren z-index das andere verdecken. Die Werte werden von der Drag-Drop-Bibliothek automatisch gesteuert. Verwenden Sie die Methode setZ(), falls Sie den z-index des Drag-Drop-Elements trotzdem ändern wollen. Oder die Methode maximizeZ(), falls Sie ihn aus irgend einem Grund auf die momentan höchste Ebene setzen wollen. Wenn Sie in dem Beispiel oben auf dieser Seite auf die Rennradfahrer klicken, werden Sie feststellen, dass der z-index des Lowracers trotzdem höher bleibt. Dafür sorgt innerhalb der alle 40 Millisekunden aufgerufenen Animations-Funktion folgender Ausdruck ("low" ist der Name des Lowracer-Bildes):
 
if(dd.elements.low.z<=dd.elements.upleft.z)
{
    dd.elements.low.maximizeZ();
}
Methoden der Drag & Drop Elemente
copy()
Nur für Bilder. Erzeugt dynamisch eine Kopie und fügt sie dem copies- Array des Bildes hinzu. Wie das Original ist auch die Kopie mit allem DHTML- und Drag&Drop-Schnickschnack ausgestattet. copy() funktioniert sogar im Netscape 4, im Opera allerdings erst ab Version 7. Der optionale Parameter spezifiziert die Zahl der zu erzeugenden Kopien:
dd.elements.cat.copy(2);
hide() Macht Element (Layer oder Bild) unsichtbar: dd.elements.race.hide();. Soll auch der für das Element freigehaltene Platz (Spacer) nicht mehr angezeigt werden, können Sie der Methode einen optionalen Parameter (true) mitgeben: dd.elements.race.hide(true);
Steuern Sie die Sichtbarkeit von Elementen unbedingt mit hide() und show(), nicht mit anderem JavaScript. Beispielsweise sollten Sie hide() unmittelbar nach dem Aufruf von SET_DHTML() auf alle Elemente anwenden, die anfangs auf Ihrer Seite unsichtbar sein sollen, auch dann, wenn Sie schon das CSS-Attribut 'visibility' auf 'hidden' gesetzt haben!
dd.elements.race.show();       alert(dd.elements.race.visible);
moveBy(deltaX,deltaY) Verschiebt Element um deltaX und deltaY. Oftmals bequemer zu handhaben als moveTo().
dd.elements.einstein.moveBy(+20, -7);
moveTo(newX,newY)
Verschiebt Element zu den als Parameter mitgegebenen Koordinaten.
 
var einstein = dd.elements.einstein;
einstein.moveTo(einstein.x-20, einstein.y+7);
resizeBy(deltaW,deltaH) Ändert die Größe eines Bildes oder Layers um die angegebene Differenz (Ganzzahlen).
dd.elements.einstein.resizeBy(22, -5);
resizeTo(width,height) Ändert die Größe eines Drag-Drop-Bildes oder -Layers auf die angegebenen Pixelwerte (Ganzzahlen). Eine Warnung, die allerdings nur Layer, nicht Bilder betrifft: Ältere Browser (Netscape 4, Opera <7) können bei Größenänderungen eines Layers den Textfluss nicht neu aufbauen. Es kann passieren, dass der Text bei Platzmangel über den Rand des Layers fließt oder abgeschnitten wird.
dd.elements.einstein.resizeTo(,);
show() Macht Element wieder sichtbar.
dd.elements.race.show();
swapImage("new_path") Nur für Bilder. Tauscht Bild gegen neues aus. new_path ist der Pfad des neuen Bildes und muss in Anführungszeichen oder Hochkommata stehen.
dd.elements.fateba_se.swapImage('ko5.jpg');
dd.elements.fateba_se.swapImage(dd.elements.fateba_se.defsrc);
Um auch die Kopien eines Bildes mitauszuwechseln, das mit dem COPY-Kommando oder der copy()- Methode vervielfältigt wurde, können Sie der Methode einen optionalen zweiten Parameter mit dem Wert true mitgeben.
addChild(Bild o. Layer)

 
Das als Parameter übergebene Element (Bild oder Layer) wird dem children- Array des Elements hinzugefügt. Nach Anwendung der Methode wird das übergebene, neue Kind-Element so behandelt, als wäre es Bestandteil des Elternelements; es folgt also dessen Bewegungen und Sichtbarkeitsstatus. addChild() kann sogar anderen Elternelementen ihre Kinder "stehlen" und sie automatisch aus dem children- Array der betroffenen Elternelemente entfernen.
 
Tipp: mit addChild() können Sie separate Layer auch nachträglich so voneinander abhängig machen, als wären sie ineinander verschachtelt. Das funktioniert oft sogar besser (cross-browser-tauglicher und besser steuerbar), als wenn die Layer schon im HTML-Quelltext als verschachtelt angelegt wären. Und, siehe Beispiel links, es ist ebenso mit Bildern möglich, d.h. Sie können einem Bild andere Bilder als Kinder zuweisen (der Button wurde dem Bild unmittelbar nach Aufruf von SET_DHTML(), also noch während des Ladens der Seite, per addChild() als Kind zugewiesen). So können Sie mit relativ wenig Aufwand beispielsweise Fensterimitationen zusammenbasteln.
 
Als Parameter akzeptiert addChild() entweder den Namen des zu adoptierenden Kindes in Anführungszeichen/Hochkommata, oder eine Referenz auf das Kind wie im folgenden Beispiel:
dd.elements.fateba_se.addChild(dd.elements.ko5_st);
attachChild(Kind-Element) Nur für Elemente, die drag-drop-fähige Kind-Elemente enthalten (z.B. Layer mit Bildern). Macht das als Parameter übergebene "Kind-Element" wieder vom Elternelement abhängig, auch wenn auf dieses das DETACH_CHILDREN-Kommando angewandt wurde. Nach Anwendung der Methode folgt das Kind also wieder automatisch den Bewegungen und dem Sichtbarkeitsstatus des Elternelements. Im Gegensatz zu addChild() kann attachChild() aber keine Elemente anderswo stehlen und dem children- Array des Elternelements hinzufügen.
Parameter: entweder der Name des Kindelements in Anführungzeichen oder Hochkommata, oder der Index im children- Array des Elternelements, oder eine Referenz auf das Kindelement wie in folgendem Beispiel:
dd.elements.fateba_se.attachChild(dd.elements.ko5_st);
detachChild(Kind-Element) dd.elements.fateba_se.detachChild('ko5_st');
Nur für Elemente, die drag-drop-fähige "Kind-Elemente" enthalten. Diese Methode macht das Element, das der Methode als Parameter übergeben wird, vom Elternelement unabhängig, bewirkt also nachträglich für ein einzelnes Bild das gleiche wie das DETACH_CHILDREN- Kommando beim Aufruf von SET_DHTML() für alle Bilder eines Layers.
Parameter: das Bild, das unabhängig gemacht werden soll, wie bei .attachChild().
del() Entfernt das Element, das heißt, schaltet seine DHTML- und Drag&Drop-Fähigkeiten ab und entfernt das Element aus dem dd.elements -Array. Achtung: das HTML-Element per se wird aber nicht aus dem DOM-Baum des Browsers entfernt. Beispiel:
dd.elements.someName.del();
getEltBelow() Die Treffer-Testfunktion der API.
Gibt das unter dem betreffenden Element liegende Element zurück, bei mehreren Elementen das mit dem höchsten z-Index, ansonsten null. Mit dieser Methode lässt sich z.B. in my_DropFunc() direkt bestimmen, auf welchem Element das gedragte Element (auch per dd.obj ansprechbar) abgelegt wurde:

var dropTarget = dd.obj.getEltBelow();
if(dropTarget != null) alert(dropTarget.name);


Die Überlappung muss in beiden Dimensionen mindestens 50% betragen.
maximizeZ() Setzt den Z-index des Elements auf die höchste Ebene, d.h. bei Überlappung schwebt das Element über allen anderen und kann sie verdecken. Anmerkung: Wird automatisch für das jeweils aktive Drag&Drop-Element ausgeführt. Die Verwendung dieser Methode ist deshalb nur in Spezialfällen sinnvoll bzw. nötig.
setBgColor("Farbe") Ändert die Hintergrundfarbe eines Layers oder eines Drag'nDrop Bildes mit transparentem Hintergrund (GIF, PNG) auf den übergebenen Wert.
dd.elements.bluelyr.setBgColor("");
setCursor("CSS-Wert") Änder Cursor über dem Drag&Drop-Element. Akzeptiert als Parameter entweder einen CSS-Cursor-Wert als String, z.B. dd.elements.someImg.setCursor('crosshair');, oder alternativ eines der Cursor-Kommandos des API, z.B. dd.elements.someImg.setCursor(CURSOR_CROSSHAIR);
setDraggable(true/false) Kann mit dem Parameter false die Drag&Drop-Fähigkeit des Elements deaktivieren und mit dem Parameter true wiederherstellen. Aber auch bei ausgeschalteter Drag&Drop-Fähigkeit wird das Element nicht aus dem dd.elements- Array entfernt und behält somit alle übrigen DHTML-Fähigkeiten bei, einschließlich der moveTo()- und der moveBy()- Methode.
dd.elements.dog.setDraggable(false);
dd.elements.dog.setDraggable(true);
setHorizontal(true/false)
Nach Aufruf mit dem Parameter true kann das Element nur noch horizontal mit der Maus verschoben werden. Der Parameter false hebt diese Einschränkung wieder auf. Siehe auch HORIZONTAL-Kommando, das den gleichen Effekt hat, aber nur beim Aufruf von SET_DHTML() angewendet werden kann. Der momentane Status kann mit der horizontal-Eigenschaft abgefragt werden. Nochmal der Hund Teddy (oder: Wie kann ich einen Schieberegler um 90 Grad drehen?):
dd.elements.dog.setHorizontal(true);
dd.elements.dog.setHorizontal(false);
dd.elements.dog.setVertical(true);
dd.elements.dog.setVertical(false);
setOpacity(Zahl) Setzt die Opazität, also den Grad der Undurchsichtigkeit des Elements (Bild oder DIV-Element). Parameter muss eine Dezimalpunktzahl zwischen 0.0 (vollkommen durchsichtig, unsichtbar) und 1.0 (undurchsichtig, Normalzustand) sein.
dd.elements.dog.setOpacity( );
setResizable(true/false) Kann für das Element die RESIZABLE-Funktionalität herstellen bzw. deaktivieren. Bei aktivierter RESIZABLE-Funktionalität kann die Größe des Elements bei gedrückter Umschalttaste mit der Maus verändert werden.
dd.elements.dog.setResizable(false);
dd.elements.dog.setResizable(true);
setScalable(true/false) Kann die SCALABLE-Funktionalität ein- und ausschalten. SCALABLE ähnelt RESIZABLE, erzwingt aber die Beibehaltung des Breite/Höhe-Verhältnisses bei mausgesteuerten Größenänderungen, d.h. das Element kann skaliert, aber nicht beliebig gedehnt werden.
dd.elements.dog.setScalable(false);
dd.elements.dog.setScalable(true);
setVertical(true/false) Nach dem Aufruf mit true kann das Element nur noch senkrecht mit der Maus verschoben werden (gleicher Effekt wie mit dem VERTICAL-Kommando). Der Parameter false hebt diese Beschränkung wieder auf. Der momentane Status kann mit der vertical-Eigenschaft abgefragt werden. Siehe auch setHorizontal().
setZ(Ganzzahl) Setzt den Z-Index des Elements auf den Wert, der als Parameter mitgegeben wird (Ganzzahl >= 0). Kann z.B. benutzt werden, um die Stapelordnung zweier sich überlappender Drag-Drop-Elemente zu vertauschen - die Eigenschaft z liefert die momentanen Werte.
write("html")
Schreibt den Inhalt des Layers neu. Das neue HTML wird zugleich der text -Eigenschaft des betroffenen Drag&Drop&DHTML -Elements zugewiesen. Drag-drop-fähige Bilder innerhalb des Layers sind aber davor geschützt, überschrieben zu werden, und werden nicht gelöscht. write() funktioniert sogar im Netscape 4, im Opera allerdings erst ab Version 7.
dd.elements.bluelyr.write(" ");
Weitere Schnittstellen zum Script
Das Hauptobjekt dd (Eselsbrücke: "drag-drop") der JavaScript-Bibliothek stellt folgende Eigenschaften und Methoden zur Verfügung:
dd.elements Array aller Drag-Drop-Elemente. Die einzelnen Elemente sind per
dd.elements.ElementName
oder
dd.elements["ElementName"]
oder
dd.elements[i] (Index)
ansprechbar.
dd.elements.length liefert die Anzahl der Drag-Drop-Elemente, einschließlich ggf. erzeugter Kopien von Bildern.
dd.obj Enthält das aktuelle Drag-Objekt, das gerade Ziel der gedrückten linken Maustaste ist; andernfalls nichts bzw. null. Um zu prüfen, ob gerade "bild2" aktives Drag&Drop-Objekt ist, könnten Sie schreiben:
if (dd.obj == dd.elements.bild2) {Anweisungen;}
oder alternativ
if (dd.obj.name == "bild2") {Anweisungen;}
 
Nach dem Schema dd.obj.eigenschaft bzw. dd.obj.methode() können Sie auf alle Eigenschaften und Methoden des aktuellen Drag-Elements zugreifen.
dd.getScrollX() Liefert als return-Wert, wie weit das Fenster waagrecht gescrollt wurde.
alert(dd.getScrollX());
dd.getScrollY() Liefert als return-Wert, wie weit das Fenster senkrecht gescrollt wurde.
alert(dd.getScrollY());
dd.getWndH() Liefert als return-Wert die innere Fensterhöhe (den sichtbaren Bereich des Dokuments).
alert(dd.getWndH());
dd.getWndW() Liefert als return-Wert die innere Fensterbreite (den sichtbaren Bereich des Dokuments).
alert(dd.getWndW());
dd.Int() Wandelt Argument in eine (ggf. auch negative) Integer-Zahl um, und zwar immer. Wäre die Umwandlung eigentlich nicht möglich, z.B. für dd.Int("abc"), wird trotzdem die Zahl 0 zurückgegeben. Funktioniert zuverlässiger als parseInt() und schließt Datentypenfehler aus.
dd.db = document.body, erkennt aber auch den Non-BackCompat-Modus des IE6 und steht dann für document.documentElement.
dd.ie true, wenn Internet Explorer 4+
dd.n navigator.userAgent in Kleinbuchstaben. alert(dd.n);
dd.n4 true, wenn es sich um einen Netscape 4 (nicht Netscape > 4) handelt.
dd.n6 true, wenn Browser mit Gecko-Engine (Mozilla, Netscape 6+, Galeon, Phoenix...); evenfalls true bei Browsern mit weit fortgeschrittener Unterstützung des W3C-DOM.
dd.op true, wenn der Browser ein Opera 5+ ist, sonst false.
Layer nachträglich drag-drop-fähig machen
ADD_DHTML()
Mit dieser Funktion können Layer (DIVs - nicht Bilder) jederzeit nachträglich in DHTML- und Drag&Drop-Elemente verwandelt werden, also auch nach Abschluss des Ladevorgangs. Nützlich insbesondere für dynamisch erzeugte Layer. Um das JavaScript zu initialisieren, muss aber in jedem Fall beim Laden der Seite SET_DHTML() aufgerufen werden, gegebenenfalls auch ohne Parameter.
 
Wie SET_DHTML() benötigt ADD_DHTML() die IDs der betreffenden Layer als (komma-separierte) Parameter. Auch hier können individuell wirksame Kommandos an jede ID mit Pluszeichen angehängt und aneinandergekettet werden. Selbstverständlich wird jeder dieser Layer dem dd.elements- Array hinzugefügt und stellt die gleichen Eigenschaften und Methoden zur Verfügung wie die per SET_DHTML() initialisierten Layer.
 
Beispiel:
 
ADD_DHTML("NewLayer1"+VERTICAL+MAXOFFTOP+100+MAXOFFBOTTOM+100);
ADD_DHTML("NewLayer2"+HORIZONTAL);
 
dd.elements.NewLayer1.setBgColor("#99dd99");
dd.elements.NewLayer2.moveBy(16,8);
 
 
Eigene Erweiterungen
 
1.) In wz_dragdrop.js stehen von Haus aus vier leere JavaScript-Funktionsrümpfe für Erweiterungen zur Verfügung. Diese Funktionsrümpfe können Sie für eigenen Code verwenden. Dort finden Sie auch die wichtigsten Hinweise (englisch), natürlich in Kommentarform (auskommentiert). Beispielsweise, dass Sie dort nach dem Schema dd.obj.eigenschaft und dd.obj.methode() auf alle oben aufgeführten Eigenschaften und Methoden des momentan aktiven Drag-Drop-Elements zugreifen können. Mit dd.obj.name erhalten Sie also den Namen, der SET_DHTML() übergeben wurde, mit dd.obj.x und dd.obj.y die Koordinaten des gerade aktiven Drag-Drop-Elements; mit dd.obj.swapImage('anotherImg.jpg'); könnten Sie beispielsweise das Bild wechseln lassen, wenn das Element einen bestimmten Bereich erreicht/verlässt, usw...
 
my_PickFunc() wird automatisch aufgerufen, sobald ein Drag-Drop-Element von einem mousedown-Event getroffen wurde, also unmittelbar bei Beginn eines Drag-Vorgangs.
 
my_DragFunc() wird permanent während eines Drag-Vorgangs aufgerufen. Hier könnten Sie beispielsweise die Position des gedragten Objektes mit anderen DHTML-Elementen vergleichen.
 
my_ResizeFunc() wird permanent aufgerufen, während die Elementgröße mit der Maus verändert wird. Also wenn auf das Element das RESIZABLE-Kommando angewendet wurde und <Shift> bei Beginn des Drag-Vorgangs gedrückt war.
 
my_DropFunc() kann beispielsweise benutzt werden, um zu ermitteln, welches Element (z.B. via dd.obj.name) soeben an welchem Ort (dd.obj.xdd.obj.y) abgelegt wurde. Oder Sie könnten das abgelegte Element per dd.obj.moveTo(someX, someY) an einer bestimmten Position einrasten lassen, eine oft gefragte Funktionalität. my_DropFunc() ist auch die beste Gelegenheit, um Eigenschaften wie Position, Größe und Name eines Elements in <input type="hidden">-Formularelemente zu schreiben zwecks späterer Übertragung zum Server. dd.obj existiert noch während der gesamten Laufzeit von my_DropFunc() und ggf. weiteren von dort aus aufgerufenen Funktionen, die Sie selbst definiert haben, und wird erst unmittelbar danach auf null gesetzt.
 
 
 
2.) Als Alternative hält wz_dragdrop.js "Setter"-Methoden bereit, um den Drag&Drop-Elementen jeweils individuelle selbstdefinierte Eventhandler-Funktionen zuzuweisen:
 
Mit setPickFunc(FunctionName) können Sie definieren, welche Funktion automatisch bei Beginn eines Drag-Vorgangs des betreffenden Elements aufgerufen werden soll, setDragFunc(FunctionName) legt die Funktion fest, die permanent während eines Drag-Vorgangs aufgerufen werden soll, setResizeFunc(FunctionName) diejenige, die aufgerufen werden soll, während die Größe des Elements mit der Maus verändert wird, mit setDropFunc(FunctionName) definieren Sie, welche Funktion beim Droppen (Ablegen) des Elements aufgerufen werden soll.
 
Beispiel:
Eine Programmzeile
dd.elements.someName.setDropFunc(mySomeNameDropFunc);
würde der Bibliothek mitteilen, dass stets, wenn das Element "someName" abgelegt wird, automatisch mySomeNameDropFunc() aufgerufen werden soll.
 
 
 
3.) Die Bibliothek ist objektorientiert. Sie können den einzelnen dd.elements ganz einfach und jederzeit eigene Eigenschaften und Methoden hinzufügen. Am besten mit dem Prefix my..., um Konflikte mit bereits vordefinierten Eigenschaften/Methoden zu vermeiden:
dd.elements[i].myProperty = ...;
 
Eine noch einfachere Möglichkeit, den Drag&Drop-Elementen neue selbstdefinierte Eigenschaften dynamisch hinzuzufügen, ist Prototyping mit dem JavaScript-Schlüsselwort prototype:
Jedes Drag&Drop-Element in wz_dragdrop.js ist ein Objekt der Klasse DDObj. Die Programmzeile
DDObj.prototype.myNewProperty = someValue;
irgendwo in Ihrem eigenen Code (nach der Einbindung von wz_dragdrop.js) würde sofort allen Drag&Drop-Elementen die Eigenschaft myNewProperty hinzufügen, und die Eigenschaften mit dem Wert someValue initialisieren.
 
 
Top of page

Walter Zorn, München
Impressum und über diese Seite