我在两台单独的计算机上测试了下面的代码。一个是带有正常滚动的普通鼠标的窗口,另一个是带有继承滚动的魔术鼠标的MacBook Pro。现在的问题是,在Windows PC上,这个功能可以正常工作,而在MacBook上它可以动画两次相同的东西。它从让我们说y = 0到y = 250,然后立即到500,显然.animate正在执行两次。
我尝试设置类似animationStarted = false
的变量,然后在到达主else
块时将其设置为true,并在运行动画之前检查此条件。它没用。我尝试的另一件事是使用$(elem).clearQueue()
,但它也没有用。
有没有人有一个建议,我怎么能做这个工作?我真的不知道它为什么要执行两次
var currScroll = $('body').scrollTop();
var lastAnimation = 0;
var animationTime = 500; // in ms
var quietPeriod = 0; // in ms, time after animation to ignore mousescroll
$(window).bind('DOMMouseScroll mousewheel', function(e)
{
var timeNow = new Date().getTime();
e.preventDefault();
e.stopPropagation();
// If the last mousescroll happened less that 100 ms ago, update
// timeStamp and do nothing
if (timeNow - lastAnimation < quietPeriod + animationTime) {
return;
} else {
if(e.originalEvent.wheelDelta < 0 )
{
lastAnimation = new Date().getTime();
$('body').animate({scrollTop: currScroll + 250}, animationTime, function()
{
currScroll = $('body').scrollTop();
});
}
else if(e.originalEvent.wheelDelta > 0)
{
lastAnimation = new Date().getTime();
$('body').animate({scrollTop: currScroll - 250}, animationTime, function()
{
currScroll = $('body').scrollTop();
});
}
}
});