Я занимался той же проблемой. Для меня IE9 не генерирует событие mouseup для полос прокрутки. Итак, я проверил и на IE9, когда вы "mouseup" он генерирует событие mousemove. Итак, я сделал прокрутку монитора и отслеживание перемещения мыши. Когда пользователь прокручивает и происходит событие mousemove, я понимаю его как событие mouseup. Делайте эту проверку только для IE9, проверяя доступность свойства proto . Код также будет работать для Opera, но у Opera есть mouseup, и тогда у меня не возникнет проблем, когда произойдут оба события. Вот код, я пишу код AngularJS + ZEPTO, так что примите идею и напишите свой собственный код, не ожидайте, что вы скопируете и вставите этот код напрямую:
// 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();
});
боролся с этой проблемой. Моя система также работает для мобильных устройств, и у меня есть большая горизонтальная прокрутка, которая всегда, когда пользователь прекращает прокрутку, должна найти фактический элемент, который используется для просмотра, и централизовать этот элемент на экране (updatePosition). Надеюсь, это поможет вам. Это для поддержки IE9 +, FF, Chorme и Opera, я не беспокоюсь о старых браузерах.
С наилучшими пожеланиями