La ragione ci si sfarfallio è che si sta calcolando l'offset del mouse all'interno della casella ogni volta che si sposta il mouse. Se calcoli semplicemente mouseOffX
e mouseOffY
una volta in onmousedown
, non avrai lo sfarfallio.
Ecco una versione modificata. Ha ancora alcuni problemi, ma nessun sfarfallamento:
http://jsfiddle.net/RzqQE/
ho intenzione di cercare di risolvere la cosa strana di offset nella mia versione, ma non si può dare alcuna garanzia - sto rischia di addormentarsi in qualsiasi momento.
Modifica: Ah, risolto. Ecco una versione che funziona: http://jsfiddle.net/7QzZM/
Ora per spiegare quello che ho fatto:
Non abbiamo davvero a cuore la posizione del mouse nel blocco. Quello che ci interessa è quanto spostare il blocco ogni volta che il mouse si muove. Possiamo capirlo ottenendo i delta della posizione del mouse (dx
e dy
nel mio codice). Per ottenere la nuova posizione del blocco, aggiungiamo i delta alla sua vecchia posizione.
L'altra differenza era che ho usato $('#box').position()
anziché $('#box').offset()
; questo restituisce la posizione relativa al parent della casella piuttosto che relativa al documento.
fonte
2011-11-23 11:31:04
ho fissato il vostro jsfiddle, dargli un andare ora: http://jsfiddle.net/5Sxrq/2/ – sally
@sally: sei sicuro di averlo corretto? Sto ancora ottenendo lo stesso sfarfallio con la tua versione. EDIT: Non importa, stavo guardando il link sbagliato. –