2012-01-22 132 views
0

我知道关于滚轮和滚动有几个问题;我不确定它们中的任何一个是否适用于我的具体问题。如果他们这样做,那么我对提出这个问题表示抱歉。带日历的jQuery滚轮

尽管如此,我正在使用jQuery与FullCalendar。更具体地说,我输入了一个小函数来触发日历在滚动鼠标时向前或向后跳转。它与你典型的老式滚动轮一起工作得很好。但是,使用Apple Magic Mouse时,它滚动的方式太多了!我现在用的是当前的代码:

$('#my_calendar') 
    .bind('mousewheel', function(event, delta) { 
    var view = $('#monthCalendar').fullCalendar('getView'); 

    if (view.name == "month") { 
       if (delta > 0) { $(this).fullCalendar('prev'); } 
       if (delta < 0) { $(this).fullCalendar('next'); } 
       return false; 
    } 
}); 

我怎么能解决这个问题,这样,如果用户正在使用Magic Mouse鼠标(或类似),这可能会限制系统将滚动向前月的量还是落后?

任何帮助将是巨大的!谢谢。

回答

1

您是否尝试过“去抖”功能?这是略有下划线框架改变:

function debounce(func, wait) { 
    var timeout; 
    return function() { 
     var context = this, args = arguments; 
     var later = function() { 
     timeout = null; 
     func.apply(context, args); 
     }; 
     clearTimeout(timeout); 
     timeout = setTimeout(later, wait); 
    }; 
    }; 

最后的代码将如下所示:

function debounce(func, wait) { 
     var timeout; 
     return function() { 
      var context = this, args = arguments; 
      var later = function() { 
       timeout = null; 
       func.apply(context, args); 
      }; 
      clearTimeout(timeout); 
      timeout = setTimeout(later, wait); 
     }; 
    }; 

    var scrolldb = debounce(handleScroll, 200); 

    $('#my_calendar').bind('mousewheel', scrolldb); 

    function handleScroll(event, delta) { 
     var view = $('#monthCalendar').fullCalendar('getView'); 

     if (view.name == "month") { 
      if (delta > 0) { 
       $(this).fullCalendar('prev'); 
      } 
      if (delta < 0) { 
       $(this).fullCalendar('next'); 
      } 
      return false; 
     } 
    } 

优化“等待”参数,直到它与魔术鼠标工程进展顺利。我用滚动垫和魔术鼠标测试了这个。

+0

哇,效果很好。我从未使用过“去抖”功能。非常感谢! – Dodinas