react-ui-animate 2.0.0 → 3.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/.vscode/settings.json +3 -3
  2. package/LICENSE +21 -21
  3. package/README.md +115 -115
  4. package/dist/animation/animationType.d.ts +15 -15
  5. package/dist/animation/core/animation/Animation.d.ts +16 -0
  6. package/dist/animation/core/animation/FluidValue.d.ts +21 -0
  7. package/dist/animation/core/animation/RequestAnimationFrame.d.ts +8 -0
  8. package/dist/animation/core/animation/SpringAnimation.d.ts +41 -0
  9. package/dist/animation/core/animation/TimingAnimation.d.ts +35 -0
  10. package/dist/animation/core/animation/TransitionValue.d.ts +21 -0
  11. package/dist/animation/core/controllers/Animation.d.ts +16 -0
  12. package/dist/animation/core/controllers/FluidValue.d.ts +32 -0
  13. package/dist/animation/core/controllers/RequestAnimationFrame.d.ts +8 -0
  14. package/dist/animation/core/controllers/SpringAnimation.d.ts +41 -0
  15. package/dist/animation/core/controllers/TimingAnimation.d.ts +35 -0
  16. package/dist/animation/core/easing/Bezier.d.ts +8 -0
  17. package/dist/animation/core/easing/Easing.d.ts +40 -0
  18. package/dist/animation/core/helpers/camelCaseToKebabCase.d.ts +8 -0
  19. package/dist/animation/core/helpers/camelToDash.d.ts +7 -0
  20. package/dist/animation/core/helpers/canInterpolate.d.ts +11 -0
  21. package/dist/animation/core/helpers/getAnimatableObject.d.ts +22 -0
  22. package/dist/animation/core/helpers/getCleanProps.d.ts +10 -0
  23. package/dist/animation/core/helpers/getCssValue.d.ts +8 -0
  24. package/dist/animation/core/helpers/getNonAnimatableStyle.d.ts +6 -0
  25. package/dist/animation/core/helpers/index.d.ts +5 -0
  26. package/dist/animation/core/helpers/isDefined.d.ts +12 -0
  27. package/dist/animation/core/helpers/isFluidValue.d.ts +6 -0
  28. package/dist/animation/core/index.d.ts +11 -0
  29. package/dist/animation/core/interpolation/Colors.d.ts +25 -0
  30. package/dist/animation/core/interpolation/Interpolation.d.ts +80 -0
  31. package/dist/animation/core/interpolation/__tests__/Colors.test.d.ts +1 -0
  32. package/dist/animation/core/react/Tags.d.ts +3 -0
  33. package/dist/animation/core/react/TransformStyles.d.ts +8 -0
  34. package/dist/animation/core/react/animated.d.ts +29 -0
  35. package/dist/animation/core/react/combineRefs.d.ts +2 -0
  36. package/dist/animation/core/react/fluid.d.ts +6 -0
  37. package/dist/animation/core/react/functions/camelToDash.d.ts +7 -0
  38. package/dist/animation/core/react/functions/getAnimatableObject.d.ts +22 -0
  39. package/dist/animation/core/react/functions/getCleanProps.d.ts +4 -0
  40. package/dist/animation/core/react/functions/getCssValue.d.ts +8 -0
  41. package/dist/animation/core/react/functions/getNonAnimatableStyle.d.ts +6 -0
  42. package/dist/animation/core/react/functions/index.d.ts +7 -0
  43. package/dist/animation/core/react/functions/isDefined.d.ts +6 -0
  44. package/dist/animation/core/react/functions/isTransitionValue.d.ts +6 -0
  45. package/dist/animation/core/react/helpers/camelToDash.d.ts +7 -0
  46. package/dist/animation/core/react/helpers/canInterpolate.d.ts +7 -0
  47. package/dist/animation/core/react/helpers/getAnimatableObject.d.ts +22 -0
  48. package/dist/animation/core/react/helpers/getCleanProps.d.ts +4 -0
  49. package/dist/animation/core/react/helpers/getCssValue.d.ts +8 -0
  50. package/dist/animation/core/react/helpers/getNonAnimatableStyle.d.ts +6 -0
  51. package/dist/animation/core/react/helpers/index.d.ts +7 -0
  52. package/dist/animation/core/react/helpers/isDefined.d.ts +6 -0
  53. package/dist/animation/core/react/helpers/isFluidValue.d.ts +6 -0
  54. package/dist/animation/core/react/helpers/isTransitionValue.d.ts +6 -0
  55. package/dist/animation/core/react/makeFluid.d.ts +30 -0
  56. package/dist/animation/core/react/transforms.d.ts +6 -0
  57. package/dist/animation/core/react/useFluidValue.d.ts +9 -0
  58. package/dist/animation/core/react/useMount.d.ts +20 -0
  59. package/dist/animation/core/react/useMounts.d.ts +26 -0
  60. package/dist/animation/core/react/useTransition.d.ts +9 -0
  61. package/dist/animation/core/react/useTransitions.d.ts +11 -0
  62. package/dist/animation/core/types/animation.d.ts +54 -0
  63. package/dist/animation/core/types/common.d.ts +4 -0
  64. package/dist/animation/core/types/fluid.d.ts +19 -0
  65. package/dist/animation/core/types/index.d.ts +2 -0
  66. package/dist/animation/getInitialConfig.d.ts +3 -3
  67. package/dist/animation/index.d.ts +6 -6
  68. package/dist/animation/interpolation.d.ts +21 -21
  69. package/dist/animation/lib/animationType.d.ts +15 -0
  70. package/dist/animation/lib/getInitialConfig.d.ts +3 -0
  71. package/dist/animation/lib/index.d.ts +5 -0
  72. package/dist/animation/lib/interpolation.d.ts +20 -0
  73. package/dist/animation/lib/modules/AnimatedBlock.d.ts +8 -0
  74. package/dist/animation/lib/modules/AnimatedImage.d.ts +8 -0
  75. package/dist/animation/lib/modules/AnimatedInline.d.ts +8 -0
  76. package/dist/animation/lib/modules/MountedBlock.d.ts +29 -0
  77. package/dist/animation/lib/modules/ScrollableBlock.d.ts +22 -0
  78. package/dist/animation/lib/modules/TransitionBlock.d.ts +18 -0
  79. package/dist/animation/lib/modules/index.d.ts +6 -0
  80. package/dist/animation/lib/useAnimatedValue.d.ts +17 -0
  81. package/dist/animation/lib/useMountedValue.d.ts +14 -0
  82. package/dist/animation/modules/AnimatedBlock.d.ts +8 -8
  83. package/dist/animation/modules/AnimatedImage.d.ts +8 -8
  84. package/dist/animation/modules/AnimatedInline.d.ts +8 -8
  85. package/dist/animation/modules/MountedBlock.d.ts +29 -18
  86. package/dist/animation/modules/ScrollableBlock.d.ts +21 -21
  87. package/dist/animation/modules/TransitionBlock.d.ts +17 -17
  88. package/dist/animation/modules/index.d.ts +6 -6
  89. package/dist/animation/useAnimatedValue.d.ts +22 -22
  90. package/dist/animation/useMountedValue.d.ts +15 -15
  91. package/dist/gestures/controllers/DragGesture.d.ts +17 -17
  92. package/dist/gestures/controllers/Gesture.d.ts +20 -20
  93. package/dist/gestures/controllers/MouseMoveGesture.d.ts +13 -13
  94. package/dist/gestures/controllers/ScrollGesture.d.ts +14 -14
  95. package/dist/gestures/controllers/WheelGesture.d.ts +15 -15
  96. package/dist/gestures/controllers/index.d.ts +4 -4
  97. package/dist/gestures/eventAttacher.d.ts +11 -11
  98. package/dist/gestures/helpers/eventAttacher.d.ts +11 -0
  99. package/dist/gestures/helpers/index.d.ts +1 -0
  100. package/dist/gestures/helpers/math.d.ts +34 -0
  101. package/dist/gestures/helpers/withDefault.d.ts +4 -0
  102. package/dist/gestures/hooks/index.d.ts +5 -5
  103. package/dist/gestures/hooks/useDrag.d.ts +4 -4
  104. package/dist/gestures/hooks/useGesture.d.ts +9 -9
  105. package/dist/gestures/hooks/useMouseMove.d.ts +4 -4
  106. package/dist/gestures/hooks/useRecognizer.d.ts +10 -10
  107. package/dist/gestures/hooks/useScroll.d.ts +4 -4
  108. package/dist/gestures/hooks/useWheel.d.ts +4 -4
  109. package/dist/gestures/index.d.ts +2 -2
  110. package/dist/gestures/math.d.ts +34 -34
  111. package/dist/gestures/types.d.ts +51 -51
  112. package/dist/gestures/withDefault.d.ts +4 -4
  113. package/dist/hooks/index.d.ts +3 -3
  114. package/dist/hooks/useMeasure.d.ts +14 -14
  115. package/dist/hooks/useOutsideClick.d.ts +2 -2
  116. package/dist/hooks/useWindowDimension.d.ts +9 -9
  117. package/dist/index.d.ts +9 -5
  118. package/dist/index.js +2758 -1052
  119. package/dist/index.js.map +1 -1
  120. package/dist/utils/delay.d.ts +5 -5
  121. package/dist/utils/index.d.ts +1 -2
  122. package/dist/utils/isDefined.d.ts +1 -1
  123. package/ecosystem.config.js +12 -0
  124. package/example/README.md +46 -0
  125. package/example/package-lock.json +19597 -0
  126. package/example/package.json +45 -0
  127. package/example/public/favicon.ico +0 -0
  128. package/example/public/index.html +20 -0
  129. package/example/public/logo192.png +0 -0
  130. package/example/public/logo512.png +0 -0
  131. package/example/public/manifest.json +25 -0
  132. package/example/public/robots.txt +3 -0
  133. package/example/src/App.tsx +41 -0
  134. package/example/src/components/Draggable.tsx +46 -0
  135. package/example/src/components/Gestures.tsx +151 -0
  136. package/example/src/components/Interpolation.tsx +21 -0
  137. package/example/src/components/Loop.tsx +48 -0
  138. package/example/src/components/MountedBlock.tsx +25 -0
  139. package/example/src/components/MouseMove.tsx +59 -0
  140. package/example/src/components/MultistageTransition.tsx +34 -0
  141. package/example/src/components/Scroll.tsx +39 -0
  142. package/example/src/components/ScrollableBlock.tsx +27 -0
  143. package/example/src/components/SnapTo.tsx +55 -0
  144. package/example/src/components/TransitionBlock.tsx +37 -0
  145. package/example/src/components/Wheel.tsx +39 -0
  146. package/example/src/components/index.ts +18 -0
  147. package/example/src/components/svgLine.tsx +48 -0
  148. package/example/src/components/useAnimatedValue.tsx +57 -0
  149. package/example/src/components/useMountedValue.tsx +62 -0
  150. package/example/src/index.css +8 -0
  151. package/example/src/index.tsx +16 -0
  152. package/example/tsconfig.json +26 -0
  153. package/package.json +48 -48
  154. package/{rollup.config.js → rollup.config.mjs} +18 -18
  155. package/src/animation/core/controllers/Animation.ts +27 -0
  156. package/src/animation/core/controllers/FluidValue.ts +97 -0
  157. package/src/animation/core/controllers/RequestAnimationFrame.ts +13 -0
  158. package/src/animation/core/controllers/SpringAnimation.ts +218 -0
  159. package/src/animation/core/controllers/TimingAnimation.ts +152 -0
  160. package/src/animation/core/easing/Bezier.ts +146 -0
  161. package/src/animation/core/easing/Easing.ts +132 -0
  162. package/src/animation/core/helpers/camelCaseToKebabCase.ts +10 -0
  163. package/src/animation/core/helpers/getCleanProps.ts +16 -0
  164. package/src/animation/core/helpers/getCssValue.ts +60 -0
  165. package/src/animation/core/helpers/index.ts +5 -0
  166. package/src/animation/core/helpers/isDefined.ts +14 -0
  167. package/src/animation/core/helpers/isFluidValue.ts +11 -0
  168. package/src/animation/core/index.ts +16 -0
  169. package/src/animation/core/interpolation/Colors.ts +232 -0
  170. package/src/animation/core/interpolation/Interpolation.ts +395 -0
  171. package/src/animation/core/interpolation/__tests__/Colors.test.tsx +35 -0
  172. package/src/animation/core/react/fluid.ts +197 -0
  173. package/src/animation/core/react/makeFluid.ts +294 -0
  174. package/src/animation/core/react/transforms.ts +90 -0
  175. package/src/animation/core/react/useFluidValue.ts +43 -0
  176. package/src/animation/core/react/useMount.ts +58 -0
  177. package/src/animation/core/types/animation.d.ts +56 -0
  178. package/src/animation/core/types/common.d.ts +4 -0
  179. package/src/animation/core/types/fluid.d.ts +38 -0
  180. package/src/animation/{animationType.ts → lib/animationType.ts} +17 -17
  181. package/src/animation/{getInitialConfig.ts → lib/getInitialConfig.ts} +61 -61
  182. package/src/animation/lib/index.ts +12 -0
  183. package/src/animation/{interpolation.ts → lib/interpolation.ts} +47 -48
  184. package/src/animation/{modules → lib/modules}/AnimatedBlock.ts +8 -8
  185. package/src/animation/{modules → lib/modules}/AnimatedImage.ts +8 -8
  186. package/src/animation/{modules → lib/modules}/AnimatedInline.ts +8 -8
  187. package/src/animation/lib/modules/MountedBlock.tsx +51 -0
  188. package/src/animation/{modules → lib/modules}/ScrollableBlock.tsx +68 -69
  189. package/src/animation/{modules → lib/modules}/TransitionBlock.tsx +28 -29
  190. package/src/animation/{modules → lib/modules}/index.ts +6 -6
  191. package/src/animation/{useAnimatedValue.ts → lib/useAnimatedValue.ts} +60 -71
  192. package/src/animation/{useMountedValue.ts → lib/useMountedValue.ts} +18 -19
  193. package/src/gestures/controllers/DragGesture.ts +178 -177
  194. package/src/gestures/controllers/Gesture.ts +54 -54
  195. package/src/gestures/controllers/MouseMoveGesture.ts +111 -111
  196. package/src/gestures/controllers/ScrollGesture.ts +107 -107
  197. package/src/gestures/controllers/WheelGesture.ts +123 -123
  198. package/src/gestures/controllers/index.ts +4 -4
  199. package/src/gestures/{eventAttacher.ts → helpers/eventAttacher.ts} +67 -67
  200. package/src/gestures/helpers/index.ts +1 -0
  201. package/src/gestures/{math.ts → helpers/math.ts} +120 -120
  202. package/src/gestures/{withDefault.ts → helpers/withDefault.ts} +3 -3
  203. package/src/gestures/hooks/index.ts +5 -5
  204. package/src/gestures/hooks/useDrag.ts +14 -14
  205. package/src/gestures/hooks/useGesture.ts +38 -38
  206. package/src/gestures/hooks/useMouseMove.ts +11 -11
  207. package/src/gestures/hooks/useRecognizer.ts +59 -59
  208. package/src/gestures/hooks/useScroll.ts +11 -11
  209. package/src/gestures/hooks/useWheel.ts +11 -11
  210. package/src/gestures/{types.ts → types/index.d.ts} +49 -49
  211. package/src/hooks/index.ts +3 -3
  212. package/src/hooks/useMeasure.ts +132 -133
  213. package/src/hooks/useOutsideClick.ts +36 -36
  214. package/src/hooks/useWindowDimension.ts +58 -59
  215. package/src/index.ts +42 -5
  216. package/src/utils/delay.ts +9 -9
  217. package/src/utils/index.ts +1 -2
  218. package/tsconfig.json +24 -25
  219. package/src/animation/index.ts +0 -10
  220. package/src/animation/modules/MountedBlock.tsx +0 -25
  221. package/src/gestures/index.ts +0 -2
  222. package/src/utils/isDefined.ts +0 -4
@@ -1,111 +1,111 @@
1
- import { attachEvents } from '../eventAttacher';
2
- import { Vector2 } from '../types';
3
- import { clamp } from '../math';
4
- import { withDefault } from '../withDefault';
5
- import { Gesture } from './Gesture';
6
-
7
- export class MouseMoveGesture extends Gesture {
8
- event?: MouseEvent;
9
- isActiveID?: any;
10
- movement: Vector2 = withDefault(0, 0);
11
- previousMovement: Vector2 = withDefault(0, 0);
12
- velocity: Vector2 = withDefault(0, 0);
13
- direction: Vector2 = withDefault(0, 0);
14
-
15
- // @override
16
- // initialize the events
17
- _initEvents() {
18
- if (this.targetElement) {
19
- this._subscribe = attachEvents(
20
- [this.targetElement],
21
- [['mousemove', this.onMouseMove.bind(this)]]
22
- );
23
- } else if (this.targetElements.length > 0) {
24
- this._subscribe = attachEvents(this.targetElements, [
25
- ['mousemove', this.onMouseMove.bind(this)],
26
- ]);
27
- } else {
28
- this._subscribe = attachEvents(
29
- [window],
30
- [['mousemove', this.onMouseMove.bind(this)]]
31
- );
32
- }
33
- }
34
-
35
- _handleCallback() {
36
- if (this.callback) {
37
- this.callback({
38
- args: [this.currentIndex],
39
- event: this.event,
40
- isMoving: this.isActive,
41
- target: this.event?.target,
42
- mouseX: this.movement.x,
43
- mouseY: this.movement.y,
44
- velocityX: this.velocity.x,
45
- velocityY: this.velocity.y,
46
- directionX: this.direction.x,
47
- directionY: this.direction.y,
48
- });
49
- }
50
- }
51
-
52
- onMouseMove(e: MouseEvent) {
53
- // find current selected element
54
- const currElem = this.targetElements.find((elem: any) => elem === e.target);
55
-
56
- // set args
57
- if (currElem) {
58
- this.currentIndex = this.targetElements.indexOf(currElem);
59
- }
60
-
61
- this.event = e;
62
-
63
- const now: number = Date.now();
64
- const deltaTime = Math.min(now - this.lastTimeStamp, 64);
65
- this.lastTimeStamp = now;
66
- const t = deltaTime / 1000; // seconds
67
-
68
- const x = e.clientX;
69
- const y = e.clientY;
70
-
71
- this.movement = { x, y };
72
-
73
- if (this.isActiveID !== -1) {
74
- this.isActive = true;
75
- clearTimeout(this.isActiveID);
76
- }
77
-
78
- this.isActiveID = setTimeout(() => {
79
- this.isActive = false;
80
- this.direction = { x: 0, y: 0 };
81
- this.velocity = { x: 0, y: 0 };
82
-
83
- this._handleCallback();
84
- }, 250); // Debounce 250 milliseconds
85
-
86
- const diffX = this.movement.x - this.previousMovement.x;
87
- const diffY = this.movement.y - this.previousMovement.y;
88
-
89
- this.direction = {
90
- x: Math.sign(diffX),
91
- y: Math.sign(diffY),
92
- };
93
-
94
- this.velocity = {
95
- x: clamp(
96
- diffX / t / 1000,
97
- -1 * Gesture._VELOCITY_LIMIT,
98
- Gesture._VELOCITY_LIMIT
99
- ),
100
- y: clamp(
101
- diffY / t / 1000,
102
- -1 * Gesture._VELOCITY_LIMIT,
103
- Gesture._VELOCITY_LIMIT
104
- ),
105
- };
106
-
107
- this.previousMovement = { x: this.movement.x, y: this.movement.y };
108
-
109
- this._handleCallback();
110
- }
111
- }
1
+ import { attachEvents } from '../helpers/eventAttacher';
2
+ import { Vector2 } from '../types';
3
+ import { clamp } from '../helpers/math';
4
+ import { withDefault } from '../helpers/withDefault';
5
+ import { Gesture } from './Gesture';
6
+
7
+ export class MouseMoveGesture extends Gesture {
8
+ event?: MouseEvent;
9
+ isActiveID?: any;
10
+ movement: Vector2 = withDefault(0, 0);
11
+ previousMovement: Vector2 = withDefault(0, 0);
12
+ velocity: Vector2 = withDefault(0, 0);
13
+ direction: Vector2 = withDefault(0, 0);
14
+
15
+ // @override
16
+ // initialize the events
17
+ _initEvents() {
18
+ if (this.targetElement) {
19
+ this._subscribe = attachEvents(
20
+ [this.targetElement],
21
+ [['mousemove', this.onMouseMove.bind(this)]]
22
+ );
23
+ } else if (this.targetElements.length > 0) {
24
+ this._subscribe = attachEvents(this.targetElements, [
25
+ ['mousemove', this.onMouseMove.bind(this)],
26
+ ]);
27
+ } else {
28
+ this._subscribe = attachEvents(
29
+ [window],
30
+ [['mousemove', this.onMouseMove.bind(this)]]
31
+ );
32
+ }
33
+ }
34
+
35
+ _handleCallback() {
36
+ if (this.callback) {
37
+ this.callback({
38
+ args: [this.currentIndex],
39
+ event: this.event,
40
+ isMoving: this.isActive,
41
+ target: this.event?.target,
42
+ mouseX: this.movement.x,
43
+ mouseY: this.movement.y,
44
+ velocityX: this.velocity.x,
45
+ velocityY: this.velocity.y,
46
+ directionX: this.direction.x,
47
+ directionY: this.direction.y,
48
+ });
49
+ }
50
+ }
51
+
52
+ onMouseMove(e: MouseEvent) {
53
+ // find current selected element
54
+ const currElem = this.targetElements.find((elem: any) => elem === e.target);
55
+
56
+ // set args
57
+ if (currElem) {
58
+ this.currentIndex = this.targetElements.indexOf(currElem);
59
+ }
60
+
61
+ this.event = e;
62
+
63
+ const now: number = Date.now();
64
+ const deltaTime = Math.min(now - this.lastTimeStamp, 64);
65
+ this.lastTimeStamp = now;
66
+ const t = deltaTime / 1000; // seconds
67
+
68
+ const x = e.clientX;
69
+ const y = e.clientY;
70
+
71
+ this.movement = { x, y };
72
+
73
+ if (this.isActiveID !== -1) {
74
+ this.isActive = true;
75
+ clearTimeout(this.isActiveID);
76
+ }
77
+
78
+ this.isActiveID = setTimeout(() => {
79
+ this.isActive = false;
80
+ this.direction = { x: 0, y: 0 };
81
+ this.velocity = { x: 0, y: 0 };
82
+
83
+ this._handleCallback();
84
+ }, 250); // Debounce 250 milliseconds
85
+
86
+ const diffX = this.movement.x - this.previousMovement.x;
87
+ const diffY = this.movement.y - this.previousMovement.y;
88
+
89
+ this.direction = {
90
+ x: Math.sign(diffX),
91
+ y: Math.sign(diffY),
92
+ };
93
+
94
+ this.velocity = {
95
+ x: clamp(
96
+ diffX / t / 1000,
97
+ -1 * Gesture._VELOCITY_LIMIT,
98
+ Gesture._VELOCITY_LIMIT
99
+ ),
100
+ y: clamp(
101
+ diffY / t / 1000,
102
+ -1 * Gesture._VELOCITY_LIMIT,
103
+ Gesture._VELOCITY_LIMIT
104
+ ),
105
+ };
106
+
107
+ this.previousMovement = { x: this.movement.x, y: this.movement.y };
108
+
109
+ this._handleCallback();
110
+ }
111
+ }
@@ -1,107 +1,107 @@
1
- import { attachEvents } from '../eventAttacher';
2
- import { Vector2 } from '../types';
3
- import { clamp } from '../math';
4
- import { withDefault } from '../withDefault';
5
- import { Gesture } from './Gesture';
6
-
7
- export class ScrollGesture extends Gesture {
8
- isActiveID?: any;
9
- movement: Vector2 = withDefault(0, 0);
10
- previousMovement: Vector2 = withDefault(0, 0);
11
- direction: Vector2 = withDefault(0, 0);
12
- velocity: Vector2 = withDefault(0, 0);
13
-
14
- // @override
15
- // initialize the events
16
- _initEvents() {
17
- if (this.targetElement) {
18
- this._subscribe = attachEvents(
19
- [this.targetElement],
20
- [['scroll', this.scrollElementListener.bind(this)]]
21
- );
22
- } else {
23
- this._subscribe = attachEvents(
24
- [window],
25
- [['scroll', this.scrollListener.bind(this)]]
26
- );
27
- }
28
- }
29
-
30
- _handleCallback() {
31
- if (this.callback) {
32
- this.callback({
33
- isScrolling: this.isActive,
34
- scrollX: this.movement.x,
35
- scrollY: this.movement.y,
36
- velocityX: this.velocity.x,
37
- velocityY: this.velocity.y,
38
- directionX: this.direction.x,
39
- directionY: this.direction.y,
40
- });
41
- }
42
- }
43
-
44
- onScroll({ x, y }: Vector2) {
45
- const now: number = Date.now();
46
- const deltaTime = Math.min(now - this.lastTimeStamp, 64);
47
- this.lastTimeStamp = now;
48
- const t = deltaTime / 1000; // seconds
49
-
50
- this.movement = { x, y };
51
-
52
- // Clear if scrolling
53
- if (this.isActiveID !== -1) {
54
- this.isActive = true;
55
- clearTimeout(this.isActiveID);
56
- }
57
-
58
- this.isActiveID = setTimeout(() => {
59
- this.isActive = false;
60
- this.direction = { x: 0, y: 0 };
61
-
62
- // Reset Velocity
63
- this.velocity = { x: 0, y: 0 };
64
-
65
- this._handleCallback(); // Debounce 250milliseconds
66
- }, 250);
67
-
68
- const diffX = this.movement.x - this.previousMovement.x;
69
- const diffY = this.movement.y - this.previousMovement.y;
70
-
71
- this.direction = {
72
- x: Math.sign(diffX),
73
- y: Math.sign(diffY),
74
- };
75
-
76
- this.velocity = {
77
- x: clamp(
78
- diffX / t / 1000,
79
- -1 * Gesture._VELOCITY_LIMIT,
80
- Gesture._VELOCITY_LIMIT
81
- ),
82
- y: clamp(
83
- diffY / t / 1000,
84
- -1 * Gesture._VELOCITY_LIMIT,
85
- Gesture._VELOCITY_LIMIT
86
- ),
87
- };
88
-
89
- this.previousMovement = {
90
- x: this.movement.x,
91
- y: this.movement.y,
92
- };
93
-
94
- this._handleCallback();
95
- }
96
-
97
- scrollListener() {
98
- const { pageYOffset: y, pageXOffset: x } = window;
99
- this.onScroll({ x, y });
100
- }
101
-
102
- scrollElementListener() {
103
- const x = this.targetElement?.scrollLeft || 0;
104
- const y = this.targetElement?.scrollTop || 0;
105
- this.onScroll({ x, y });
106
- }
107
- }
1
+ import { attachEvents } from '../helpers/eventAttacher';
2
+ import { Vector2 } from '../types';
3
+ import { clamp } from '../helpers/math';
4
+ import { withDefault } from '../helpers/withDefault';
5
+ import { Gesture } from './Gesture';
6
+
7
+ export class ScrollGesture extends Gesture {
8
+ isActiveID?: any;
9
+ movement: Vector2 = withDefault(0, 0);
10
+ previousMovement: Vector2 = withDefault(0, 0);
11
+ direction: Vector2 = withDefault(0, 0);
12
+ velocity: Vector2 = withDefault(0, 0);
13
+
14
+ // @override
15
+ // initialize the events
16
+ _initEvents() {
17
+ if (this.targetElement) {
18
+ this._subscribe = attachEvents(
19
+ [this.targetElement],
20
+ [['scroll', this.scrollElementListener.bind(this)]]
21
+ );
22
+ } else {
23
+ this._subscribe = attachEvents(
24
+ [window],
25
+ [['scroll', this.scrollListener.bind(this)]]
26
+ );
27
+ }
28
+ }
29
+
30
+ _handleCallback() {
31
+ if (this.callback) {
32
+ this.callback({
33
+ isScrolling: this.isActive,
34
+ scrollX: this.movement.x,
35
+ scrollY: this.movement.y,
36
+ velocityX: this.velocity.x,
37
+ velocityY: this.velocity.y,
38
+ directionX: this.direction.x,
39
+ directionY: this.direction.y,
40
+ });
41
+ }
42
+ }
43
+
44
+ onScroll({ x, y }: Vector2) {
45
+ const now: number = Date.now();
46
+ const deltaTime = Math.min(now - this.lastTimeStamp, 64);
47
+ this.lastTimeStamp = now;
48
+ const t = deltaTime / 1000; // seconds
49
+
50
+ this.movement = { x, y };
51
+
52
+ // Clear if scrolling
53
+ if (this.isActiveID !== -1) {
54
+ this.isActive = true;
55
+ clearTimeout(this.isActiveID);
56
+ }
57
+
58
+ this.isActiveID = setTimeout(() => {
59
+ this.isActive = false;
60
+ this.direction = { x: 0, y: 0 };
61
+
62
+ // Reset Velocity
63
+ this.velocity = { x: 0, y: 0 };
64
+
65
+ this._handleCallback(); // Debounce 250milliseconds
66
+ }, 250);
67
+
68
+ const diffX = this.movement.x - this.previousMovement.x;
69
+ const diffY = this.movement.y - this.previousMovement.y;
70
+
71
+ this.direction = {
72
+ x: Math.sign(diffX),
73
+ y: Math.sign(diffY),
74
+ };
75
+
76
+ this.velocity = {
77
+ x: clamp(
78
+ diffX / t / 1000,
79
+ -1 * Gesture._VELOCITY_LIMIT,
80
+ Gesture._VELOCITY_LIMIT
81
+ ),
82
+ y: clamp(
83
+ diffY / t / 1000,
84
+ -1 * Gesture._VELOCITY_LIMIT,
85
+ Gesture._VELOCITY_LIMIT
86
+ ),
87
+ };
88
+
89
+ this.previousMovement = {
90
+ x: this.movement.x,
91
+ y: this.movement.y,
92
+ };
93
+
94
+ this._handleCallback();
95
+ }
96
+
97
+ scrollListener() {
98
+ const { pageYOffset: y, pageXOffset: x } = window;
99
+ this.onScroll({ x, y });
100
+ }
101
+
102
+ scrollElementListener() {
103
+ const x = this.targetElement?.scrollLeft || 0;
104
+ const y = this.targetElement?.scrollTop || 0;
105
+ this.onScroll({ x, y });
106
+ }
107
+ }
@@ -1,123 +1,123 @@
1
- import { attachEvents } from '../eventAttacher';
2
- import { Vector2 } from '../types';
3
- import { clamp } from '../math';
4
- import { withDefault } from '../withDefault';
5
- import { Gesture } from './Gesture';
6
-
7
- const LINE_HEIGHT = 40;
8
- const PAGE_HEIGHT = 800;
9
-
10
- export class WheelGesture extends Gesture {
11
- isActiveID?: any;
12
- movement: Vector2 = withDefault(0, 0);
13
- previousMovement: Vector2 = withDefault(0, 0);
14
- direction: Vector2 = withDefault(0, 0);
15
- velocity: Vector2 = withDefault(0, 0);
16
- delta: Vector2 = withDefault(0, 0);
17
-
18
- // Holds offsets
19
- offset: Vector2 = withDefault(0, 0);
20
- translation: Vector2 = withDefault(0, 0);
21
-
22
- // @override
23
- // initialize the events
24
- _initEvents() {
25
- if (this.targetElement) {
26
- this._subscribe = attachEvents(
27
- [this.targetElement],
28
- [['wheel', this.onWheel.bind(this)]]
29
- );
30
- }
31
- }
32
-
33
- _handleCallback() {
34
- if (this.callback) {
35
- this.callback({
36
- target: this.targetElement,
37
- isWheeling: this.isActive,
38
- deltaX: this.delta.x,
39
- deltaY: this.delta.y,
40
- directionX: this.direction.x,
41
- directionY: this.direction.y,
42
- movementX: this.movement.x,
43
- movementY: this.movement.y,
44
- offsetX: this.offset.x,
45
- offsetY: this.offset.y,
46
- velocityX: this.velocity.x,
47
- velocityY: this.velocity.y,
48
- });
49
- }
50
- }
51
-
52
- onWheel(event: WheelEvent) {
53
- let { deltaX, deltaY, deltaMode } = event;
54
-
55
- const now: number = Date.now();
56
- const deltaTime = Math.min(now - this.lastTimeStamp, 64);
57
- this.lastTimeStamp = now;
58
- const t = deltaTime / 1000; // seconds
59
-
60
- this.isActive = true;
61
-
62
- if (this.isActiveID !== -1) {
63
- this.isActive = true;
64
- clearTimeout(this.isActiveID);
65
- }
66
-
67
- this.isActiveID = setTimeout(() => {
68
- this.isActive = false;
69
- this.translation = { x: this.offset.x, y: this.offset.y };
70
- this._handleCallback();
71
-
72
- this.velocity = { x: 0, y: 0 }; // Reset Velocity
73
- this.movement = { x: 0, y: 0 };
74
- }, 200);
75
-
76
- // normalize wheel values, especially for Firefox
77
- if (deltaMode === 1) {
78
- deltaX *= LINE_HEIGHT;
79
- deltaY *= LINE_HEIGHT;
80
- } else if (deltaMode === 2) {
81
- deltaX *= PAGE_HEIGHT;
82
- deltaY *= PAGE_HEIGHT;
83
- }
84
-
85
- this.delta = { x: deltaX, y: deltaY };
86
- this.movement = {
87
- x: this.movement.x + deltaX,
88
- y: this.movement.y + deltaY,
89
- };
90
- this.offset = {
91
- x: this.translation.x + this.movement.x,
92
- y: this.translation.y + this.movement.y,
93
- };
94
-
95
- const diffX = this.movement.x - this.previousMovement.x;
96
- const diffY = this.movement.y - this.previousMovement.y;
97
-
98
- this.direction = {
99
- x: Math.sign(diffX),
100
- y: Math.sign(diffY),
101
- };
102
-
103
- this.velocity = {
104
- x: clamp(
105
- diffX / t / 1000,
106
- -1 * Gesture._VELOCITY_LIMIT,
107
- Gesture._VELOCITY_LIMIT
108
- ),
109
- y: clamp(
110
- diffY / t / 1000,
111
- -1 * Gesture._VELOCITY_LIMIT,
112
- Gesture._VELOCITY_LIMIT
113
- ),
114
- };
115
-
116
- this.previousMovement = {
117
- x: this.movement.x,
118
- y: this.movement.y,
119
- };
120
-
121
- this._handleCallback();
122
- }
123
- }
1
+ import { attachEvents } from '../helpers/eventAttacher';
2
+ import { Vector2 } from '../types';
3
+ import { clamp } from '../helpers/math';
4
+ import { withDefault } from '../helpers/withDefault';
5
+ import { Gesture } from './Gesture';
6
+
7
+ const LINE_HEIGHT = 40;
8
+ const PAGE_HEIGHT = 800;
9
+
10
+ export class WheelGesture extends Gesture {
11
+ isActiveID?: any;
12
+ movement: Vector2 = withDefault(0, 0);
13
+ previousMovement: Vector2 = withDefault(0, 0);
14
+ direction: Vector2 = withDefault(0, 0);
15
+ velocity: Vector2 = withDefault(0, 0);
16
+ delta: Vector2 = withDefault(0, 0);
17
+
18
+ // Holds offsets
19
+ offset: Vector2 = withDefault(0, 0);
20
+ translation: Vector2 = withDefault(0, 0);
21
+
22
+ // @override
23
+ // initialize the events
24
+ _initEvents() {
25
+ if (this.targetElement) {
26
+ this._subscribe = attachEvents(
27
+ [this.targetElement],
28
+ [['wheel', this.onWheel.bind(this)]]
29
+ );
30
+ }
31
+ }
32
+
33
+ _handleCallback() {
34
+ if (this.callback) {
35
+ this.callback({
36
+ target: this.targetElement,
37
+ isWheeling: this.isActive,
38
+ deltaX: this.delta.x,
39
+ deltaY: this.delta.y,
40
+ directionX: this.direction.x,
41
+ directionY: this.direction.y,
42
+ movementX: this.movement.x,
43
+ movementY: this.movement.y,
44
+ offsetX: this.offset.x,
45
+ offsetY: this.offset.y,
46
+ velocityX: this.velocity.x,
47
+ velocityY: this.velocity.y,
48
+ });
49
+ }
50
+ }
51
+
52
+ onWheel(event: WheelEvent) {
53
+ let { deltaX, deltaY, deltaMode } = event;
54
+
55
+ const now: number = Date.now();
56
+ const deltaTime = Math.min(now - this.lastTimeStamp, 64);
57
+ this.lastTimeStamp = now;
58
+ const t = deltaTime / 1000; // seconds
59
+
60
+ this.isActive = true;
61
+
62
+ if (this.isActiveID !== -1) {
63
+ this.isActive = true;
64
+ clearTimeout(this.isActiveID);
65
+ }
66
+
67
+ this.isActiveID = setTimeout(() => {
68
+ this.isActive = false;
69
+ this.translation = { x: this.offset.x, y: this.offset.y };
70
+ this._handleCallback();
71
+
72
+ this.velocity = { x: 0, y: 0 }; // Reset Velocity
73
+ this.movement = { x: 0, y: 0 };
74
+ }, 200);
75
+
76
+ // normalize wheel values, especially for Firefox
77
+ if (deltaMode === 1) {
78
+ deltaX *= LINE_HEIGHT;
79
+ deltaY *= LINE_HEIGHT;
80
+ } else if (deltaMode === 2) {
81
+ deltaX *= PAGE_HEIGHT;
82
+ deltaY *= PAGE_HEIGHT;
83
+ }
84
+
85
+ this.delta = { x: deltaX, y: deltaY };
86
+ this.movement = {
87
+ x: this.movement.x + deltaX,
88
+ y: this.movement.y + deltaY,
89
+ };
90
+ this.offset = {
91
+ x: this.translation.x + this.movement.x,
92
+ y: this.translation.y + this.movement.y,
93
+ };
94
+
95
+ const diffX = this.movement.x - this.previousMovement.x;
96
+ const diffY = this.movement.y - this.previousMovement.y;
97
+
98
+ this.direction = {
99
+ x: Math.sign(diffX),
100
+ y: Math.sign(diffY),
101
+ };
102
+
103
+ this.velocity = {
104
+ x: clamp(
105
+ diffX / t / 1000,
106
+ -1 * Gesture._VELOCITY_LIMIT,
107
+ Gesture._VELOCITY_LIMIT
108
+ ),
109
+ y: clamp(
110
+ diffY / t / 1000,
111
+ -1 * Gesture._VELOCITY_LIMIT,
112
+ Gesture._VELOCITY_LIMIT
113
+ ),
114
+ };
115
+
116
+ this.previousMovement = {
117
+ x: this.movement.x,
118
+ y: this.movement.y,
119
+ };
120
+
121
+ this._handleCallback();
122
+ }
123
+ }