wheel-gestures
Advanced tools
Comparing version 1.3.0 to 1.4.0
@@ -5,1 +5,2 @@ export * from './wheel-gestures/wheel-gestures'; | ||
export * from './wheel-analyzer/wheel-analyzer-types'; | ||
export * from './utils'; |
@@ -1,2 +0,3 @@ | ||
export declare type Vector3D = number[]; | ||
export declare type VectorXYZ = [number, number, number]; | ||
export declare type BooleanXYZ = [boolean, boolean, boolean]; | ||
export interface WheelAnalyzerState { | ||
@@ -7,4 +8,4 @@ isStarted: boolean; | ||
lastAbsDelta: number; | ||
axisMovement: Vector3D; | ||
axisVelocity: Vector3D; | ||
axisMovement: VectorXYZ; | ||
axisVelocity: VectorXYZ; | ||
accelerationFactors: number[][]; | ||
@@ -19,5 +20,5 @@ scrollPoints: ScrollPoint[]; | ||
isEndingSoon: boolean; | ||
axisMovement: Vector3D; | ||
axisVelocity: Vector3D; | ||
axisDelta: Vector3D; | ||
axisMovement: VectorXYZ; | ||
axisVelocity: VectorXYZ; | ||
axisDelta: VectorXYZ; | ||
event: WheelEvent | WheelEventData; | ||
@@ -27,3 +28,3 @@ } | ||
currentAbsDelta: number; | ||
axisDeltaUnclampt: number[]; | ||
axisDeltaUnclampt: VectorXYZ; | ||
timestamp: number; | ||
@@ -51,1 +52,2 @@ } | ||
export declare type PreventWheelActionType = 'all' | 'x' | 'y'; | ||
export declare type ReverseSign = BooleanXYZ | boolean; |
@@ -1,4 +0,5 @@ | ||
import { PreventWheelActionType, SubscribeFn, Unobserve, Unsubscribe, WheelEventData } from './wheel-analyzer-types'; | ||
import { PreventWheelActionType, ReverseSign, SubscribeFn, Unobserve, Unsubscribe, WheelEventData } from './wheel-analyzer-types'; | ||
export interface Options { | ||
preventWheelAction: PreventWheelActionType; | ||
reverseSign: ReverseSign; | ||
} | ||
@@ -5,0 +6,0 @@ export declare function WheelAnalyzer(optionsParam?: Partial<Options>): Readonly<{ |
@@ -68,2 +68,5 @@ 'use strict'; | ||
function lastOf(array) { | ||
return array[array.length - 1]; | ||
} | ||
function average(numbers) { | ||
@@ -74,3 +77,12 @@ return numbers.reduce(function (a, b) { | ||
} | ||
function addVectors(v1, v2) { | ||
if (v1.length !== v2.length) { | ||
throw new Error('vectors must be same length'); | ||
} | ||
return v1.map(function (val, i) { | ||
return val + v2[i]; | ||
}); | ||
} | ||
var LINE_HEIGHT = 16 * 1.125; | ||
@@ -84,10 +96,22 @@ var PAGE_HEIGHT = typeof window !== 'undefined' && window.innerHeight || 800; | ||
return { | ||
deltaX: deltaX, | ||
deltaY: deltaY, | ||
deltaZ: deltaZ, | ||
deltaMode: 0, | ||
timestamp: e.timeStamp | ||
axisDelta: [deltaX, deltaY, deltaZ], | ||
timeStamp: e.timeStamp | ||
}; | ||
} | ||
var reverseAll = [-1, -1, -1]; | ||
function reverseSign(wheel, reverseSign) { | ||
if (!reverseSign) { | ||
return wheel; | ||
} | ||
var multipliers = reverseSign === true ? reverseAll : reverseSign.map(function (shouldReverse) { | ||
return shouldReverse ? -1 : 1; | ||
}); | ||
return _extends({}, wheel, { | ||
axisDelta: wheel.axisDelta.map(function (delta, i) { | ||
return delta * multipliers[i]; | ||
}) | ||
}); | ||
} | ||
/** | ||
@@ -104,4 +128,4 @@ * the timeout is automatically adjusted during a gesture | ||
lastAbsDelta: Infinity, | ||
axisMovement: [0, 0], | ||
axisVelocity: [0, 0], | ||
axisMovement: [0, 0, 0], | ||
axisVelocity: [0, 0, 0], | ||
accelerationFactors: [], | ||
@@ -134,2 +158,3 @@ scrollPoints: [], | ||
var SOON_ENDING_WHEEL_COUNT = 3; | ||
var reverseSignDefault = [true, true, false]; | ||
function WheelAnalyzer(optionsParam) { | ||
@@ -177,3 +202,6 @@ if (optionsParam === void 0) { | ||
var unsubscribe = function unsubscribe(callback) { | ||
if (!callback) throw new Error('please pass the callback which was used to subscribe'); | ||
if (!callback) { | ||
throw new Error('please pass the callback used to subscribe'); | ||
} | ||
subscriptions = subscriptions.filter(function (s) { | ||
@@ -218,6 +246,9 @@ return s !== callback; | ||
preventWheelAction = _newOptions$preventWh === void 0 ? 'all' : _newOptions$preventWh, | ||
otherOptions = _objectWithoutPropertiesLoose(_newOptions, ["preventWheelAction"]); | ||
_newOptions$reverseSi = _newOptions.reverseSign, | ||
reverseSign = _newOptions$reverseSi === void 0 ? reverseSignDefault : _newOptions$reverseSi, | ||
otherOptions = _objectWithoutPropertiesLoose(_newOptions, ["preventWheelAction", "reverseSign"]); | ||
options = _extends({ | ||
preventWheelAction: preventWheelAction | ||
preventWheelAction: preventWheelAction, | ||
reverseSign: reverseSign | ||
}, otherOptions); | ||
@@ -252,7 +283,8 @@ return options; | ||
var processWheelEventData = function processWheelEventData(wheelEvent) { | ||
var _normalizeWheel = normalizeWheel(wheelEvent), | ||
deltaX = _normalizeWheel.deltaX, | ||
deltaY = _normalizeWheel.deltaY, | ||
deltaZ = _normalizeWheel.deltaZ; | ||
var _reverseSign = reverseSign(normalizeWheel(wheelEvent), options.reverseSign), | ||
axisDelta = _reverseSign.axisDelta; | ||
var deltaX = axisDelta[0], | ||
deltaY = axisDelta[1]; // TODO: deltaZ | ||
if (wheelEvent.preventDefault && shouldPreventDefault(wheelEvent)) { | ||
@@ -264,7 +296,7 @@ wheelEvent.preventDefault(); | ||
start(); | ||
} | ||
} // TODO: deltaZ | ||
var currentDelta = clampDelta(Math.abs(deltaY) > Math.abs(deltaX) ? deltaY : deltaX); | ||
var currentAbsDelta = Math.abs(currentDelta); | ||
var axisDelta = [deltaX, deltaY, deltaZ]; | ||
@@ -276,3 +308,4 @@ if (state.isMomentum && currentAbsDelta > state.lastAbsDelta) { | ||
currentEvent = wheelEvent; | ||
currentEvent = wheelEvent; // TODO: clampDelta like reverseSign | ||
state.axisMovement = state.axisMovement.map(function (prevDelta, i) { | ||
@@ -284,3 +317,3 @@ return prevDelta + clampDelta(axisDelta[i]); | ||
currentAbsDelta: currentAbsDelta, | ||
axisDeltaUnclampt: [deltaX, deltaY], | ||
axisDeltaUnclampt: axisDelta, | ||
timestamp: wheelEvent.timeStamp | ||
@@ -296,10 +329,5 @@ }); | ||
})), | ||
axisDeltaUnclampt: scrollPointsToMerge.reduce(function (_ref, _ref2) { | ||
var sumX = _ref[0], | ||
sumY = _ref[1]; | ||
var _ref2$axisDeltaUnclam = _ref2.axisDeltaUnclampt, | ||
x = _ref2$axisDeltaUnclam[0], | ||
y = _ref2$axisDeltaUnclam[1]; | ||
return [sumX + x, sumY + y]; | ||
}, [0, 0]), | ||
axisDeltaUnclampt: scrollPointsToMerge.map(function (b) { | ||
return b.axisDeltaUnclampt; | ||
}).reduce(addVectors), | ||
timestamp: average(scrollPointsToMerge.map(function (b) { | ||
@@ -462,4 +490,4 @@ return b.timestamp; | ||
var willEndSoon = function willEndSoon() { | ||
var absDeltas = state.scrollPoints.slice(SOON_ENDING_WHEEL_COUNT * -1).map(function (_ref3) { | ||
var currentAbsDelta = _ref3.currentAbsDelta; | ||
var absDeltas = state.scrollPoints.slice(SOON_ENDING_WHEEL_COUNT * -1).map(function (_ref) { | ||
var currentAbsDelta = _ref.currentAbsDelta; | ||
return currentAbsDelta; | ||
@@ -507,7 +535,2 @@ }); | ||
var dragState = { | ||
down: false, | ||
axisMovement: [0, 0], | ||
axisVelocity: [0, 0] | ||
}; | ||
var wheelAnalyzer = WheelAnalyzer({ | ||
@@ -526,10 +549,7 @@ preventWheelAction: axis | ||
wheelAnalyzer.subscribe(function (type, data) { | ||
dragState = { | ||
var dragState = _extends({}, data, { | ||
// TODO: move into analyzer | ||
down: true, | ||
// TODO: why * -1, should this not better be in analyzer or when used? | ||
axisMovement: data.axisMovement.map(function (d) { | ||
return d * -1; | ||
}), | ||
axisVelocity: [data.axisVelocity[0] * -1, data.axisVelocity[1] * -1] | ||
}; | ||
start: false | ||
}); | ||
@@ -539,3 +559,4 @@ switch (type) { | ||
dragState = _extends({}, dragState, { | ||
down: true | ||
down: true, | ||
start: true | ||
}); | ||
@@ -574,2 +595,5 @@ dispatch('wheelstart', dragState); | ||
exports.WheelGestures = WheelGestures; | ||
exports.addVectors = addVectors; | ||
exports.average = average; | ||
exports.lastOf = lastOf; | ||
//# sourceMappingURL=wheel-gestures.cjs.development.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function t(e){return e.reduce((function(e,t){return e+t}))/e.length}Object.defineProperty(exports,"__esModule",{value:!0});var n,r,o,s=[1,18,"undefined"!=typeof window&&window.innerHeight||800];function a(n){var r;void 0===n&&(n={});var o,a,i={isStarted:!1,isStartPublished:!1,isMomentum:!1,lastAbsDelta:Infinity,axisMovement:[0,0],axisVelocity:[0,0],accelerationFactors:[],scrollPoints:[],scrollPointsToMerge:[],willEndTimeout:400},l=[],c=[],u=function(e){e.removeEventListener("wheel",f),c=c.filter((function(t){return t!==e}))},E=function(e){if(!e)throw new Error("please pass the callback which was used to subscribe");l=l.filter((function(t){return t!==e}))},h=function(t,n){var r=e({type:t,isEndingSoon:L(),isMomentum:i.isMomentum,axisMovement:i.axisMovement,axisVelocity:i.axisVelocity,axisDelta:[0,0,0],event:o},n);l.forEach((function(e){return e(t,r)}))},f=function(e){Array.isArray(e)?e.forEach((function(e){return p(e)})):p(e)},M=function(t){void 0===t&&(t={});var n=t.preventWheelAction,o=void 0===n?"all":n,s=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t.indexOf(n=s[r])>=0||(o[n]=e[n]);return o}(t,["preventWheelAction"]);return r=e({preventWheelAction:o},s)},m=function(e){return Math.min(150,Math.max(-150,e))},p=function(e){var n,a={deltaX:(n=e).deltaX*s[n.deltaMode],deltaY:n.deltaY*s[n.deltaMode],deltaZ:(n.deltaZ||0)*s[n.deltaMode],deltaMode:0,timestamp:n.timeStamp},l=a.deltaX,c=a.deltaY,u=a.deltaZ;e.preventDefault&&function(e){var t=e.deltaX,n=e.deltaY;switch(r.preventWheelAction){case"all":return!0;case"x":return Math.abs(t)>=Math.abs(n);case"y":return Math.abs(n)>=Math.abs(t)}}(e)&&e.preventDefault(),i.isStarted||T();var E=m(Math.abs(c)>Math.abs(l)?c:l),f=Math.abs(E),M=[l,c,u];if(i.isMomentum&&f>i.lastAbsDelta&&(b(),T()),o=e,i.axisMovement=i.axisMovement.map((function(e,t){return e+m(M[t])})),i.lastAbsDelta=f,i.scrollPointsToMerge.push({currentAbsDelta:f,axisDeltaUnclampt:[l,c],timestamp:e.timeStamp}),2===i.scrollPointsToMerge.length){var p=i.scrollPointsToMerge,x={currentAbsDelta:t(p.map((function(e){return e.currentAbsDelta}))),axisDeltaUnclampt:p.reduce((function(e,t){var n=t.axisDeltaUnclampt;return[e[0]+n[0],e[1]+n[1]]}),[0,0]),timestamp:t(p.map((function(e){return e.timestamp})))};i.scrollPoints.push(x),W(),i.isMomentum||_(),i.scrollPointsToMerge=[]}i.scrollPoints.length||d(),i.isStartPublished||(h(exports.WheelPhase.ANY_WHEEL_START),h(exports.WheelPhase.WHEEL_START),i.isStartPublished=!0),h(exports.WheelPhase.ANY_WHEEL,{axisDelta:M}),h(i.isMomentum?exports.WheelPhase.MOMENTUM_WHEEL:exports.WheelPhase.WHEEL,{axisDelta:M}),A()},d=function(){i.axisVelocity=i.scrollPointsToMerge[i.scrollPointsToMerge.length-1].axisDeltaUnclampt.map((function(e){return e/i.willEndTimeout}))},W=function(){var e=i.scrollPoints.slice(-2),t=e[0],n=e[1];if(t&&n){var r=n.timestamp-t.timestamp;if(!(r<=0)){var o=n.axisDeltaUnclampt.map((function(e){return e/r})),s=o.map((function(e,t){return e/(i.axisVelocity[t]||1)}));i.axisVelocity=o,i.accelerationFactors.push(s),x(r)}}},x=function(e){var t=10*Math.ceil(e/10)*1.2;i.isMomentum||(t=Math.max(100,2*t)),i.willEndTimeout=Math.min(1e3,Math.round(t))},v=function(e){return 0===e||e<=.96&&e>=.6},_=function(){if(i.accelerationFactors.length<5)return i.isMomentum;var e=i.accelerationFactors.slice(-5),t=e.reduce((function(e,t){if(!e)return!1;var n=!!t.reduce((function(e,t){return e&&e<1&&e===t?1:0})),r=t.filter(v).length===t.length;return n||r}),!0);return i.accelerationFactors=e,t&&!i.isMomentum&&(h(exports.WheelPhase.WHEEL_END),i.isMomentum=!0,h(exports.WheelPhase.MOMENTUM_WHEEL_START)),i.isMomentum},T=function(){(i={isStarted:!1,isStartPublished:!1,isMomentum:!1,lastAbsDelta:Infinity,axisMovement:[0,0],axisVelocity:[0,0],accelerationFactors:[],scrollPoints:[],scrollPointsToMerge:[],willEndTimeout:400}).isStarted=!0},A=function(){clearTimeout(a),a=setTimeout(b,i.willEndTimeout)},b=function(){i.isStarted&&(i.isMomentum?L()?h(exports.WheelPhase.MOMENTUM_WHEEL_END):h(exports.WheelPhase.MOMENTUM_WHEEL_CANCEL):h(exports.WheelPhase.WHEEL_END),h(exports.WheelPhase.ANY_WHEEL_END),i.isMomentum=!1,i.isStarted=!1)},L=function(){var e=i.scrollPoints.slice(-3).map((function(e){return e.currentAbsDelta}));return e.reduce((function(e,t){return e+t}),0)/e.length<=1.4};return M(n),Object.freeze({observe:function(e){return e.addEventListener("wheel",f,{passive:!1}),c.push(e),function(){return u(e)}},unobserve:u,disconnect:function(){c.forEach(u)},subscribe:function(e){return l.push(e),function(){return E(e)}},unsubscribe:E,feedWheel:f,updateOptions:M})}(n=exports.WheelPhase||(exports.WheelPhase={})).ANY_WHEEL_START="ANY_WHEEL_START",n.ANY_WHEEL="ANY_WHEEL",n.ANY_WHEEL_END="ANY_WHEEL_END",n.WHEEL_START="WHEEL_START",n.WHEEL="WHEEL",n.WHEEL_END="WHEEL_END",n.MOMENTUM_WHEEL_START="MOMENTUM_WHEEL_START",n.MOMENTUM_WHEEL="MOMENTUM_WHEEL",n.MOMENTUM_WHEEL_CANCEL="MOMENTUM_WHEEL_CANCEL",n.MOMENTUM_WHEEL_END="MOMENTUM_WHEEL_END",(r=exports.WheelReason||(exports.WheelReason={})).USER="USER",r.ANY="ANY";var i=((o={})[exports.WheelReason.USER]={start:exports.WheelPhase.WHEEL_START,wheel:exports.WheelPhase.WHEEL,end:exports.WheelPhase.WHEEL_END},o[exports.WheelReason.ANY]={start:exports.WheelPhase.ANY_WHEEL_START,wheel:exports.WheelPhase.ANY_WHEEL,end:exports.WheelPhase.ANY_WHEEL_END},o);exports.WheelAnalyzer=a,exports.WheelGestures=function(t){var n=void 0===t?{}:t,r=n.axis,o=n.wheelReason,s=void 0===o?exports.WheelReason.USER:o,l={down:!1,axisMovement:[0,0],axisVelocity:[0,0]},c=a({preventWheelAction:void 0===r?"all":r}),u=c.observe,E=c.unobserve,h=c.disconnect,f=function(){var e={};function t(t,n){e[t]=(e[t]||[]).filter((function(e){return e!==n}))}return Object.freeze({on:function(n,r){return e[n]=(e[n]||[]).concat(r),function(){return t(n,r)}},off:t,dispatch:function(t,n){t in e&&e[t].forEach((function(e){return e(n)}))}})}(),M=f.on,m=f.off,p=f.dispatch;return c.subscribe((function(t,n){switch(l={down:!0,axisMovement:n.axisMovement.map((function(e){return-1*e})),axisVelocity:[-1*n.axisVelocity[0],-1*n.axisVelocity[1]]},t){case i[s].start:l=e({},l,{down:!0}),p("wheelstart",l);break;case i[s].wheel:l=e({},l,{down:!0}),p("wheelmove",l);break;case i[s].end:l=e({},l,{down:!1}),p("wheelend",l);break;default:return}})),Object.freeze({observe:u,unobserve:E,disconnect:h,on:M,off:m})}; | ||
"use strict";function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function t(e){return e.reduce((function(e,t){return e+t}))/e.length}function n(e,t){if(e.length!==t.length)throw new Error("vectors must be same length");return e.map((function(e,n){return e+t[n]}))}Object.defineProperty(exports,"__esModule",{value:!0});var r,o=[1,18,"undefined"!=typeof window&&window.innerHeight||800],s=[-1,-1,-1];(r=exports.WheelPhase||(exports.WheelPhase={})).ANY_WHEEL_START="ANY_WHEEL_START",r.ANY_WHEEL="ANY_WHEEL",r.ANY_WHEEL_END="ANY_WHEEL_END",r.WHEEL_START="WHEEL_START",r.WHEEL="WHEEL",r.WHEEL_END="WHEEL_END",r.MOMENTUM_WHEEL_START="MOMENTUM_WHEEL_START",r.MOMENTUM_WHEEL="MOMENTUM_WHEEL",r.MOMENTUM_WHEEL_CANCEL="MOMENTUM_WHEEL_CANCEL",r.MOMENTUM_WHEEL_END="MOMENTUM_WHEEL_END";var a,i,l=[!0,!0,!1];function u(r){var a;void 0===r&&(r={});var i,u,c={isStarted:!1,isStartPublished:!1,isMomentum:!1,lastAbsDelta:Infinity,axisMovement:[0,0,0],axisVelocity:[0,0,0],accelerationFactors:[],scrollPoints:[],scrollPointsToMerge:[],willEndTimeout:400},E=[],h=[],f=function(e){e.removeEventListener("wheel",p),h=h.filter((function(t){return t!==e}))},m=function(e){e&&(E=E.filter((function(t){return t!==e})))},M=function(t,n){var r=e({type:t,isEndingSoon:H(),isMomentum:c.isMomentum,axisMovement:c.axisMovement,axisVelocity:c.axisVelocity,axisDelta:[0,0,0],event:i},n);E.forEach((function(e){return e(t,r)}))},p=function(e){Array.isArray(e)?e.forEach((function(e){return v(e)})):v(e)},W=function(t){void 0===t&&(t={});var n=t.preventWheelAction,r=void 0===n?"all":n,o=t.reverseSign,s=void 0===o?l:o,i=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t.indexOf(n=s[r])>=0||(o[n]=e[n]);return o}(t,["preventWheelAction","reverseSign"]);return a=e({preventWheelAction:r,reverseSign:s},i)},d=function(e){return Math.min(150,Math.max(-150,e))},v=function(r){var l,u=function(t,n){if(!n)return t;var r=!0===n?s:n.map((function(e){return e?-1:1}));return e({},t,{axisDelta:t.axisDelta.map((function(e,t){return e*r[t]}))})}({axisDelta:[(l=r).deltaX*o[l.deltaMode],l.deltaY*o[l.deltaMode],(l.deltaZ||0)*o[l.deltaMode]],timeStamp:l.timeStamp},a.reverseSign).axisDelta,E=u[0],h=u[1];r.preventDefault&&function(e){var t=e.deltaX,n=e.deltaY;switch(a.preventWheelAction){case"all":return!0;case"x":return Math.abs(t)>=Math.abs(n);case"y":return Math.abs(n)>=Math.abs(t)}}(r)&&r.preventDefault(),c.isStarted||L();var f=d(Math.abs(h)>Math.abs(E)?h:E),m=Math.abs(f);if(c.isMomentum&&m>c.lastAbsDelta&&(P(),L()),i=r,c.axisMovement=c.axisMovement.map((function(e,t){return e+d(u[t])})),c.lastAbsDelta=m,c.scrollPointsToMerge.push({currentAbsDelta:m,axisDeltaUnclampt:u,timestamp:r.timeStamp}),2===c.scrollPointsToMerge.length){var p=c.scrollPointsToMerge,W={currentAbsDelta:t(p.map((function(e){return e.currentAbsDelta}))),axisDeltaUnclampt:p.map((function(e){return e.axisDeltaUnclampt})).reduce(n),timestamp:t(p.map((function(e){return e.timestamp})))};c.scrollPoints.push(W),_(),c.isMomentum||b(),c.scrollPointsToMerge=[]}c.scrollPoints.length||x(),c.isStartPublished||(M(exports.WheelPhase.ANY_WHEEL_START),M(exports.WheelPhase.WHEEL_START),c.isStartPublished=!0),M(exports.WheelPhase.ANY_WHEEL,{axisDelta:u}),M(c.isMomentum?exports.WheelPhase.MOMENTUM_WHEEL:exports.WheelPhase.WHEEL,{axisDelta:u}),N()},x=function(){c.axisVelocity=c.scrollPointsToMerge[c.scrollPointsToMerge.length-1].axisDeltaUnclampt.map((function(e){return e/c.willEndTimeout}))},_=function(){var e=c.scrollPoints.slice(-2),t=e[0],n=e[1];if(t&&n){var r=n.timestamp-t.timestamp;if(!(r<=0)){var o=n.axisDeltaUnclampt.map((function(e){return e/r})),s=o.map((function(e,t){return e/(c.axisVelocity[t]||1)}));c.axisVelocity=o,c.accelerationFactors.push(s),T(r)}}},T=function(e){var t=10*Math.ceil(e/10)*1.2;c.isMomentum||(t=Math.max(100,2*t)),c.willEndTimeout=Math.min(1e3,Math.round(t))},A=function(e){return 0===e||e<=.96&&e>=.6},b=function(){if(c.accelerationFactors.length<5)return c.isMomentum;var e=c.accelerationFactors.slice(-5),t=e.reduce((function(e,t){if(!e)return!1;var n=!!t.reduce((function(e,t){return e&&e<1&&e===t?1:0})),r=t.filter(A).length===t.length;return n||r}),!0);return c.accelerationFactors=e,t&&!c.isMomentum&&(M(exports.WheelPhase.WHEEL_END),c.isMomentum=!0,M(exports.WheelPhase.MOMENTUM_WHEEL_START)),c.isMomentum},L=function(){(c={isStarted:!1,isStartPublished:!1,isMomentum:!1,lastAbsDelta:Infinity,axisMovement:[0,0,0],axisVelocity:[0,0,0],accelerationFactors:[],scrollPoints:[],scrollPointsToMerge:[],willEndTimeout:400}).isStarted=!0},N=function(){clearTimeout(u),u=setTimeout(P,c.willEndTimeout)},P=function(){c.isStarted&&(c.isMomentum?H()?M(exports.WheelPhase.MOMENTUM_WHEEL_END):M(exports.WheelPhase.MOMENTUM_WHEEL_CANCEL):M(exports.WheelPhase.WHEEL_END),M(exports.WheelPhase.ANY_WHEEL_END),c.isMomentum=!1,c.isStarted=!1)},H=function(){var e=c.scrollPoints.slice(-3).map((function(e){return e.currentAbsDelta}));return e.reduce((function(e,t){return e+t}),0)/e.length<=1.4};return W(r),Object.freeze({observe:function(e){return e.addEventListener("wheel",p,{passive:!1}),h.push(e),function(){return f(e)}},unobserve:f,disconnect:function(){h.forEach(f)},subscribe:function(e){return E.push(e),function(){return m(e)}},unsubscribe:m,feedWheel:p,updateOptions:W})}(a=exports.WheelReason||(exports.WheelReason={})).USER="USER",a.ANY="ANY";var c=((i={})[exports.WheelReason.USER]={start:exports.WheelPhase.WHEEL_START,wheel:exports.WheelPhase.WHEEL,end:exports.WheelPhase.WHEEL_END},i[exports.WheelReason.ANY]={start:exports.WheelPhase.ANY_WHEEL_START,wheel:exports.WheelPhase.ANY_WHEEL,end:exports.WheelPhase.ANY_WHEEL_END},i);exports.WheelAnalyzer=u,exports.WheelGestures=function(t){var n=void 0===t?{}:t,r=n.axis,o=n.wheelReason,s=void 0===o?exports.WheelReason.USER:o,a=u({preventWheelAction:void 0===r?"all":r}),i=a.observe,l=a.unobserve,E=a.disconnect,h=function(){var e={};function t(t,n){e[t]=(e[t]||[]).filter((function(e){return e!==n}))}return Object.freeze({on:function(n,r){return e[n]=(e[n]||[]).concat(r),function(){return t(n,r)}},off:t,dispatch:function(t,n){t in e&&e[t].forEach((function(e){return e(n)}))}})}(),f=h.on,m=h.off,M=h.dispatch;return a.subscribe((function(t,n){var r=e({},n,{down:!0,start:!1});switch(t){case c[s].start:r=e({},r,{down:!0,start:!0}),M("wheelstart",r);break;case c[s].wheel:r=e({},r,{down:!0}),M("wheelmove",r);break;case c[s].end:r=e({},r,{down:!1}),M("wheelend",r);break;default:return}})),Object.freeze({observe:i,unobserve:l,disconnect:E,on:f,off:m})},exports.addVectors=n,exports.average=t,exports.lastOf=function(e){return e[e.length-1]}; | ||
//# sourceMappingURL=wheel-gestures.cjs.production.min.js.map |
@@ -64,2 +64,5 @@ function _extends() { | ||
function lastOf(array) { | ||
return array[array.length - 1]; | ||
} | ||
function average(numbers) { | ||
@@ -70,3 +73,12 @@ return numbers.reduce(function (a, b) { | ||
} | ||
function addVectors(v1, v2) { | ||
if (v1.length !== v2.length) { | ||
throw new Error('vectors must be same length'); | ||
} | ||
return v1.map(function (val, i) { | ||
return val + v2[i]; | ||
}); | ||
} | ||
var LINE_HEIGHT = 16 * 1.125; | ||
@@ -80,10 +92,22 @@ var PAGE_HEIGHT = typeof window !== 'undefined' && window.innerHeight || 800; | ||
return { | ||
deltaX: deltaX, | ||
deltaY: deltaY, | ||
deltaZ: deltaZ, | ||
deltaMode: 0, | ||
timestamp: e.timeStamp | ||
axisDelta: [deltaX, deltaY, deltaZ], | ||
timeStamp: e.timeStamp | ||
}; | ||
} | ||
var reverseAll = [-1, -1, -1]; | ||
function reverseSign(wheel, reverseSign) { | ||
if (!reverseSign) { | ||
return wheel; | ||
} | ||
var multipliers = reverseSign === true ? reverseAll : reverseSign.map(function (shouldReverse) { | ||
return shouldReverse ? -1 : 1; | ||
}); | ||
return _extends({}, wheel, { | ||
axisDelta: wheel.axisDelta.map(function (delta, i) { | ||
return delta * multipliers[i]; | ||
}) | ||
}); | ||
} | ||
/** | ||
@@ -100,4 +124,4 @@ * the timeout is automatically adjusted during a gesture | ||
lastAbsDelta: Infinity, | ||
axisMovement: [0, 0], | ||
axisVelocity: [0, 0], | ||
axisMovement: [0, 0, 0], | ||
axisVelocity: [0, 0, 0], | ||
accelerationFactors: [], | ||
@@ -133,2 +157,3 @@ scrollPoints: [], | ||
var SOON_ENDING_WHEEL_COUNT = 3; | ||
var reverseSignDefault = [true, true, false]; | ||
function WheelAnalyzer(optionsParam) { | ||
@@ -176,3 +201,7 @@ if (optionsParam === void 0) { | ||
var unsubscribe = function unsubscribe(callback) { | ||
if (!callback) throw new Error('please pass the callback which was used to subscribe'); | ||
if (!callback) { | ||
if (isDev) throw new Error('please pass the callback used to subscribe'); | ||
return; | ||
} | ||
subscriptions = subscriptions.filter(function (s) { | ||
@@ -217,6 +246,9 @@ return s !== callback; | ||
preventWheelAction = _newOptions$preventWh === void 0 ? 'all' : _newOptions$preventWh, | ||
otherOptions = _objectWithoutPropertiesLoose(_newOptions, ["preventWheelAction"]); | ||
_newOptions$reverseSi = _newOptions.reverseSign, | ||
reverseSign = _newOptions$reverseSi === void 0 ? reverseSignDefault : _newOptions$reverseSi, | ||
otherOptions = _objectWithoutPropertiesLoose(_newOptions, ["preventWheelAction", "reverseSign"]); | ||
options = _extends({ | ||
preventWheelAction: preventWheelAction | ||
preventWheelAction: preventWheelAction, | ||
reverseSign: reverseSign | ||
}, otherOptions); | ||
@@ -251,7 +283,8 @@ return options; | ||
var processWheelEventData = function processWheelEventData(wheelEvent) { | ||
var _normalizeWheel = normalizeWheel(wheelEvent), | ||
deltaX = _normalizeWheel.deltaX, | ||
deltaY = _normalizeWheel.deltaY, | ||
deltaZ = _normalizeWheel.deltaZ; | ||
var _reverseSign = reverseSign(normalizeWheel(wheelEvent), options.reverseSign), | ||
axisDelta = _reverseSign.axisDelta; | ||
var deltaX = axisDelta[0], | ||
deltaY = axisDelta[1]; // TODO: deltaZ | ||
if (wheelEvent.preventDefault && shouldPreventDefault(wheelEvent)) { | ||
@@ -263,7 +296,7 @@ wheelEvent.preventDefault(); | ||
start(); | ||
} | ||
} // TODO: deltaZ | ||
var currentDelta = clampDelta(Math.abs(deltaY) > Math.abs(deltaX) ? deltaY : deltaX); | ||
var currentAbsDelta = Math.abs(currentDelta); | ||
var axisDelta = [deltaX, deltaY, deltaZ]; | ||
@@ -275,3 +308,4 @@ if (state.isMomentum && currentAbsDelta > state.lastAbsDelta) { | ||
currentEvent = wheelEvent; | ||
currentEvent = wheelEvent; // TODO: clampDelta like reverseSign | ||
state.axisMovement = state.axisMovement.map(function (prevDelta, i) { | ||
@@ -283,3 +317,3 @@ return prevDelta + clampDelta(axisDelta[i]); | ||
currentAbsDelta: currentAbsDelta, | ||
axisDeltaUnclampt: [deltaX, deltaY], | ||
axisDeltaUnclampt: axisDelta, | ||
timestamp: wheelEvent.timeStamp | ||
@@ -295,10 +329,5 @@ }); | ||
})), | ||
axisDeltaUnclampt: scrollPointsToMerge.reduce(function (_ref, _ref2) { | ||
var sumX = _ref[0], | ||
sumY = _ref[1]; | ||
var _ref2$axisDeltaUnclam = _ref2.axisDeltaUnclampt, | ||
x = _ref2$axisDeltaUnclam[0], | ||
y = _ref2$axisDeltaUnclam[1]; | ||
return [sumX + x, sumY + y]; | ||
}, [0, 0]), | ||
axisDeltaUnclampt: scrollPointsToMerge.map(function (b) { | ||
return b.axisDeltaUnclampt; | ||
}).reduce(addVectors), | ||
timestamp: average(scrollPointsToMerge.map(function (b) { | ||
@@ -461,4 +490,4 @@ return b.timestamp; | ||
var willEndSoon = function willEndSoon() { | ||
var absDeltas = state.scrollPoints.slice(SOON_ENDING_WHEEL_COUNT * -1).map(function (_ref3) { | ||
var currentAbsDelta = _ref3.currentAbsDelta; | ||
var absDeltas = state.scrollPoints.slice(SOON_ENDING_WHEEL_COUNT * -1).map(function (_ref) { | ||
var currentAbsDelta = _ref.currentAbsDelta; | ||
return currentAbsDelta; | ||
@@ -508,7 +537,2 @@ }); | ||
var dragState = { | ||
down: false, | ||
axisMovement: [0, 0], | ||
axisVelocity: [0, 0] | ||
}; | ||
var wheelAnalyzer = WheelAnalyzer({ | ||
@@ -527,10 +551,7 @@ preventWheelAction: axis | ||
wheelAnalyzer.subscribe(function (type, data) { | ||
dragState = { | ||
var dragState = _extends({}, data, { | ||
// TODO: move into analyzer | ||
down: true, | ||
// TODO: why * -1, should this not better be in analyzer or when used? | ||
axisMovement: data.axisMovement.map(function (d) { | ||
return d * -1; | ||
}), | ||
axisVelocity: [data.axisVelocity[0] * -1, data.axisVelocity[1] * -1] | ||
}; | ||
start: false | ||
}); | ||
@@ -540,3 +561,4 @@ switch (type) { | ||
dragState = _extends({}, dragState, { | ||
down: true | ||
down: true, | ||
start: true | ||
}); | ||
@@ -573,3 +595,3 @@ dispatch('wheelstart', dragState); | ||
export { WheelAnalyzer, WheelGestures, WheelPhase, WheelReason }; | ||
export { WheelAnalyzer, WheelGestures, WheelPhase, WheelReason, addVectors, average, lastOf }; | ||
//# sourceMappingURL=wheel-gestures.esm.js.map |
@@ -1,5 +0,5 @@ | ||
export interface WheelDragState { | ||
import { PhaseData } from '..'; | ||
export interface WheelDragState extends PhaseData { | ||
down: boolean; | ||
axisMovement: number[]; | ||
axisVelocity: [number, number]; | ||
start: boolean; | ||
} | ||
@@ -6,0 +6,0 @@ export declare enum WheelReason { |
@@ -1,8 +0,7 @@ | ||
import { WheelEventData } from '../wheel-analyzer/wheel-analyzer-types'; | ||
export declare function normalizeWheel(e: WheelEventData): { | ||
deltaX: number; | ||
deltaY: number; | ||
deltaZ: number; | ||
deltaMode: 0; | ||
timestamp: number; | ||
}; | ||
import { ReverseSign, VectorXYZ, WheelEventData } from '../wheel-analyzer/wheel-analyzer-types'; | ||
export interface NormalizedWheel { | ||
axisDelta: VectorXYZ; | ||
timeStamp: number; | ||
} | ||
export declare function normalizeWheel(e: WheelEventData): NormalizedWheel; | ||
export declare function reverseSign<T extends Pick<NormalizedWheel, 'axisDelta'>>(wheel: T, reverseSign: ReverseSign): T; |
{ | ||
"name": "wheel-gestures", | ||
"version": "1.3.0", | ||
"version": "1.4.0", | ||
"description": "wheel gestures and momentum detection", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
144584
1154