2009-04-08 5 views
11

In JQuery UI ich ein Element als ziehbar konfigurierenjQuery UI, rufen Sie starten Drag manuell

$("#drag").draggable(); 

durch den Aufruf Aber gibt es eine Möglichkeit, die Drag-Funktionen aus einer anderen Funktion manuell zu starten und zu stoppen? Ie

someOtherFunction = function() { 
    $("#drag").startdrag(); 
} 
yetAnotherFunction = function() { 
    $("#drag").stopdrag(); 
} 
+0

vielleicht sind Sie in scrollTo interessiert, weil ich ziehbar nicht glauben kann, ein Objekt ohne Maus Interaktion bewegen? – TStamper

+0

Ich habe nie gesagt, dass ich die Maus nicht benutzen möchte. Ich muss den Drag-Befehl außerhalb des div aufrufen, da er mit FScommand aus einer Flash-Datei heraus initiiert werden soll. – Jan

Antwort

12

Antworten oben scheinen zu kompliziert.

$('.nonDraggableObjectWhichTriggersDrag').mousedown(function(e) { 
    $('.draggableObject').trigger(e); 
}); 
+0

Ich bin nicht ganz sicher, ob dies in meinem ursprünglichen Projekt funktioniert hätte (da es Flash und 'fsCommand' beinhaltete), aber es ist am ehesten zu einer funktionierenden Lösung, die gepostet wurde. Im Projekt habe ich den Draghandler oberhalb der Flash-Datei platziert und divs über die Flash-Buttons gelegt, um die Flash-Befehle über 'fsCommand' aufzurufen. Nicht schön, aber es hat funktioniert. – Jan

+1

Funktioniert nicht für mich. – wh1t3cat1k

+1

+1 - Ich weiß, dass dieser Kommentar ein bisschen spät ist, aber 'triggerHandler (e)' sollte wahrscheinlich stattdessen verwendet werden. Als ich 'trigger' verwendet habe, hatte ich einen Stack-Overflow, weil ich andere Funktionen/DOM angeschlossen hatte. Durch Ändern in 'triggerHandler' wurde dieses Problem behoben, da keine Blasenbildung aufgetreten ist. 'TriggerHandler' wird auch effizienter sein. –

1

Der Start des Ziehens wird über ein Skript gestartet, das nach Mausereignissen sucht. Maus nach unten, gefolgt von einer Mausbewegung. Wenn Sie diese Mausbewegungen über Javascript simulieren können (ich weiß nicht wo, wie oder auch wenn das möglich ist), sollte es den Beginn eines Ziehens auslösen.

Hinweis: Gerade gefunden, dass YUI eine Möglichkeit hat, Mausbewegungen und Mausklicks zu simulieren. Auschecken http://developer.yahoo.com/yui/yuitest/#useractions

+0

Das klingt zu komplex. Vielleicht wäre das einfacher mit anderen Bibliotheken zu erreichen? Vielleicht prototype.js oder etwas ähnliches? – Jan

+0

Go for it. Wenn der Prototyp Mausbewegungsereignisse simulieren kann, wird es genauso "schwierig" wie bei yui sein. – DMCS

1

das Ziehen Sie müssen nur false zurück in den Ziehen Rückruf, um so etwas zu stoppen:

$("#unlock-handle").draggable({axis:'x', containment:'parent', drag:onDrag}); 

... 

var onDrag = function(e) {  
    if ($(this).position().left > 200) return false; 
}; 

Hope it :-)

1

hilft ich einen Weg finden Trigger didnt Ziehen Sie manuell, aber ich habe einen Workaround für meine ähnliche Situation gefunden.

Ich hatte diese Situation mit zwei überlappenden Bildern (siehe Bild unten), beide teilweise transparent. Im Drag-Start (Event) wollte ich überprüfen, ob es auf transparente Pixel trifft. Wenn dem so war, habe ich nach einem anderen Element gesucht, um zu sehen, ob dieses getroffen wurde. Und wenn es so war, wollte ich es schleifen lassen.

enter image description here

Lösung? Ich ordne Bilder auf Mausbewegungen neu, und ziehbare Bilder werden dann für das oberste Bild ausgelöst.

Für pixelgenaue Elementauswahl, siehe meine andere Antwort in: registering clicks on an element that is under another element