He intentado implementar una vista panorámica de la página arrastrando. En mi implementación, la página se mueve durante un tiempo después de que el usuario suelta el botón del mouse, como arrastrar mapas en Google Maps. Ahora me gustaría evitar este efecto, cuando el mouse ya no se mueve cuando el usuario suelta el botón. El problema es que no puedo descubrir cómo detectar si el mouse se mueve realmente cuando se dispara el evento mouseup
.¿Cómo detectar si el mouse se está moviendo cuando se dispara el mouseup?
Por ahora he tratado de resolver este problema calculando la velocidad de arrastre y luego comparo la velocidad a una "sensibilidad" prevaluada, que funciona la mayor parte del tiempo, pero a veces falla.
Ejemplo simplificado en jsFiddle. Cuando juegue con el violín, use middlebutton en FF, el draggabble div "se pega" al botón izquierdo.
Pseudocódigo:
AniMove = function (doc, element, sensitivity, panspeed, duration) {
var mouseDown = function (e) {
sTime = new Date();
originalX = mouseX = e.clientX;
originalY = mouseY = e.clientY;
/* addEventListeners mousemove & mouseup for document */
return;
},
mouseMove = function (e) {
/* Setting new position for #square + new mouseX & Y */
return;
},
mouseUp = function() {
var dc = 1;
/* removeEventListeners mousemove & mouseup */
eTime = new Date();
vX = Math.round((50 * panspeed) * (originalX - mouseX)/(eTime - sTime));
vY = Math.round((50 * panspeed) * (originalY - mouseY)/(eTime - sTime));
// Check whether mouse is moving or not,
// now checking the speed against sensitivity, which is not reliable
if (Math.abs(vX) < sensitivity){vX = 0;}
if (Math.abs(vY) < sensitivity){vY = 0;}
for (n = 0; n < dur; n++, dc += 0.001) {
vX = Math.round(vX * dec/dc);
vY = Math.round(vY * dec/dc);
delay[n] = setTimeout(endDrag(n, vX, vY), n * 50);
}
return;
},
endDrag = function (n, vX, vY) {
/* Setting new position for #square */
return;
},
dec = 1 - 120/duration;
panspeed *= -0.01;
duration /= 50;
element.addEventListener('mousedown', mouseDown, false);
}
drag = new AniMove(document, document.getElementById('square'), 20, 100, 500);
lo tanto, es posible la determinación de si el ratón se está moviendo o no en esta situación? Tal vez necesito un enfoque diferente para esta tarea?
¡Gracias, ahora funciona! Pensamiento 10 ms hizo el truco. Violín de trabajo: http://jsfiddle.net/cww55/7/ – Teemu