Events durch li durchlassen

Noeden

Erfahrenes Mitglied
Hallo,
ich komme immernoch nicht weiter bei meinem Drag&Drop, es ist mir auch peinlich schon wieder zu fragen, aber ich finde die Lösung einfach nicht.

Ich habe ein LI unter meine Maus gehängt. Jetzt will ich in einem anderen Element per mouseenter und mouseleave einen Klon erscheinen lassen und wieder entfernen (Solange ich dragge).

Mein Problem ist aber, dass das mouseenter/mouseleave-Event gar nicht bei dem Div ankommt, da das LI die ganze zeit unter der Maus ist. Wenn ich die Maus schnell genug bewege und das LI hinterherflitzt erscheint auch für die Zeit, wo das LI nicht unter der Maus ist, der Klon im Div.

Dann habe ich versucht an mouseover, mouseenter und mouseleave von dem LI return false zu binden, was logischerweise nichts verändert hat. Doofe Idee :D

Ein Tipp wäre sehr nett
 
Dir erste Idee die mir einfällt wäre die ziemlich unbekannte Funktion "document.elementFromPoint(x, y)".
Bei jedem mousemove versteckst du das gedraggte Elemente (display:none) rufst anschließend document.elementFromPoint an der Stelle der Maus auf und zeigst das Element sofort wieder an. Jetzt hast du das Element zur Verfügung, welches aktuelle unter der Maus ist.

Javascript:
function onDrag(e) {
	elem.css({
		position: 'absolute',
		left: e.pageX - xOff,
		top: e.pageY - yOff
	});
	
        //Ab hier ist neu!
	elem.hide();
	var hovered = $(document.elementFromPoint(e.pageX, e.pageY));
	elem.show();
	
	li.removeClass('over');//"li" enthält alle li-Elemente $('li');
	
	if(hovered.is('li')) {
		hovered.addClass('over');
	}
}
 
Danke CPoly :)

Hätte nicht gedacht, dass das so performant funktioniert :) Super! Naja sagen wir funktionierte :-D. Im Moment habe ich, ohne dass ich meiner Meinung nach etwas geändert hätte, das Problem, dass das Div in dem die UL mit den LIs lieg, die ganze Zeit ausgewählt wird, anstatt der LIs. Komisch ... naja, mir raucht auch der Kopf :D

Wahnsinn

Auf jeden Fall herzlichen danke

PS: Im Firefox und gescrollt :D au weiha
 
Zuletzt bearbeitet:
Zurück