.animate仅使用魔术鼠标在Mac上执行两次?

时间:2016-03-07 15:52:31

标签: jquery animation scroll

我在两台单独的计算机上测试了下面的代码。一个是带有正常滚动的普通鼠标的窗口,另一个是带有继承滚动的魔术鼠标的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();
                                    });
        }
    }



});

0 个答案:

没有答案