timingsrc 1.2.16 → 1.4.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 (30) hide show
  1. package/README.md +11 -0
  2. package/build/es2019/factories/default-set-timingsrc.d.ts +1 -1
  3. package/build/es2019/factories/default-set-timingsrc.d.ts.map +1 -1
  4. package/build/es2019/factories/set-timingsrc-with-custom-update-function.d.ts +2 -2
  5. package/build/es2019/factories/set-timingsrc-with-custom-update-function.d.ts.map +1 -1
  6. package/build/es2019/factories/set-timingsrc-with-custom-update-function.js +17 -4
  7. package/build/es2019/factories/set-timingsrc-with-custom-update-function.js.map +1 -1
  8. package/build/es2019/factories/set-timingsrc.d.ts +2 -2
  9. package/build/es2019/factories/set-timingsrc.d.ts.map +1 -1
  10. package/build/es2019/factories/set-timingsrc.js +1 -1
  11. package/build/es2019/factories/set-timingsrc.js.map +1 -1
  12. package/build/es2019/module.d.ts +2 -2
  13. package/build/es2019/module.d.ts.map +1 -1
  14. package/build/es2019/module.js +1 -1
  15. package/build/es2019/module.js.map +1 -1
  16. package/build/es2019/types/index.d.ts +1 -0
  17. package/build/es2019/types/index.d.ts.map +1 -1
  18. package/build/es2019/types/index.js +1 -0
  19. package/build/es2019/types/index.js.map +1 -1
  20. package/build/es2019/types/prepare-update-vector-function.d.ts +3 -0
  21. package/build/es2019/types/prepare-update-vector-function.d.ts.map +1 -0
  22. package/build/es2019/types/prepare-update-vector-function.js +2 -0
  23. package/build/es2019/types/prepare-update-vector-function.js.map +1 -0
  24. package/build/es5/bundle.js +32 -11
  25. package/package.json +4 -4
  26. package/src/factories/set-timingsrc-with-custom-update-function.ts +24 -4
  27. package/src/factories/set-timingsrc.ts +4 -3
  28. package/src/module.ts +2 -0
  29. package/src/types/index.ts +1 -0
  30. package/src/types/prepare-update-vector-function.ts +3 -0
package/README.md CHANGED
@@ -41,6 +41,17 @@ deleteTimingsrc();
41
41
  setTimingsrc(mediaElement, timingObject, ({ position, ...vector }) => ({ ...vector, position: position + 5 }));
42
42
  ```
43
43
 
44
+ It can also be used to set a loop. But in this case it's important to also provide a second function which modifies the vector before it is used to update the media element.
45
+
46
+ ```js
47
+ setTimingsrc(
48
+ mediaElement,
49
+ timingObject,
50
+ ({ position, ...vector }) => ({ ...vector, position: position % 5 }),
51
+ ({ position, ...vector }) => ({ ...vector, position: position % 5 })
52
+ );
53
+ ```
54
+
44
55
  It is also possible to configure a custom version of the `setTimingsrc()` function. The following would build a `setTimingSrc()` function which does not include the fallback for stepwise updates which is necessary in Safari.
45
56
 
46
57
  ```js
@@ -5,5 +5,5 @@ import type { createSetTimingsrcWithCustomUpdateFunction } from './set-timingsrc
5
5
  import type { createUpdateGradually as createUpdateGraduallyFunction } from './update-gradually';
6
6
  import type { createUpdateStepwiseFactory } from './update-stepwise-factory';
7
7
  import type { createWindow } from './window';
8
- export declare const createDefaultSetTimingsrc: (createComputeVelocity: typeof createComputeVelocityFunction, createSetTimingsrc: typeof createSetTimingsrcFunction, createUpdateGradually: typeof createUpdateGraduallyFunction, createUpdateStepwise: ReturnType<typeof createUpdateStepwiseFactory>, determineSupportedPlaybackRateValues: typeof determineSupportedPlaybackRateValuesFunction, setTimingsrcWithCustomUpdateFunction: ReturnType<typeof createSetTimingsrcWithCustomUpdateFunction>, window: ReturnType<typeof createWindow>) => (mediaElement: HTMLMediaElement, timingObject: import("timing-object").ITimingObject, prepareTimingStateVector?: import("../types").TPrepareTimingStateVectorFunction | null) => () => void;
8
+ export declare const createDefaultSetTimingsrc: (createComputeVelocity: typeof createComputeVelocityFunction, createSetTimingsrc: typeof createSetTimingsrcFunction, createUpdateGradually: typeof createUpdateGraduallyFunction, createUpdateStepwise: ReturnType<typeof createUpdateStepwiseFactory>, determineSupportedPlaybackRateValues: typeof determineSupportedPlaybackRateValuesFunction, setTimingsrcWithCustomUpdateFunction: ReturnType<typeof createSetTimingsrcWithCustomUpdateFunction>, window: ReturnType<typeof createWindow>) => (mediaElement: HTMLMediaElement, timingObject: import("timing-object").ITimingObject, prepareTimingStateVector?: import("../types").TPrepareTimingStateVectorFunction | null, prepareUpdateVector?: import("../types").TPrepareUpdateVectorFunction | null) => () => void;
9
9
  //# sourceMappingURL=default-set-timingsrc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-set-timingsrc.d.ts","sourceRoot":"","sources":["../../../src/factories/default-set-timingsrc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oCAAoC,IAAI,4CAA4C,EAAE,MAAM,uDAAuD,CAAC;AAElK,OAAO,KAAK,EAAE,qBAAqB,IAAI,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,kBAAkB,IAAI,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,6CAA6C,CAAC;AAC9G,OAAO,KAAK,EAAE,qBAAqB,IAAI,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAM7C,eAAO,MAAM,yBAAyB,0BACX,oCAAoC,sBACvC,iCAAiC,yBAC9B,oCAAoC,wBACrC,WAAW,kCAAkC,CAAC,wCAC9B,mDAAmD,wCACnD,WAAW,iDAAiD,CAAC,UAC3F,WAAW,mBAAmB,CAAC,gMAa1C,CAAC"}
1
+ {"version":3,"file":"default-set-timingsrc.d.ts","sourceRoot":"","sources":["../../../src/factories/default-set-timingsrc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oCAAoC,IAAI,4CAA4C,EAAE,MAAM,uDAAuD,CAAC;AAElK,OAAO,KAAK,EAAE,qBAAqB,IAAI,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,kBAAkB,IAAI,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,6CAA6C,CAAC;AAC9G,OAAO,KAAK,EAAE,qBAAqB,IAAI,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAM7C,eAAO,MAAM,yBAAyB,0BACX,oCAAoC,sBACvC,iCAAiC,yBAC9B,oCAAoC,wBACrC,WAAW,kCAAkC,CAAC,wCAC9B,mDAAmD,wCACnD,WAAW,iDAAiD,CAAC,UAC3F,WAAW,mBAAmB,CAAC,8QAa1C,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { TAnimationFrameFunction, TOnFunction } from 'subscribable-things';
2
2
  import type { ITimingObject } from 'timing-object';
3
3
  import { IUpdateVector } from '../interfaces';
4
- import { TPrepareTimingStateVectorFunction, TUpdateFunction } from '../types';
4
+ import { TPrepareTimingStateVectorFunction, TPrepareUpdateVectorFunction, TUpdateFunction } from '../types';
5
5
  import type { createUpdateMediaElement } from './update-media-element';
6
- export declare const createSetTimingsrcWithCustomUpdateFunction: (animationFrame: TAnimationFrameFunction, document: Document, on: TOnFunction, updateMediaElement: ReturnType<typeof createUpdateMediaElement>) => <UpdateVectorWithCustomState extends IUpdateVector>(mediaElement: HTMLMediaElement, timingObject: ITimingObject, updateFunction: TUpdateFunction<UpdateVectorWithCustomState>, prepareTimingStateVector?: null | TPrepareTimingStateVectorFunction) => () => void;
6
+ export declare const createSetTimingsrcWithCustomUpdateFunction: (animationFrame: TAnimationFrameFunction, clearInterval: Window['clearInterval'], document: Document, on: TOnFunction, setInterval: Window['setInterval'], updateMediaElement: ReturnType<typeof createUpdateMediaElement>) => <UpdateVectorWithCustomState extends IUpdateVector>(mediaElement: HTMLMediaElement, timingObject: ITimingObject, updateFunction: TUpdateFunction<UpdateVectorWithCustomState>, prepareTimingStateVector?: null | TPrepareTimingStateVectorFunction, prepareUpdateVector?: null | TPrepareUpdateVectorFunction) => () => void;
7
7
  //# sourceMappingURL=set-timingsrc-with-custom-update-function.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-timingsrc-with-custom-update-function.d.ts","sourceRoot":"","sources":["../../../src/factories/set-timingsrc-with-custom-update-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,eAAO,MAAM,0CAA0C,mBACnC,uBAAuB,YAC7B,QAAQ,MACd,WAAW,sBACK,WAAW,+BAA+B,CAAC,uEAG7C,gBAAgB,gBAChB,aAAa,2FAED,IAAI,GAAG,iCAAiC,eA8DzE,CAAC"}
1
+ {"version":3,"file":"set-timingsrc-with-custom-update-function.d.ts","sourceRoot":"","sources":["../../../src/factories/set-timingsrc-with-custom-update-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC5G,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,eAAO,MAAM,0CAA0C,mBACnC,uBAAuB,iBACxB,MAAM,CAAC,eAAe,CAAC,YAC5B,QAAQ,MACd,WAAW,eACF,MAAM,CAAC,aAAa,CAAC,sBACd,WAAW,+BAA+B,CAAC,uEAG7C,gBAAgB,gBAChB,aAAa,2FAED,IAAI,GAAG,iCAAiC,wBAC7C,IAAI,GAAG,4BAA4B,eA+E/D,CAAC"}
@@ -1,12 +1,15 @@
1
- export const createSetTimingsrcWithCustomUpdateFunction = (animationFrame, document, on, updateMediaElement) => {
2
- return (mediaElement, timingObject, updateFunction, prepareTimingStateVector = null) => {
1
+ export const createSetTimingsrcWithCustomUpdateFunction = (animationFrame, clearInterval, document, on, setInterval, updateMediaElement) => {
2
+ return (mediaElement, timingObject, updateFunction, prepareTimingStateVector = null, prepareUpdateVector = null) => {
3
3
  let previousUpdateVectorWithCustomState = null;
4
4
  const update = () => {
5
5
  const { currentTime, duration, playbackRate } = mediaElement;
6
6
  const timingStateVector = timingObject.query();
7
7
  previousUpdateVectorWithCustomState = updateFunction(prepareTimingStateVector === null ? timingStateVector : prepareTimingStateVector(timingStateVector), currentTime, previousUpdateVectorWithCustomState);
8
8
  const sanitizedDuration = typeof duration === 'number' && !isNaN(duration) ? duration : 0;
9
- const { position, velocity } = previousUpdateVectorWithCustomState;
9
+ const { position, velocity } = prepareUpdateVector === null
10
+ ? previousUpdateVectorWithCustomState
11
+ : prepareUpdateVector(previousUpdateVectorWithCustomState);
12
+ previousUpdateVectorWithCustomState = { ...previousUpdateVectorWithCustomState, position, velocity };
10
13
  updateMediaElement(currentTime, sanitizedDuration, mediaElement, playbackRate, position, velocity);
11
14
  return velocity !== 0;
12
15
  };
@@ -18,10 +21,20 @@ export const createSetTimingsrcWithCustomUpdateFunction = (animationFrame, docum
18
21
  }
19
22
  };
20
23
  const updateConsistently = () => {
24
+ let intervalId = setInterval(() => updateOnce(), 100);
25
+ const restartInterval = () => {
26
+ clearInterval(intervalId);
27
+ intervalId = setInterval(() => updateOnce(), 100);
28
+ };
21
29
  const unsubscribeFunctions = [
22
- animationFrame()(() => updateOnce()),
30
+ () => clearInterval(intervalId),
31
+ animationFrame()(() => {
32
+ restartInterval();
33
+ updateOnce();
34
+ }),
23
35
  on(timingObject, 'change')(() => {
24
36
  if (document.visibilityState === 'hidden') {
37
+ restartInterval();
25
38
  updateOnce();
26
39
  }
27
40
  })
@@ -1 +1 @@
1
- {"version":3,"file":"set-timingsrc-with-custom-update-function.js","sourceRoot":"","sources":["../../../src/factories/set-timingsrc-with-custom-update-function.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,0CAA0C,GAAG,CACtD,cAAuC,EACvC,QAAkB,EAClB,EAAe,EACf,kBAA+D,EACjE,EAAE;IACA,OAAO,CACH,YAA8B,EAC9B,YAA2B,EAC3B,cAA4D,EAC5D,2BAAqE,IAAI,EAC3E,EAAE;QACA,IAAI,mCAAmC,GAAuC,IAAI,CAAC;QAEnF,MAAM,MAAM,GAAG,GAAG,EAAE;YAChB,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC;YAC7D,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;YAE/C,mCAAmC,GAAG,cAAc,CAChD,wBAAwB,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,EACnG,WAAW,EACX,mCAAmC,CACtC,CAAC;YAEF,MAAM,iBAAiB,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,mCAAmC,CAAC;YAEnE,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEnG,OAAO,QAAQ,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,IAAI,WAAuB,CAAC;QAE5B,MAAM,UAAU,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,MAAM,EAAE,EAAE;gBACX,WAAW,EAAE,CAAC;gBAEd,WAAW,GAAG,gBAAgB,EAAE,CAAC;aACpC;QACL,CAAC,CAAC;QACF,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC5B,MAAM,oBAAoB,GAAG;gBACzB,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;gBACpC,EAAE,CACE,YAAY,EACZ,QAAQ,CACX,CAAC,GAAG,EAAE;oBACH,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,EAAE;wBACvC,UAAU,EAAE,CAAC;qBAChB;gBACL,CAAC,CAAC;aACL,CAAC;YAEF,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC9F,CAAC,CAAC;QACF,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAC1B,EAAE,CACE,YAAY,EACZ,QAAQ,CACX,CAAC,GAAG,EAAE;YACH,IAAI,MAAM,EAAE,EAAE;gBACV,WAAW,EAAE,CAAC;gBAEd,WAAW,GAAG,kBAAkB,EAAE,CAAC;aACtC;QACL,CAAC,CAAC,CAAC;QAEP,WAAW,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEnE,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"set-timingsrc-with-custom-update-function.js","sourceRoot":"","sources":["../../../src/factories/set-timingsrc-with-custom-update-function.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { ITimingObject } from 'timing-object';
2
2
  import type { createSetTimingsrcWithCustomUpdateFunction } from '../factories/set-timingsrc-with-custom-update-function';
3
3
  import { IUpdateVector } from '../interfaces';
4
- import { TPrepareTimingStateVectorFunction, TUpdateFunction } from '../types';
5
- export declare const createSetTimingsrc: <UpdateVectorWithCustomState extends IUpdateVector>(setTimingsrcWithCustomUpdateFunction: ReturnType<typeof createSetTimingsrcWithCustomUpdateFunction>, update: TUpdateFunction<UpdateVectorWithCustomState>) => (mediaElement: HTMLMediaElement, timingObject: ITimingObject, prepareTimingStateVector?: null | TPrepareTimingStateVectorFunction) => () => void;
4
+ import { TPrepareTimingStateVectorFunction, TPrepareUpdateVectorFunction, TUpdateFunction } from '../types';
5
+ export declare const createSetTimingsrc: <UpdateVectorWithCustomState extends IUpdateVector>(setTimingsrcWithCustomUpdateFunction: ReturnType<typeof createSetTimingsrcWithCustomUpdateFunction>, update: TUpdateFunction<UpdateVectorWithCustomState>) => (mediaElement: HTMLMediaElement, timingObject: ITimingObject, prepareTimingStateVector?: null | TPrepareTimingStateVectorFunction, prepareUpdateVector?: null | TPrepareUpdateVectorFunction) => () => void;
6
6
  //# sourceMappingURL=set-timingsrc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-timingsrc.d.ts","sourceRoot":"","sources":["../../../src/factories/set-timingsrc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,wDAAwD,CAAC;AACzH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE9E,eAAO,MAAM,kBAAkB,4FAEe,WAAW,iDAAiD,CAAC,0EAIrF,gBAAgB,gBAChB,aAAa,6BACD,IAAI,GAAG,iCAAiC,eAEgC,CAAC"}
1
+ {"version":3,"file":"set-timingsrc.d.ts","sourceRoot":"","sources":["../../../src/factories/set-timingsrc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,wDAAwD,CAAC;AACzH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE5G,eAAO,MAAM,kBAAkB,4FAEe,WAAW,iDAAiD,CAAC,0EAIrF,gBAAgB,gBAChB,aAAa,6BACD,IAAI,GAAG,iCAAiC,wBAC7C,IAAI,GAAG,4BAA4B,eAE+D,CAAC"}
@@ -1,2 +1,2 @@
1
- export const createSetTimingsrc = (setTimingsrcWithCustomUpdateFunction, update) => (mediaElement, timingObject, prepareTimingStateVector = null) => setTimingsrcWithCustomUpdateFunction(mediaElement, timingObject, update, prepareTimingStateVector);
1
+ export const createSetTimingsrc = (setTimingsrcWithCustomUpdateFunction, update) => (mediaElement, timingObject, prepareTimingStateVector = null, prepareUpdateVector = null) => setTimingsrcWithCustomUpdateFunction(mediaElement, timingObject, update, prepareTimingStateVector, prepareUpdateVector);
2
2
  //# sourceMappingURL=set-timingsrc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-timingsrc.js","sourceRoot":"","sources":["../../../src/factories/set-timingsrc.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,kBAAkB,GAC3B,CACI,oCAAmG,EACnG,MAAoD,EACtD,EAAE,CACJ,CACI,YAA8B,EAC9B,YAA2B,EAC3B,2BAAqE,IAAI,EAC3E,EAAE,CACA,oCAAoC,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"set-timingsrc.js","sourceRoot":"","sources":["../../../src/factories/set-timingsrc.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,kBAAkB,GAC3B,CACI,oCAAmG,EACnG,MAAoD,EACtD,EAAE,CACJ,CACI,YAA8B,EAC9B,YAA2B,EAC3B,2BAAqE,IAAI,EACzE,sBAA2D,IAAI,EACjE,EAAE,CACA,oCAAoC,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,wBAAwB,EAAE,mBAAmB,CAAC,CAAC"}
@@ -11,6 +11,6 @@ export declare const createUpdateStepwise: (tolerance: number) => import("./type
11
11
  numberOfDetectedResets: number;
12
12
  numberOfExpectedResets: number;
13
13
  }>;
14
- export declare const setTimingsrcWithCustomUpdateFunction: <UpdateVectorWithCustomState extends import("./interfaces").IUpdateVector>(mediaElement: HTMLMediaElement, timingObject: import("timing-object").ITimingObject, updateFunction: import("./types").TUpdateFunction<UpdateVectorWithCustomState>, prepareTimingStateVector?: import("./types").TPrepareTimingStateVectorFunction | null) => () => void;
15
- export declare const setTimingsrc: (mediaElement: HTMLMediaElement, timingObject: import("timing-object").ITimingObject, prepareTimingStateVector?: import("./types").TPrepareTimingStateVectorFunction | null) => () => void;
14
+ export declare const setTimingsrcWithCustomUpdateFunction: <UpdateVectorWithCustomState extends import("./interfaces").IUpdateVector>(mediaElement: HTMLMediaElement, timingObject: import("timing-object").ITimingObject, updateFunction: import("./types").TUpdateFunction<UpdateVectorWithCustomState>, prepareTimingStateVector?: import("./types").TPrepareTimingStateVectorFunction | null, prepareUpdateVector?: import("./types").TPrepareUpdateVectorFunction | null) => () => void;
15
+ export declare const setTimingsrc: (mediaElement: HTMLMediaElement, timingObject: import("timing-object").ITimingObject, prepareTimingStateVector?: import("./types").TPrepareTimingStateVectorFunction | null, prepareUpdateVector?: import("./types").TPrepareUpdateVectorFunction | null) => () => void;
16
16
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQrE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,eAAO,MAAM,oBAAoB;;;;;;;;EAA0D,CAAC;AAS5F,eAAO,MAAM,oCAAoC,sVAKhD,CAAC;AAEF,eAAO,MAAM,YAAY,4LAQxB,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQrE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,eAAO,MAAM,oBAAoB;;;;;;;;EAA0D,CAAC;AAS5F,eAAO,MAAM,oCAAoC,maAOhD,CAAC;AAEF,eAAO,MAAM,YAAY,yQAQxB,CAAC"}
@@ -17,6 +17,6 @@ export { createSetTimingsrc };
17
17
  export { createUpdateGradually };
18
18
  export const createUpdateStepwise = createUpdateStepwiseFactory(translateTimingStateVector);
19
19
  const updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(881 / 882, new WeakMap(), 882 / 881));
20
- export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(animationFrame, document, on, updateMediaElement);
20
+ export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(animationFrame, clearInterval, document, on, setInterval, updateMediaElement);
21
21
  export const setTimingsrc = createDefaultSetTimingsrc(createComputeVelocity, createSetTimingsrc, createUpdateGradually, createUpdateStepwise, determineSupportedPlaybackRateValues, setTimingsrcWithCustomUpdateFunction, createWindow());
22
22
  //# sourceMappingURL=module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0CAA0C,EAAE,MAAM,uDAAuD,CAAC;AACnH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oCAAoC,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,0BAA0B,CAAC,CAAC;AAE5F,MAAM,kBAAkB,GAAG,wBAAwB,CAC/C,KAAK,EACL,IAAI,EACJ,oBAAoB,CAAC,IAAI,OAAO,EAAE,CAAC,EACnC,qBAAqB,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,OAAO,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAC7D,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,0CAA0C,CAC1F,cAAc,EACd,QAAQ,EACR,EAAE,EACF,kBAAkB,CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CACjD,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oCAAoC,EACpC,oCAAoC,EACpC,YAAY,EAAE,CACjB,CAAC"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0CAA0C,EAAE,MAAM,uDAAuD,CAAC;AACnH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oCAAoC,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,0BAA0B,CAAC,CAAC;AAE5F,MAAM,kBAAkB,GAAG,wBAAwB,CAC/C,KAAK,EACL,IAAI,EACJ,oBAAoB,CAAC,IAAI,OAAO,EAAE,CAAC,EACnC,qBAAqB,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,OAAO,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAC7D,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,0CAA0C,CAC1F,cAAc,EACd,aAAa,EACb,QAAQ,EACR,EAAE,EACF,WAAW,EACX,kBAAkB,CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CACjD,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oCAAoC,EACpC,oCAAoC,EACpC,YAAY,EAAE,CACjB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './prepare-timing-state-vector-function';
2
+ export * from './prepare-update-vector-function';
2
3
  export * from './update-function';
3
4
  export * from './update-vector-with-custom-state';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './prepare-timing-state-vector-function';
2
+ export * from './prepare-update-vector-function';
2
3
  export * from './update-function';
3
4
  export * from './update-vector-with-custom-state';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { IUpdateVector } from '../interfaces';
2
+ export type TPrepareUpdateVectorFunction = (updateVector: IUpdateVector) => IUpdateVector;
3
+ //# sourceMappingURL=prepare-update-vector-function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare-update-vector-function.d.ts","sourceRoot":"","sources":["../../../src/types/prepare-update-vector-function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,MAAM,4BAA4B,GAAG,CAAC,YAAY,EAAE,aAAa,KAAK,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prepare-update-vector-function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare-update-vector-function.js","sourceRoot":"","sources":["../../../src/types/prepare-update-vector-function.ts"],"names":[],"mappings":""}
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('subscribable-things'), require('timing-object'), require('@babel/runtime/helpers/slicedToArray')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'subscribable-things', 'timing-object', '@babel/runtime/helpers/slicedToArray'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.timingsrc = {}, global.subscribableThings, global.timingObject, global._slicedToArray));
5
- })(this, (function (exports, subscribableThings, timingObject, _slicedToArray) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('subscribable-things'), require('timing-object'), require('@babel/runtime/helpers/defineProperty'), require('@babel/runtime/helpers/slicedToArray')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'subscribable-things', 'timing-object', '@babel/runtime/helpers/defineProperty', '@babel/runtime/helpers/slicedToArray'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.timingsrc = {}, global.subscribableThings, global.timingObject, global._defineProperty, global._slicedToArray));
5
+ })(this, (function (exports, subscribableThings, timingObject, _defineProperty, _slicedToArray) { 'use strict';
6
6
 
7
7
  var createComputeVelocity = function createComputeVelocity(timeConstant) {
8
8
  return function (delta, minValue, maxValue, velocity) {
@@ -45,13 +45,17 @@
45
45
  var createSetTimingsrc = function createSetTimingsrc(setTimingsrcWithCustomUpdateFunction, update) {
46
46
  return function (mediaElement, timingObject) {
47
47
  var prepareTimingStateVector = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
48
- return setTimingsrcWithCustomUpdateFunction(mediaElement, timingObject, update, prepareTimingStateVector);
48
+ var prepareUpdateVector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
49
+ return setTimingsrcWithCustomUpdateFunction(mediaElement, timingObject, update, prepareTimingStateVector, prepareUpdateVector);
49
50
  };
50
51
  };
51
52
 
52
- var createSetTimingsrcWithCustomUpdateFunction = function createSetTimingsrcWithCustomUpdateFunction(animationFrame, document, on, updateMediaElement) {
53
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
54
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
55
+ var createSetTimingsrcWithCustomUpdateFunction = function createSetTimingsrcWithCustomUpdateFunction(animationFrame, clearInterval, document, on, setInterval, updateMediaElement) {
53
56
  return function (mediaElement, timingObject, updateFunction) {
54
57
  var prepareTimingStateVector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
58
+ var prepareUpdateVector = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
55
59
  var previousUpdateVectorWithCustomState = null;
56
60
  var update = function update() {
57
61
  var currentTime = mediaElement.currentTime,
@@ -60,9 +64,13 @@
60
64
  var timingStateVector = timingObject.query();
61
65
  previousUpdateVectorWithCustomState = updateFunction(prepareTimingStateVector === null ? timingStateVector : prepareTimingStateVector(timingStateVector), currentTime, previousUpdateVectorWithCustomState);
62
66
  var sanitizedDuration = typeof duration === 'number' && !isNaN(duration) ? duration : 0;
63
- var _previousUpdateVector = previousUpdateVectorWithCustomState,
64
- position = _previousUpdateVector.position,
65
- velocity = _previousUpdateVector.velocity;
67
+ var _ref = prepareUpdateVector === null ? previousUpdateVectorWithCustomState : prepareUpdateVector(previousUpdateVectorWithCustomState),
68
+ position = _ref.position,
69
+ velocity = _ref.velocity;
70
+ previousUpdateVectorWithCustomState = _objectSpread(_objectSpread({}, previousUpdateVectorWithCustomState), {}, {
71
+ position: position,
72
+ velocity: velocity
73
+ });
66
74
  updateMediaElement(currentTime, sanitizedDuration, mediaElement, playbackRate, position, velocity);
67
75
  return velocity !== 0;
68
76
  };
@@ -74,10 +82,23 @@
74
82
  }
75
83
  };
76
84
  var updateConsistently = function updateConsistently() {
77
- var unsubscribeFunctions = [animationFrame()(function () {
85
+ var intervalId = setInterval(function () {
78
86
  return updateOnce();
87
+ }, 100);
88
+ var restartInterval = function restartInterval() {
89
+ clearInterval(intervalId);
90
+ intervalId = setInterval(function () {
91
+ return updateOnce();
92
+ }, 100);
93
+ };
94
+ var unsubscribeFunctions = [function () {
95
+ return clearInterval(intervalId);
96
+ }, animationFrame()(function () {
97
+ restartInterval();
98
+ updateOnce();
79
99
  }), on(timingObject, 'change')(function () {
80
100
  if (document.visibilityState === 'hidden') {
101
+ restartInterval();
81
102
  updateOnce();
82
103
  }
83
104
  })];
@@ -365,7 +386,7 @@
365
386
 
366
387
  var createUpdateStepwise = createUpdateStepwiseFactory(timingObject.translateTimingStateVector);
367
388
  var updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(881 / 882, new WeakMap(), 882 / 881));
368
- var setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(subscribableThings.animationFrame, document, subscribableThings.on, updateMediaElement);
389
+ var setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(subscribableThings.animationFrame, clearInterval, document, subscribableThings.on, setInterval, updateMediaElement);
369
390
  var setTimingsrc = createDefaultSetTimingsrc(createComputeVelocity, createSetTimingsrc, createUpdateGradually, createUpdateStepwise, determineSupportedPlaybackRateValues, setTimingsrcWithCustomUpdateFunction, createWindow());
370
391
 
371
392
  exports.createSetTimingsrc = createSetTimingsrc;
package/package.json CHANGED
@@ -27,7 +27,7 @@
27
27
  "commitizen": "^4.3.0",
28
28
  "cz-conventional-changelog": "^3.3.0",
29
29
  "eslint": "^8.33.0",
30
- "eslint-config-holy-grail": "^55.0.6",
30
+ "eslint-config-holy-grail": "^55.0.8",
31
31
  "grunt": "^1.6.1",
32
32
  "grunt-cli": "^1.4.3",
33
33
  "grunt-sh": "^0.2.0",
@@ -42,10 +42,10 @@
42
42
  "karma-webpack": "^5.0.0",
43
43
  "load-grunt-config": "^4.0.1",
44
44
  "mocha": "^10.2.0",
45
- "prettier": "^2.8.3",
45
+ "prettier": "^2.8.4",
46
46
  "pretty-quick": "^3.1.3",
47
47
  "rimraf": "^4.1.2",
48
- "rollup": "^3.12.1",
48
+ "rollup": "^3.14.0",
49
49
  "sinon": "^15.0.1",
50
50
  "sinon-chai": "^3.7.0",
51
51
  "ts-loader": "^9.4.2",
@@ -75,5 +75,5 @@
75
75
  "test": "grunt lint && grunt test"
76
76
  },
77
77
  "types": "build/es2019/module.d.ts",
78
- "version": "1.2.16"
78
+ "version": "1.4.0"
79
79
  }
@@ -1,20 +1,23 @@
1
1
  import type { TAnimationFrameFunction, TOnFunction } from 'subscribable-things';
2
2
  import type { ITimingObject } from 'timing-object';
3
3
  import { IUpdateVector } from '../interfaces';
4
- import { TPrepareTimingStateVectorFunction, TUpdateFunction } from '../types';
4
+ import { TPrepareTimingStateVectorFunction, TPrepareUpdateVectorFunction, TUpdateFunction } from '../types';
5
5
  import type { createUpdateMediaElement } from './update-media-element';
6
6
 
7
7
  export const createSetTimingsrcWithCustomUpdateFunction = (
8
8
  animationFrame: TAnimationFrameFunction,
9
+ clearInterval: Window['clearInterval'],
9
10
  document: Document,
10
11
  on: TOnFunction,
12
+ setInterval: Window['setInterval'],
11
13
  updateMediaElement: ReturnType<typeof createUpdateMediaElement>
12
14
  ) => {
13
15
  return <UpdateVectorWithCustomState extends IUpdateVector>(
14
16
  mediaElement: HTMLMediaElement,
15
17
  timingObject: ITimingObject,
16
18
  updateFunction: TUpdateFunction<UpdateVectorWithCustomState>,
17
- prepareTimingStateVector: null | TPrepareTimingStateVectorFunction = null
19
+ prepareTimingStateVector: null | TPrepareTimingStateVectorFunction = null,
20
+ prepareUpdateVector: null | TPrepareUpdateVectorFunction = null
18
21
  ) => {
19
22
  let previousUpdateVectorWithCustomState: null | UpdateVectorWithCustomState = null;
20
23
 
@@ -29,7 +32,12 @@ export const createSetTimingsrcWithCustomUpdateFunction = (
29
32
  );
30
33
 
31
34
  const sanitizedDuration = typeof duration === 'number' && !isNaN(duration) ? duration : 0;
32
- const { position, velocity } = previousUpdateVectorWithCustomState;
35
+ const { position, velocity } =
36
+ prepareUpdateVector === null
37
+ ? previousUpdateVectorWithCustomState
38
+ : prepareUpdateVector(previousUpdateVectorWithCustomState);
39
+
40
+ previousUpdateVectorWithCustomState = { ...previousUpdateVectorWithCustomState, position, velocity };
33
41
 
34
42
  updateMediaElement(currentTime, sanitizedDuration, mediaElement, playbackRate, position, velocity);
35
43
 
@@ -46,13 +54,25 @@ export const createSetTimingsrcWithCustomUpdateFunction = (
46
54
  }
47
55
  };
48
56
  const updateConsistently = () => {
57
+ let intervalId = setInterval(() => updateOnce(), 100);
58
+
59
+ const restartInterval = () => {
60
+ clearInterval(intervalId);
61
+
62
+ intervalId = setInterval(() => updateOnce(), 100);
63
+ };
49
64
  const unsubscribeFunctions = [
50
- animationFrame()(() => updateOnce()),
65
+ () => clearInterval(intervalId),
66
+ animationFrame()(() => {
67
+ restartInterval();
68
+ updateOnce();
69
+ }),
51
70
  on(
52
71
  timingObject,
53
72
  'change'
54
73
  )(() => {
55
74
  if (document.visibilityState === 'hidden') {
75
+ restartInterval();
56
76
  updateOnce();
57
77
  }
58
78
  })
@@ -1,7 +1,7 @@
1
1
  import type { ITimingObject } from 'timing-object';
2
2
  import type { createSetTimingsrcWithCustomUpdateFunction } from '../factories/set-timingsrc-with-custom-update-function';
3
3
  import { IUpdateVector } from '../interfaces';
4
- import { TPrepareTimingStateVectorFunction, TUpdateFunction } from '../types';
4
+ import { TPrepareTimingStateVectorFunction, TPrepareUpdateVectorFunction, TUpdateFunction } from '../types';
5
5
 
6
6
  export const createSetTimingsrc =
7
7
  <UpdateVectorWithCustomState extends IUpdateVector>(
@@ -11,6 +11,7 @@ export const createSetTimingsrc =
11
11
  (
12
12
  mediaElement: HTMLMediaElement,
13
13
  timingObject: ITimingObject,
14
- prepareTimingStateVector: null | TPrepareTimingStateVectorFunction = null
14
+ prepareTimingStateVector: null | TPrepareTimingStateVectorFunction = null,
15
+ prepareUpdateVector: null | TPrepareUpdateVectorFunction = null
15
16
  ) =>
16
- setTimingsrcWithCustomUpdateFunction(mediaElement, timingObject, update, prepareTimingStateVector);
17
+ setTimingsrcWithCustomUpdateFunction(mediaElement, timingObject, update, prepareTimingStateVector, prepareUpdateVector);
package/src/module.ts CHANGED
@@ -29,8 +29,10 @@ const updateMediaElement = createUpdateMediaElement(
29
29
 
30
30
  export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(
31
31
  animationFrame,
32
+ clearInterval,
32
33
  document,
33
34
  on,
35
+ setInterval,
34
36
  updateMediaElement
35
37
  );
36
38
 
@@ -1,3 +1,4 @@
1
1
  export * from './prepare-timing-state-vector-function';
2
+ export * from './prepare-update-vector-function';
2
3
  export * from './update-function';
3
4
  export * from './update-vector-with-custom-state';
@@ -0,0 +1,3 @@
1
+ import { IUpdateVector } from '../interfaces';
2
+
3
+ export type TPrepareUpdateVectorFunction = (updateVector: IUpdateVector) => IUpdateVector;