スワイプの速度を計算して、何らかのしきい値に基づいてモーメントスクロールが発生するかどうかを調べることができます。私はいくつかのテストを行い、約0.25ピクセル/ msの値が良いと思われます。
注:速度が低い場合でも勢いがスクロールすることがあります。私が記録した運動量のスクロールを引き起こす最も低い速度は0.13(非常に短いデルタ時間で)だったので、100%完璧な解決策が必要な場合は、探し続ける。
このコード例では、オーバースクロールも検出して処理します。
JQueryを使用。私の場合は
var scrollWrapper = $('#myWrapper');
var starTime, startScroll, waitForScrollEvent;
scrollWrapper.bind('touchstart', function() {
waitForScrollEvent = false;
});
scrollWrapper.bind('touchmove', function() {
startTime = new Date().getTime(); startScroll = scrollWrapper.scrollTop();
});
scrollWrapper.bind('touchend', function() {
var deltaTime = new Date().getTime() - startTime;
var deltaScroll = Math.abs(startScroll - scrollWrapper.scrollTop());
if (deltaScroll/deltaTime>0.25
|| scrollWrapper.scrollTop()<0
|| scrollWrapper.scrollTop()>scrollWrapper.height()) {
// will cause momentum scroll, wait for 'scroll' event
waitForScrollEvent = true;
}
else {
onScrollCompleted(); // assume no momentum scroll was initiated
}
startTime = 0;
});
scrollWrapper.bind('scroll', function() {
if (waitForScrollEvent) {
onScrollCompleted();
}
});
これは素晴らしいです!私は内部のdivをスクロール可能にすることに苦労してきました。そして、その勢いを有効にすることによって、私が持っていたすべてのスナップロジックがウィンドウの外に出ました。 2つのカンマが不足していて、ラッパー変数が定義されていません。そうでなければ素晴らしいです! – Chris
うれしいことがありましたらうれしいです。エラーを指摘してくれてありがとう。 – dagge
非常にいいです。それのデモを作成します。それは他の人がすぐに結果を確認するのに便利かもしれません。 –