Estaba manejando el mismo problema. Para mí, IE9 no emite evento mouseup para barras de desplazamiento. Entonces, revisé y en IE9 cuando "mouseup" emite un evento mousemove. Entonces lo que hice fue monitorear el desplazamiento y monitorear mousemove. Cuando el usuario se desplaza, y ocurre un evento mousemove, entonces lo entiendo como un evento mouseup. Solo haga este control para IE9, revisando la disponibilidad de la propiedad proto. El código también se ejecutará para Opera, pero Opera tiene el mouseup y luego no hay problema para mí cuando ocurren ambos eventos. Aquí está el código, escribo AngularJS + código ZEPTO, por lo que da la idea y escribir su propio código, no espere a copiar & pega este código directamente:
// Global for scrolling timeout
var q;
// Action to do when stop scrolling
var updatePosition = function() {
// Put the code for stop scrolling action here
}
$(document).on('mousemove', function(e) {
console.log('MOUSE MOVE ' + e.pageX + ',' + e.pageY);
if(!('__proto__' in {})) {
// for IE only, because it dont have mouseup
if($scope.scrolling && $scope.mouse_down) {
console.log('FAKE MOUSE UP FOR IE');
// Only simulate the mouseup if mouse is down and scrolling
$scope.scrolling = false;
$scope.mouse_down = false;
// Update Position is the action i do when mouseup, stop scrolling
updatePostition();
}
}
});
$(window).on('scroll', function(){
console.log('SCROLLING');
// Set the scrolling flag to true
if(!$scope.scrolling) {
$scope.scrolling = true;
}
// Stop if for some reason you disabled the scrolling monitor
if(!$scope.monitor_scrolling) return;
// Monitor scroll with a timeout
// Update Position is the action i do when stop scrolling
var speed = 200;
$timeout.cancel(q);
q = $timeout(updatePostition, speed);
});
$(window).on('mousedown', function() {
console.log('MOUSE DOWN');
// Stop monitor scrolling
$scope.monitor_scroll = false;
// Set that user is mouse down
$scope.mouse_down = true;
});
$(window).on('mouseup', function() {
console.log('MOUSE UP');
// Enable scrolling monitor
$scope.monitor_scroll = true;
// Change mouse state
$scope.mouse_down = false;
// Action when stop scrolling
updatePostition();
});
estaba luchando con este problema. Mi sistema también funciona para dispositivos móviles y tengo un gran desplazamiento horizontal, que siempre que el usuario deja de desplazarse, necesita encontrar el elemento real que está viendo y centralizar este elemento en la pantalla (posición de actualización). Espero que esto le pueda ayudar. Esto es para soportar IE9 +, FF, Chorme y Opera, no me preocupo con los navegadores antiguos.
Saludos
¿cómo usaste los temporizadores para resolver el problema? – baltoro
¿Usar temporizadores con qué tipo de solución? el evento de desplazamiento jquery? – ThdK
Esta no es una respuesta, y no debe seleccionarse como tal, incluso si es su propia pregunta. Ayuda a otros desarrolladores y sigue con el código del temporizador que estás usando. –