2009-08-18 17 views
5

Ich habe eine jQuery UI draggable und mehrere separat definierte droppables. Da eine der Drop-Variablen tolerance: 'intersect' konfiguriert ist, ist es möglich, dass eine ziehbare Datei gleichzeitig auf mehrere Arten von drop-fähigen Dokumenten abgelegt werden kann.Wie verhindere ich, dass mehrere jQuery-UI-Droppables ausgelöst werden?

Was ist der beste Weg zu verhindern, dass die unbeabsichtigten Droppables abfeuern? Grundsätzlich möchte ich die Droppables priorisieren, damit die Droppables mit tolerance: 'intersect' nicht ausgelöst werden, wenn ein anderes Droppable ausgelöst wurde.

aktualisieren - Mehr Infos Dinge zu klären:

  • Alle der droppables konfiguriert sind tolerance: 'pointer' mit Ausnahme einer Klasse von abwerfbaren mit tolerance: 'intersect'.

  • Der Grund, warum eine Klasse von droppable tolerance: 'intersect' hat ist, dass die Droppables wirklich eng sind, und Benutzer haben Probleme, sie mit tolerance: 'pointer' zu finden.

  • Das Verschieben der Droppables ist nicht möglich.

  • Keine der droppables überlappen, aber die ziehbar ist groß genug, um einen abwerfbaren mit tolerance: 'intersect' zu überlappen, während sich der Mauszeiger über einem anderen abwerfbaren mit tolerance: 'pointer' ist. Es können höchstens zwei Droppables auf einmal ausgelöst werden.

  • Die Benutzeroberfläche ist so angelegt, dass die Absichten des Benutzers ermittelt werden können, indem die tolerance: 'intersect' Dropliste ignoriert wird, wenn eine andere Droppable ausgelöst wurde; d.h., wenn der Benutzer den Mauszeiger über eine abgelegte Datei mit tolerance: 'pointer' bewegt hat, kann man davon ausgehen, dass er/sie beabsichtigte, sie dort abzusetzen. Problem ist, ich kann nicht herausfinden, wie man das unerwünschte droppable ignoriert.

+0

können Sie mir einfach die beste Lösung für diese Art von Problemen sagen, weil ich das gleiche Problem habe ,, Wenn Sie sich erinnern :) –

Antwort

0

Bewegen Sie sie physisch weit voneinander entfernt, so dass sie nicht gleichzeitig fallen gelassen werden können. Wie soll man sonst bestimmen, was der Nutzer beabsichtigt hat? Berechnen Sie die Prozentsätze der Ziehbarkeit für jede sich kreuzende Ziellinie?

+0

Hallo Jason, danke für deine Antwort. Bitte sehen Sie das erste Update in meiner ursprünglichen Frage nach Antworten auf Ihre Fragen. – bryan

+0

Können Sie einen Screenshot von dem erstellen, was Sie erreichen möchten? – Jason

1

Vielleicht könnte man im Over-Event des "weniger bevorzugten" DropPables überprüfen, ob das ziehbare Objekt auch über dem "bevorzugten" DropPage liegt und ob es das weniger bevorzugte DropPable deaktiviert.

Sorry für die Terminologie, nur versuchen, Brainstorming.

7

In over:, um eine Klasse zu dem beabsichtigten abwerfbaren zuweisen und die Klasse von allen anderen droppables entfernen:

$(".dragArea").not($(this)).removeClass("dragHover"); 
$(this).addClass("dragHover"); 

Dann in drop:, überprüfen, ob die Klasse festgelegt ist:

if(!$(this).is('.dragHover')){ 
    return false; 
} 

Auf diese Weise Es wird nur ein Droppable ausgelöst.

+0

Ich kann bestätigen, dass dies funktioniert (jquery-ui 1.9.1 & jqery 1.8.2) Danke – Neograph734

Verwandte Themen