Для того, чтобы не глючили тачи, отрубил их через event.preventDefault() и event.stopPropagation(). Написал свайп для оси X, а вот вернуть нормальный скролл на Y не получается.
// t: currentTime
// b: startValue
// c: change in value
// d: duration
Math.easeInOutQuad = function(t, b, c, d) {
t /= d / 2;
if (t < 1) return -c / 2 * t * t + b;
t--;
return c / 2 * (t * (t - 2) - 1) + b;
};
function SwipeScroll() {
this.scrolled = 0;
this.newPosition = 0;
this.interval = null;
this.speed = 0;
this.swipeTo();
}
SwipeScroll.prototype.swipeTo = function() {
document.documentElement.scrollTop = 1;
var element = (document.documentElement && document.documentElement.scrollTop) ? document.documentElement : document.body;
var start = element.scrollTop;
var change = otk.y; // разница между начальным положением тача и конечным. Отлавливается на touchstart и touchend
var currentTime = 0;
var increment = 20;
var duration = 300;
function animateScroll() {
currentTime += increment;
var val = Math.easeInOutQuad(currentTime, start, change, duration);
element.scrollTop = val;
if (currentTime < duration) {
setTimeout(animateScroll, increment);
}
}
animateScroll();
}