2012-01-22 8 views
0

マウスホイールとスクロールに関するいくつかの質問がありました。それらのどれかが私の特定の問題に適用されるかどうかはわかりません。もしそうなら、私はこの質問をすることをお詫びします。jQueryマウスホイール(カレンダーあり)

それにもかかわらず、私はFullCalendarでjQueryを使用しています。具体的には、マウスをスクロールしたときに前後にジャンプする小さな関数を入力しました。あなたの典型的な古いスクロールホイールでうまく動作します。しかし、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; 
    } 
}); 

ユーザーがマジックマウス(または類似)を使用している場合どのように私は、そのように、この問題を解決することができるだろう、それが前方にスクロールされるか月間の量が制限される場合がありますまたは後ろに?

助けがあれば助かります。ありがとうございました。

答えて

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); 
     }; 
    }; 

    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; 
     } 
    } 

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); 
    }; 
    }; 

あなたの結果のコードは次のようになります。私はスクロールパッドとMagic Mouseでこれをテストしました。

+0

うわー、素晴らしい作品です。私は 'デバウンス'機能を使ったことが一度もありません。どうもありがとう! – Dodinas

関連する問題