Div: drag and drop (mit anschließendem Ereignis)

deb_ugger

Erfahrenes Mitglied
Hi!

Ich versuche gerade eine Lösung für einen Drag and Drop Mechanismus zu finden. Ich hab da mehrere Einträge, die alle in einem DIV drinnen sind. Jetzt möchte ich diese Einträge angreifen können und in einen bestimmten Bereich ziehen. Der ist beispielsweise auch wieder ein DIV. Dort soll dann auch ein Ereignis ausgelöst werden (z.B. es ändert sich die Hintergrundfarbe).

Das Problem: Anscheinend funktioniert das mit DIVs nicht ganz so gut. Ich hab hier mal einen Code auf Selfhtml gefunden und diesen modifiziert. Wenn ich das türkise Feld über das graue ziehe, sollte dieses Ereignis ausgelöst werden. Das funktioniert aber leider nicht. Kann mir da wer weiterhelfen?

Danke!
mfg
debugger

PS: Hier der Code:
Code:
<html>
<head>
<title>Drag-and-Drop</title>
<script type="text/javascript">
<!-- gueltig fuer Netscape ab Version 6, Mozilla, Internet Explorer ab Version 4

//Das Objekt, das gerade bewegt wird.
var dragobjekt = null;

// Position, an der das Objekt angeklickt wurde.
var dragx = 0;
var dragy = 0;

// Mausposition
var posx = 0;
var posy = 0;

function draginit() {
	// Initialisierung der Überwachung der Events
	document.onmousemove = drag;
	document.onmouseup = dragstop;
	
	// Urspruengliche Position der Layer
	var oldlayerposleft = document.getElementById('einser').style.left;
	var oldlayerpostop = document.getElementById('einser').style.top;
}

function dragstart(element) {
	//Wird aufgerufen, wenn ein Objekt bewegt werden soll.
	dragobjekt = element;
	dragx = posx - dragobjekt.offsetLeft;
	dragy = posy - dragobjekt.offsetTop;
}

function dragstop() {
	//Wird aufgerufen, wenn ein Objekt nicht mehr bewegt werden soll.
	dragobjekt=null;
}

function drag(ereignis) {
	//Wird aufgerufen, wenn die Maus bewegt wird und bewegt bei Bedarf das Objekt.
	posx = document.all ? window.event.clientX : ereignis.pageX;
	posy = document.all ? window.event.clientY : ereignis.pageY;
	if(dragobjekt != null) {
		dragobjekt.style.left = (posx - dragx) + "px";
		dragobjekt.style.top = (posy - dragy) + "px";
		dragobjekt.style.cursor = "move";
	}
}

function test() {
	alert("geht");
}
//-->
</script>
<style>
#einser, #zweier {
	width: 140px;
	height: 140px;
	position: absolute;
}

#einser {
	left: 200px;
	top: 100px;
	background-color: #99CCCC;
	z-index: 2;
}

#zweier {
	left: 0px;
	top: 0px;
	background-color: #efefef;
	border: solid 1px #ccc;
}
</style>
</head>
<body onload="draginit()">
<br />
<br />
<br />
<br /><br /><br /><br /><br /><br />
<div id="einser"  onmousedown="dragstart(this);">zieh mich auf das graue feld</div>
<div id="zweier" ondragover="test();"></div>
</body>
</html>
 
Zuletzt bearbeitet:
Nun ja... diese "ondrag...."-Events(kennt, soweit ich weiss, nur der IE)... die feuern nur, wenn etwas wirklich "gedraggt" wird...
das Verschieben eines Elementes gehört nicht dazu.

Damit etwas überhaupt gedraggt werden kann, muss es "markiert" sein... Bei einem Bild bspw. ist das beim onmusedown der Fall... bei einem <div> nicht.
In einem <div> muss Text selektiert sein, ...den kann man "draggen".

Allerdings wird er dann nicht "sichtbar verschoben".
Das Element, welches die Daten empfangen soll, muss dazu auch imstande sein...was wiederum bei einem <div> nicht der Fall ist.
Daten empfangen können bspw. Formularelemente(textarea, text-input).
 

Neue Beiträge

Zurück