momentum.js
959 Bytes
export function momentum(current, start, time, lowerMargin, upperMargin, wrapperSize, options) {
let distance = current - start
let speed = Math.abs(distance) / time
let {deceleration, itemHeight, swipeBounceTime, wheel, swipeTime} = options
let duration = swipeTime
let rate = wheel ? 4 : 15
let destination = current + speed / deceleration * (distance < 0 ? -1 : 1)
if (wheel && itemHeight) {
destination = Math.round(destination / itemHeight) * itemHeight
}
if (destination < lowerMargin) {
destination = wrapperSize ? Math.max(lowerMargin - wrapperSize / 4, lowerMargin - (wrapperSize / rate * speed)) : lowerMargin
duration = swipeBounceTime
} else if (destination > upperMargin) {
destination = wrapperSize ? Math.min(upperMargin + wrapperSize / 4, upperMargin + wrapperSize / rate * speed) : upperMargin
duration = swipeBounceTime
}
return {
destination: Math.round(destination),
duration
}
}