propagate mobile swipe gestures to page where appropriate

This commit is contained in:
DI-john 2014-11-04 11:58:24 -05:00 committed by Hyunje Alex Jun
parent 9b3301fd0c
commit 931be25635

View File

@ -28,6 +28,7 @@
var defaultSettings = { var defaultSettings = {
wheelSpeed: 1, wheelSpeed: 1,
wheelPropagation: false, wheelPropagation: false,
swipePropagation: true,
minScrollbarLength: null, minScrollbarLength: null,
maxScrollbarLength: null, maxScrollbarLength: null,
useBothWheelAxes: false, useBothWheelAxes: false,
@ -336,6 +337,33 @@
return true; return true;
} }
// check if default swipe should be prevented
function shouldPreventDefaultSwipe(deltaX, deltaY) {
var
scrollTop = $this.scrollTop(),
scrollLeft = $this.scrollLeft(),
magnitudeX = Math.abs(deltaX),
magnitudeY = Math.abs(deltaY);
if (magnitudeY > magnitudeX) {
// user is perhaps trying to swipe up/down the page
if (((deltaY < 0) && (scrollTop === contentHeight - containerHeight)) ||
((deltaY > 0) && (scrollTop === 0))) {
return !settings.swipePropagation;
}
} else if (magnitudeX > magnitudeY) {
// user is perhaps trying to swipe left/right across the page
if (((deltaX < 0) && (scrollLeft === contentWidth - containerWidth)) ||
((deltaX > 0) && (scrollLeft === 0))) {
return !settings.swipePropagation;
}
}
return true;
}
function bindMouseWheelHandler() { function bindMouseWheelHandler() {
var shouldPrevent = false; var shouldPrevent = false;
@ -713,10 +741,12 @@
startTime = currentTime; startTime = currentTime;
} }
if (shouldPreventDefaultSwipe(differenceX, differenceY)) {
e.stopPropagation(); e.stopPropagation();
e.preventDefault(); e.preventDefault();
} }
} }
}
function touchEnd(e) { function touchEnd(e) {
if (!inGlobalTouch && inLocalTouch) { if (!inGlobalTouch && inLocalTouch) {
inLocalTouch = false; inLocalTouch = false;