La razón te parpadeo es que se está calculando el desplazamiento del ratón dentro de la caja cada vez que se mueve el ratón. Si simplemente calcula mouseOffX
y mouseOffY
una vez en onmousedown
, no lo tendrá parpadeando.
Aquí hay una versión modificada. Todavía tiene algunos problemas, pero no parpadea:
http://jsfiddle.net/RzqQE/
Voy a tratar de solucionar el inconveniente extraño en mi versión, pero no puedo darte ninguna garantía. Es probable que me quede dormido. en cualquier momento.
Editar: Ah, lo arregló. Aquí hay una versión que funciona: http://jsfiddle.net/7QzZM/
Ahora, para explicar lo que hice:
Realmente no importa la posición del ratón en el bloque. Lo que nos importa es cuánto mover el bloque cada vez que se mueve el mouse. Podemos resolver esto obteniendo los deltas de la posición del mouse (dx
y dy
en mi código). Para obtener la nueva posición del bloque, simplemente agregamos los deltas a su posición anterior.
La otra diferencia es que utilicé $('#box').position()
en lugar de $('#box').offset()
; esto devuelve la posición relativa al padre de la caja en lugar de relativa al documento.
he fijado su jsFiddle, darle una oportunidad ahora: http://jsfiddle.net/5Sxrq/2/ – sally
@sally: ¿Estás seguro de que realmente lo arreglaste? Todavía estoy obteniendo el mismo parpadeo con tu versión. EDITAR: No importa, estaba mirando el enlace equivocado. –