我正在处理同样的问题。对我来说,IE9不会为滚动条发出mouseup事件。所以,我检查了IE9,当你“mouseup”它发出mousemove事件。所以我做的是监视器滚动,并监视mousemove。当用户滚动并发生鼠标移动事件时,我将其理解为mouseup事件。只有做这个检查IE9,刨原始财产可用性。该代码也将运行于Opera,但Opera有鼠标移动,当两个事件都发生时,对我来说没有任何问题。下面是代码,我写AngularJS +仄代码,这样的想法,并编写自己的代码,不要指望直接复制粘贴&这段代码:
// 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,我不担心旧版浏览器。
问候
你是如何使用计时器解决问题的? – baltoro 2012-07-16 11:17:34
使用定时器以何种解决方案? jQuery的滚动事件? – ThdK 2015-03-05 08:05:45
这不是一个答案,不应该这样选择,即使这是你自己的问题。请帮助其他开发人员,并跟进您使用的计时器代码。 – 2015-07-27 19:13:06