drag and drop verschiebt im IE 6-8 nicht richtig

mrrogers

Grünschnabel
Hallo,
ich arbeite gerade an einem drag&drop-skript und es gibt Probleme mit dem Internet Explorer. Mit dem Skript kann ich Listenelemente (<li>) untereinander verschieben. Dazu wird beim aufruf von OnMouseDown ihre Position zu "absolute" geändert und dann mittels den style-Angaben "Left" und "Top" mit dem Mauszeiger verschoben (soweit, so standard). Nur der Internet Explorer macht die Sache nicht wie erwartet (Firefox, Opera läuft exzellent). Bei ihm sind die Boxen immer viel weiter oben als der Mauszeiger (schon beim Klick) und beim scrollen bleiben die kästen nicht am Mauszeiger haften (wie etwa in FF oder Opera).
Ist das ein typisches IE-Problem für das es eine Art 0815-Lösung gibt? Ich habe hier mal den relevanten Code-auszug:
Code:
	if(e.clientX){
		x = e.clientX;
		y = e.clientY;
	}
	if(e.offsetLeft){
		x = e.offsetLeft;
		y = e.offsetTop;
	}
	if(e.pageX){
		x = e.pageX;
		y = e.pageY;
	}
	dragobj.style.position = 'absolute';
	dragobj.style.left = (x)+'px';
	dragobj.style.top = (y)+'px';
muss ich vielleicht nur eine andere Funktion einsetzen?
Vielen Dank für eure Hilfe!
Vincent

edit: Bin nocheinmal weitergekommen! Das Problem tritt tatsächlich nur dann auf, wenn ich mit dem Drag weiter unten auf der Seite anfange (d.h. ich habe bereits auf der Seite gescrollt). Meine Vermutung ist jetzt: Der Internet-Explorer misst den Abstand zum oberen Bildschirmrand und nicht zum Anfang der Seite - wie kann man das umgehen?
 
Zuletzt bearbeitet:
edit: Bin nocheinmal weitergekommen! Das Problem tritt tatsächlich nur dann auf, wenn ich mit dem Drag weiter unten auf der Seite anfange (d.h. ich habe bereits auf der Seite gescrollt). Meine Vermutung ist jetzt: Der Internet-Explorer misst den Abstand zum oberen Bildschirmrand und nicht zum Anfang der Seite - wie kann man das umgehen?
Wie lauten denn die CSS-Formatierungen der Seite im einzelnen?

Hast du einen Link zu der Seite, damit man dort einen Blick drauf werfen kann?

mfg Maik
 
also die Seite war nicht online aber inzwischen habe ich die Lösung gefunden, sie war gar ncihtmal so schwer. Beim InternetExplorer muss der "ScrollWert" zusätzlich addiert werden. Da gibt's auch Versionsunterschiede, deshalb verwendet man am besten:
Code:
		x = document.body.scrollLeft + document.documentElement.scrollLeft + e.clientX;
		y = document.body.scrollTop + document.documentElement.scrollTop + e.clientY;
(für den IE)
trotzdem vielen Dank für deine Hilfe :)
 
Hi,

der IE verwendet für den Quirks- und Standardmode unterschiedliche Objekt für das body-Element. Hier musst du das richtige verwenden.

Beispiel:
Code:
var objBody = null;
// Passendes Body-Objekt ermitteln
if(document.all && !window.opera)
  objBody =(window.document.compatMode == "CSS1Compat")? window.document.documentElement : window.document.body || null;
else
  objBody = document.documentElement;

Genauere Infos findest du zum Beispiel hier.

Ciao
Quaese
 

Neue Beiträge

Zurück