2012-10-19 12 views
5

Ich benutze Raphael JS 2.0 und möchte das Ende eines Ziehens auf ein anderes Element simulieren und dann das aktuelle Element entfernen, das behandelt wird. Wenn es mit jQuery getan werden könnte, wäre das auch gut.Wie simuliert man ein Drag End Event in Raphael JS?

Etwas wie folgt aus:

var child = currentShift.data('endChild'); 
var newX = child.attr('x'); 
if (this !== currentShift) 
{ 
    newX = child.attr('x')-day; 
} 
currentShift.attr({y: child.attr('y'), x: newX, height: child.attr('height')}); 
$(currentShift.node).mouseup(); 
child.remove(); 

bekomme ich Fehler, weil das Kind Element der this in der "move" Teil eines Drag ist. Aber es wird verwendet, um mit currentShift zu interagieren.

Ich weiß, es gibt einige andere Methoden, um einen ähnlichen Effekt zu erzielen, aber ich würde gerne wissen, ob es eine Möglichkeit gibt, das Schleppende für ein beliebiges Element zu imitieren.

+0

Kann sein 'var child = currentShift.data(). EndChild;' .... –

+0

@eicto Ich verstehe nicht wirklich, was Sie vorschlagen. Das Kindelement wird richtig eingestellt. Der Teil, über den ich mich wirklich wundere, ist '$ (currentShift.node) .mouseup();'. Diese Zeile ruft nicht wirklich das End-Drag-Event für dieses Element auf, oder zumindest gibt es mir Fehler, anstatt das currentShift-Element wie gewünscht freizugeben. – keyneom

Antwort

1

Es sieht aus wie Sie einen Verweis auf Ihre drag Ende Funktion (in meinem Fall up) mit call() nur auf dem Durch einen Verweis (in meinem Fall currentShift), um Ihre Raphael JS Element verwenden können. Mein Code sieht nun so aus:

var child = currentShift.data('endChild'); 
var newX = child.attr('x'); 
if (this!==currentShift) 
{ 
    newX = child.attr('x')-day; 
} 
currentShift.attr({y: child.attr('y'), x: newX, height: child.attr('height')}); 
if (this !== currentShift) 
    up.call(child); 
else 
    up.call(currentShift); 
child.remove(); 

noch dies ist nicht genau das, was ich da möchte, wenn der Benutzer die Maus hält hält, versucht er meine Drag-Funktion auch nach dem Element zu nennen gewesen entfernt (dh es bewirkt nicht, dass das Ziehereignis gestoppt wird, sondern ruft nur das Ereignis up auf und gibt dann viele nicht-fatale Fehler, da das Element nicht mehr existiert, wenn versucht wird, die Verschiebungsfunktion aufzurufen.)

Wenn jemand in den nächsten Tagen eine Antwort geben kann, wie man den Ziehvorgang zum Beenden erzwingt (also keine weiteren Aufrufe an die Move-Funktion), werde ich, selbst wenn der Benutzer weiterhin die Maustaste gedrückt hält akzeptiere diese Antwort. Ansonsten werde ich das einfach akzeptieren.