timingsrc 1.1.29 → 1.2.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.
@@ -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,EAAE,4CAA4C,EAAE,MAAM,UAAU,CAAC;AAExE,eAAO,MAAM,0CAA0C,EAAE,4CAgBxD,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,EAAE,4CAA4C,EAAE,MAAM,UAAU,CAAC;AAExE,eAAO,MAAM,0CAA0C,EAAE,4CAiCxD,CAAC"}
@@ -1,10 +1,21 @@
1
- export const createSetTimingsrcWithCustomUpdateFunction = (animationFrame, updateMediaElement) => {
2
- return (mediaElement, timingObject, updateFunction, prepareTimingStateVector = null) => animationFrame()(() => {
3
- const { currentTime, duration, playbackRate } = mediaElement;
4
- const timingStateVector = timingObject.query();
5
- const { position, velocity } = updateFunction(prepareTimingStateVector === null ? timingStateVector : prepareTimingStateVector(timingStateVector), currentTime);
6
- const sanitizedDuration = typeof duration === 'number' && !isNaN(duration) ? duration : 0;
7
- updateMediaElement(currentTime, sanitizedDuration, mediaElement, playbackRate, position, velocity);
8
- });
1
+ export const createSetTimingsrcWithCustomUpdateFunction = (animationFrame, document, on, updateMediaElement) => {
2
+ return (mediaElement, timingObject, updateFunction, prepareTimingStateVector = null) => {
3
+ const update = () => {
4
+ const { currentTime, duration, playbackRate } = mediaElement;
5
+ const timingStateVector = timingObject.query();
6
+ const { position, velocity } = updateFunction(prepareTimingStateVector === null ? timingStateVector : prepareTimingStateVector(timingStateVector), currentTime);
7
+ const sanitizedDuration = typeof duration === 'number' && !isNaN(duration) ? duration : 0;
8
+ updateMediaElement(currentTime, sanitizedDuration, mediaElement, playbackRate, position, velocity);
9
+ };
10
+ const unsubscribeFunctions = [
11
+ animationFrame()(() => update()),
12
+ on(timingObject, 'update')(() => {
13
+ if (document.visibilityState === 'hidden') {
14
+ update();
15
+ }
16
+ })
17
+ ];
18
+ return () => unsubscribeFunctions.forEach((unsubscribe) => unsubscribe());
19
+ };
9
20
  };
10
21
  //# sourceMappingURL=set-timingsrc-with-custom-update-function.js.map
@@ -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":"AAEA,MAAM,CAAC,MAAM,0CAA0C,GAAiD,CACpG,cAAc,EACd,kBAAkB,EACpB,EAAE;IACA,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,GAAG,IAAI,EAAE,EAAE,CACnF,cAAc,EAAE,CAAC,GAAG,EAAE;QAClB,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC;QAC7D,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;QAC/C,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,CACzC,wBAAwB,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,EACnG,WAAW,CACd,CAAC;QACF,MAAM,iBAAiB,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1F,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACX,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":"AAEA,MAAM,CAAC,MAAM,0CAA0C,GAAiD,CACpG,cAAc,EACd,QAAQ,EACR,EAAE,EACF,kBAAkB,EACpB,EAAE;IACA,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,GAAG,IAAI,EAAE,EAAE;QACnF,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;YAC/C,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,CACzC,wBAAwB,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,EACnG,WAAW,CACd,CAAC;YACF,MAAM,iBAAiB,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1F,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvG,CAAC,CAAC;QAEF,MAAM,oBAAoB,GAAG;YACzB,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;YAChC,EAAE,CACE,YAAY,EACZ,QAAQ,CACX,CAAC,GAAG,EAAE;gBACH,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,EAAE;oBACvC,MAAM,EAAE,CAAC;iBACZ;YACL,CAAC,CAAC;SACL,CAAC;QAEF,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC;AACN,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAOrE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,eAAO,MAAM,oBAAoB,0CAA0D,CAAC;AAI5F,eAAO,MAAM,oCAAoC,iEAAiF,CAAC;AAEnI,eAAO,MAAM,YAAY,yCAMxB,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAOrE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,eAAO,MAAM,oBAAoB,0CAA0D,CAAC;AAI5F,eAAO,MAAM,oCAAoC,iEAKhD,CAAC;AAEF,eAAO,MAAM,YAAY,yCAMxB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { animationFrame } from 'subscribable-things';
1
+ import { animationFrame, on } from 'subscribable-things';
2
2
  import { translateTimingStateVector } from 'timing-object';
3
3
  import { createDefaultSetTimingsrc } from './factories/default-set-timingsrc';
4
4
  import { createSetCurrentTime } from './factories/set-current-time';
@@ -15,6 +15,6 @@ export { createSetTimingsrc };
15
15
  export { createUpdateGradually };
16
16
  export const createUpdateStepwise = createUpdateStepwiseFactory(translateTimingStateVector);
17
17
  const updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(new WeakMap()));
18
- export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(animationFrame, updateMediaElement);
18
+ export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(animationFrame, document, on, updateMediaElement);
19
19
  export const setTimingsrc = createDefaultSetTimingsrc(createSetTimingsrc, createUpdateGradually, createUpdateStepwise, setTimingsrcWithCustomUpdateFunction, createWindow());
20
20
  //# sourceMappingURL=module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,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,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,CAAC,KAAK,EAAE,IAAI,EAAE,oBAAoB,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,qBAAqB,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;AAE5I,MAAM,CAAC,MAAM,oCAAoC,GAAG,0CAA0C,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAEnI,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CACjD,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,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,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,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,CAAC,KAAK,EAAE,IAAI,EAAE,oBAAoB,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,qBAAqB,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;AAE5I,MAAM,CAAC,MAAM,oCAAoC,GAAG,0CAA0C,CAC1F,cAAc,EACd,QAAQ,EACR,EAAE,EACF,kBAAkB,CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CACjD,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oCAAoC,EACpC,YAAY,EAAE,CACjB,CAAC"}
@@ -1,5 +1,5 @@
1
- import { TAnimationFrameFunction } from 'subscribable-things';
1
+ import { TAnimationFrameFunction, TOnFunction } from 'subscribable-things';
2
2
  import { TSetTimingsrcWithCustomUpdateFunctionFunction } from './set-timingsrc-with-custom-update-function-function';
3
3
  import { TUpdateMediaElementFunction } from './update-media-element-function';
4
- export declare type TSetTimingsrcWithCustomUpdateFunctionFactory = (animationFrame: TAnimationFrameFunction, updateMediaElement: TUpdateMediaElementFunction) => TSetTimingsrcWithCustomUpdateFunctionFunction;
4
+ export declare type TSetTimingsrcWithCustomUpdateFunctionFactory = (animationFrame: TAnimationFrameFunction, document: Document, on: TOnFunction, updateMediaElement: TUpdateMediaElementFunction) => TSetTimingsrcWithCustomUpdateFunctionFunction;
5
5
  //# sourceMappingURL=set-timingsrc-with-custom-update-function-factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-timingsrc-with-custom-update-function-factory.d.ts","sourceRoot":"","sources":["../../../src/types/set-timingsrc-with-custom-update-function-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,6CAA6C,EAAE,MAAM,sDAAsD,CAAC;AACrH,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAE9E,oBAAY,4CAA4C,GAAG,CACvD,cAAc,EAAE,uBAAuB,EACvC,kBAAkB,EAAE,2BAA2B,KAC9C,6CAA6C,CAAC"}
1
+ {"version":3,"file":"set-timingsrc-with-custom-update-function-factory.d.ts","sourceRoot":"","sources":["../../../src/types/set-timingsrc-with-custom-update-function-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,6CAA6C,EAAE,MAAM,sDAAsD,CAAC;AACrH,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAE9E,oBAAY,4CAA4C,GAAG,CACvD,cAAc,EAAE,uBAAuB,EACvC,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,WAAW,EACf,kBAAkB,EAAE,2BAA2B,KAC9C,6CAA6C,CAAC"}
@@ -47,10 +47,11 @@
47
47
  };
48
48
  };
49
49
 
50
- var createSetTimingsrcWithCustomUpdateFunction = function createSetTimingsrcWithCustomUpdateFunction(animationFrame, updateMediaElement) {
50
+ var createSetTimingsrcWithCustomUpdateFunction = function createSetTimingsrcWithCustomUpdateFunction(animationFrame, document, on, updateMediaElement) {
51
51
  return function (mediaElement, timingObject, updateFunction) {
52
52
  var prepareTimingStateVector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
53
- return animationFrame()(function () {
53
+
54
+ var update = function update() {
54
55
  var currentTime = mediaElement.currentTime,
55
56
  duration = mediaElement.duration,
56
57
  playbackRate = mediaElement.playbackRate;
@@ -62,7 +63,20 @@
62
63
 
63
64
  var sanitizedDuration = typeof duration === 'number' && !isNaN(duration) ? duration : 0;
64
65
  updateMediaElement(currentTime, sanitizedDuration, mediaElement, playbackRate, position, velocity);
65
- });
66
+ };
67
+
68
+ var unsubscribeFunctions = [animationFrame()(function () {
69
+ return update();
70
+ }), on(timingObject, 'update')(function () {
71
+ if (document.visibilityState === 'hidden') {
72
+ update();
73
+ }
74
+ })];
75
+ return function () {
76
+ return unsubscribeFunctions.forEach(function (unsubscribe) {
77
+ return unsubscribe();
78
+ });
79
+ };
66
80
  };
67
81
  };
68
82
 
@@ -229,7 +243,7 @@
229
243
 
230
244
  var createUpdateStepwise = createUpdateStepwiseFactory(timingObject.translateTimingStateVector);
231
245
  var updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(new WeakMap()));
232
- var setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(subscribableThings.animationFrame, updateMediaElement);
246
+ var setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(subscribableThings.animationFrame, document, subscribableThings.on, updateMediaElement);
233
247
  var setTimingsrc = createDefaultSetTimingsrc(createSetTimingsrc, createUpdateGradually, createUpdateStepwise, setTimingsrcWithCustomUpdateFunction, createWindow());
234
248
 
235
249
  exports.createSetTimingsrc = createSetTimingsrc;
package/package.json CHANGED
@@ -9,31 +9,31 @@
9
9
  }
10
10
  },
11
11
  "dependencies": {
12
- "@babel/runtime": "^7.17.9",
13
- "subscribable-things": "^2.1.2",
12
+ "@babel/runtime": "^7.18.3",
13
+ "subscribable-things": "^2.1.5",
14
14
  "timing-object": "^3.1.44",
15
15
  "tslib": "^2.4.0"
16
16
  },
17
17
  "description": "A library to synchronize a MediaElement with a TimingObject.",
18
18
  "devDependencies": {
19
- "@babel/core": "^7.17.9",
20
- "@babel/plugin-external-helpers": "^7.16.7",
21
- "@babel/plugin-transform-runtime": "^7.17.0",
22
- "@babel/preset-env": "^7.16.11",
23
- "@commitlint/cli": "^16.2.4",
24
- "@commitlint/config-angular": "^16.2.4",
19
+ "@babel/core": "^7.18.2",
20
+ "@babel/plugin-external-helpers": "^7.17.12",
21
+ "@babel/plugin-transform-runtime": "^7.18.2",
22
+ "@babel/preset-env": "^7.18.2",
23
+ "@commitlint/cli": "^17.0.1",
24
+ "@commitlint/config-angular": "^17.0.0",
25
25
  "@rollup/plugin-babel": "^5.3.1",
26
26
  "chai": "^4.3.6",
27
27
  "commitizen": "^4.2.4",
28
28
  "cz-conventional-changelog": "^3.3.0",
29
- "eslint": "^8.14.0",
30
- "eslint-config-holy-grail": "^52.0.9",
31
- "grunt": "^1.5.2",
29
+ "eslint": "^8.16.0",
30
+ "eslint-config-holy-grail": "^52.0.15",
31
+ "grunt": "^1.5.3",
32
32
  "grunt-cli": "^1.4.3",
33
33
  "grunt-contrib-clean": "^2.0.1",
34
34
  "grunt-sh": "^0.2.0",
35
- "husky": "^7.0.4",
36
- "karma": "^6.3.19",
35
+ "husky": "^8.0.1",
36
+ "karma": "^6.3.20",
37
37
  "karma-browserstack-launcher": "^1.6.0",
38
38
  "karma-chrome-launcher": "^3.1.1",
39
39
  "karma-firefox-launcher": "^2.1.2",
@@ -42,18 +42,18 @@
42
42
  "karma-sinon-chai": "^2.0.2",
43
43
  "karma-webpack": "^5.0.0",
44
44
  "load-grunt-config": "^4.0.1",
45
- "mocha": "^9.2.2",
45
+ "mocha": "^10.0.0",
46
46
  "prettier": "^2.6.2",
47
47
  "pretty-quick": "^3.1.3",
48
- "rollup": "^2.70.2",
49
- "sinon": "^13.0.2",
48
+ "rollup": "^2.74.1",
49
+ "sinon": "^14.0.0",
50
50
  "sinon-chai": "^3.7.0",
51
- "ts-loader": "^9.2.9",
52
- "tsconfig-holy-grail": "^11.1.30",
51
+ "ts-loader": "^9.3.0",
52
+ "tsconfig-holy-grail": "^11.1.32",
53
53
  "tslint": "^6.1.3",
54
54
  "tslint-config-holy-grail": "^53.2.28",
55
- "typescript": "^4.6.4",
56
- "webpack": "^5.72.0"
55
+ "typescript": "^4.7.2",
56
+ "webpack": "^5.72.1"
57
57
  },
58
58
  "files": [
59
59
  "build/es2019/",
@@ -75,5 +75,5 @@
75
75
  "test": "grunt lint && grunt test"
76
76
  },
77
77
  "types": "build/es2019/module.d.ts",
78
- "version": "1.1.29"
78
+ "version": "1.2.0"
79
79
  }
@@ -2,10 +2,12 @@ import { TSetTimingsrcWithCustomUpdateFunctionFactory } from '../types';
2
2
 
3
3
  export const createSetTimingsrcWithCustomUpdateFunction: TSetTimingsrcWithCustomUpdateFunctionFactory = (
4
4
  animationFrame,
5
+ document,
6
+ on,
5
7
  updateMediaElement
6
8
  ) => {
7
- return (mediaElement, timingObject, updateFunction, prepareTimingStateVector = null) =>
8
- animationFrame()(() => {
9
+ return (mediaElement, timingObject, updateFunction, prepareTimingStateVector = null) => {
10
+ const update = () => {
9
11
  const { currentTime, duration, playbackRate } = mediaElement;
10
12
  const timingStateVector = timingObject.query();
11
13
  const { position, velocity } = updateFunction(
@@ -15,5 +17,20 @@ export const createSetTimingsrcWithCustomUpdateFunction: TSetTimingsrcWithCustom
15
17
  const sanitizedDuration = typeof duration === 'number' && !isNaN(duration) ? duration : 0;
16
18
 
17
19
  updateMediaElement(currentTime, sanitizedDuration, mediaElement, playbackRate, position, velocity);
18
- });
20
+ };
21
+
22
+ const unsubscribeFunctions = [
23
+ animationFrame()(() => update()),
24
+ on(
25
+ timingObject,
26
+ 'update'
27
+ )(() => {
28
+ if (document.visibilityState === 'hidden') {
29
+ update();
30
+ }
31
+ })
32
+ ];
33
+
34
+ return () => unsubscribeFunctions.forEach((unsubscribe) => unsubscribe());
35
+ };
19
36
  };
package/src/module.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { animationFrame } from 'subscribable-things';
1
+ import { animationFrame, on } from 'subscribable-things';
2
2
  import { translateTimingStateVector } from 'timing-object';
3
3
  import { createDefaultSetTimingsrc } from './factories/default-set-timingsrc';
4
4
  import { createSetCurrentTime } from './factories/set-current-time';
@@ -20,7 +20,12 @@ export const createUpdateStepwise = createUpdateStepwiseFactory(translateTimingS
20
20
 
21
21
  const updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(new WeakMap()));
22
22
 
23
- export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(animationFrame, updateMediaElement);
23
+ export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(
24
+ animationFrame,
25
+ document,
26
+ on,
27
+ updateMediaElement
28
+ );
24
29
 
25
30
  export const setTimingsrc = createDefaultSetTimingsrc(
26
31
  createSetTimingsrc,
@@ -1,8 +1,10 @@
1
- import { TAnimationFrameFunction } from 'subscribable-things';
1
+ import { TAnimationFrameFunction, TOnFunction } from 'subscribable-things';
2
2
  import { TSetTimingsrcWithCustomUpdateFunctionFunction } from './set-timingsrc-with-custom-update-function-function';
3
3
  import { TUpdateMediaElementFunction } from './update-media-element-function';
4
4
 
5
5
  export type TSetTimingsrcWithCustomUpdateFunctionFactory = (
6
6
  animationFrame: TAnimationFrameFunction,
7
+ document: Document,
8
+ on: TOnFunction,
7
9
  updateMediaElement: TUpdateMediaElementFunction
8
10
  ) => TSetTimingsrcWithCustomUpdateFunctionFunction;