2012-10-19 3 views
5

Sto usando Raphael JS 2.0 e vorrei simulare la fine di un trascinamento su un altro elemento e quindi rimuovere l'elemento corrente che viene gestito. Se può essere fatto usando jquery sarebbe grandioso.Come simulare un evento di fine trascinamento in Raphael JS?

Qualcosa di simile a questo:

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(); 

ottengo gli errori, perché l'elemento figlio è il this nella parte "movimento" di un trascinamento. Ma viene utilizzato per interagire con currentShift.

So che ci sono altri metodi per ottenere un effetto simile, ma mi piacerebbe sapere se c'è un modo per imitare la fine del trascinamento per un elemento arbitrario.

+0

Può essere 'var child = currentShift.data(). EndChild;' .... –

+0

@eicto Non capisco davvero cosa stai suggerendo. L'elemento 'child' è impostato correttamente. La parte che mi sto veramente chiedendo è '$ (currentShift.node) .mouseup();'. Questa linea in realtà non chiama l'evento di trascinamento finale per quell'elemento, o almeno mi dà errori invece di rilasciare l'elemento currentShift come avevo desiderato. – keyneom

risposta

1

Sembra che è possibile utilizzare un riferimento alla funzione di trascinamento fine (nel mio caso up) con call() solo di passaggio un punto di riferimento (nel mio caso currentShift) per il vostro elemento Raphael JS. Il mio codice ora assomiglia a questo:

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(); 

Questo ancora non sta facendo esattamente quello che vorrei in quanto, se l'utente tiene premuto il mouse verso il basso, si tenta di chiamare la mia funzione di trascinamento mossa anche dopo che l'elemento è stato rimosso (ovvero non sta forzando l'evento di trascinamento a fermarsi, sta solo chiamando l'evento up e quindi dando un sacco di errori non fatali poiché l'elemento non esiste più quando si prova a chiamare la funzione move).

Se qualcuno può fornire una risposta nei prossimi giorni su come forzare il trascinamento alla fine (quindi non vengono più effettuate chiamate alla funzione di spostamento), anche se l'utente continua a tenere premuto il mouse, lo farò accetta quella risposta. Altrimenti, accetterò semplicemente questo.