@visactor/vrender-animate 1.0.0-alpha.4 → 1.0.0-alpha.6

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 (106) hide show
  1. package/cjs/animate.js +2 -1
  2. package/cjs/animate.js.map +1 -1
  3. package/cjs/config/morphing.d.ts +2 -0
  4. package/cjs/config/morphing.js +9 -0
  5. package/cjs/config/morphing.js.map +1 -0
  6. package/cjs/custom/clip-graphic.js +1 -1
  7. package/cjs/custom/clip-graphic.js.map +1 -1
  8. package/cjs/custom/clip.d.ts +1 -0
  9. package/cjs/custom/clip.js +6 -0
  10. package/cjs/custom/clip.js.map +1 -1
  11. package/cjs/custom/fade.js +6 -3
  12. package/cjs/custom/fade.js.map +1 -1
  13. package/cjs/custom/fromTo.js +2 -1
  14. package/cjs/custom/groupFade.js +1 -2
  15. package/cjs/custom/growHeight.js +4 -4
  16. package/cjs/custom/growHeight.js.map +1 -1
  17. package/cjs/custom/morphing.d.ts +51 -0
  18. package/cjs/custom/morphing.js +298 -0
  19. package/cjs/custom/morphing.js.map +1 -0
  20. package/cjs/custom/move.d.ts +4 -0
  21. package/cjs/custom/move.js +8 -7
  22. package/cjs/custom/move.js.map +1 -1
  23. package/cjs/custom/register.d.ts +2 -2
  24. package/cjs/custom/register.js +19 -1
  25. package/cjs/custom/register.js.map +1 -1
  26. package/cjs/custom/richtext/input-richtext.d.ts +4 -2
  27. package/cjs/custom/richtext/input-richtext.js +18 -9
  28. package/cjs/custom/richtext/input-richtext.js.map +1 -1
  29. package/cjs/custom/richtext/slide-richtext.js +1 -1
  30. package/cjs/custom/scale.js +3 -2
  31. package/cjs/custom/scale.js.map +1 -1
  32. package/cjs/custom/story.d.ts +68 -0
  33. package/cjs/custom/story.js +147 -2
  34. package/cjs/custom/story.js.map +1 -1
  35. package/cjs/executor/animate-executor.js +19 -18
  36. package/cjs/executor/animate-executor.js.map +1 -1
  37. package/cjs/index.d.ts +1 -0
  38. package/cjs/index.js +30 -1
  39. package/cjs/index.js.map +1 -1
  40. package/cjs/ticker/default-ticker.d.ts +3 -2
  41. package/cjs/ticker/default-ticker.js +9 -6
  42. package/cjs/ticker/default-ticker.js.map +1 -1
  43. package/cjs/ticker/manual-ticker.d.ts +2 -1
  44. package/cjs/ticker/manual-ticker.js +6 -4
  45. package/cjs/ticker/manual-ticker.js.map +1 -1
  46. package/cjs/timeline.d.ts +11 -3
  47. package/cjs/timeline.js +28 -15
  48. package/cjs/timeline.js.map +1 -1
  49. package/cjs/utils/easing-func.js +2 -1
  50. package/cjs/utils/transform.d.ts +2 -0
  51. package/cjs/utils/transform.js +10 -0
  52. package/cjs/utils/transform.js.map +1 -0
  53. package/dist/index.es.js +888 -85
  54. package/es/animate.js +2 -1
  55. package/es/animate.js.map +1 -1
  56. package/es/config/morphing.d.ts +2 -0
  57. package/es/config/morphing.js +5 -0
  58. package/es/config/morphing.js.map +1 -0
  59. package/es/custom/clip-graphic.js +1 -1
  60. package/es/custom/clip-graphic.js.map +1 -1
  61. package/es/custom/clip.d.ts +1 -0
  62. package/es/custom/clip.js +6 -0
  63. package/es/custom/clip.js.map +1 -1
  64. package/es/custom/fade.js +6 -3
  65. package/es/custom/fade.js.map +1 -1
  66. package/es/custom/fromTo.js +2 -1
  67. package/es/custom/groupFade.js +1 -2
  68. package/es/custom/growHeight.js +4 -4
  69. package/es/custom/growHeight.js.map +1 -1
  70. package/es/custom/morphing.d.ts +51 -0
  71. package/es/custom/morphing.js +289 -0
  72. package/es/custom/morphing.js.map +1 -0
  73. package/es/custom/move.d.ts +4 -0
  74. package/es/custom/move.js +7 -6
  75. package/es/custom/move.js.map +1 -1
  76. package/es/custom/register.d.ts +2 -2
  77. package/es/custom/register.js +7 -6
  78. package/es/custom/register.js.map +1 -1
  79. package/es/custom/richtext/input-richtext.d.ts +4 -2
  80. package/es/custom/richtext/input-richtext.js +18 -9
  81. package/es/custom/richtext/input-richtext.js.map +1 -1
  82. package/es/custom/richtext/slide-richtext.js +1 -1
  83. package/es/custom/scale.js +3 -2
  84. package/es/custom/scale.js.map +1 -1
  85. package/es/custom/story.d.ts +68 -0
  86. package/es/custom/story.js +140 -0
  87. package/es/custom/story.js.map +1 -1
  88. package/es/executor/animate-executor.js +20 -18
  89. package/es/executor/animate-executor.js.map +1 -1
  90. package/es/index.d.ts +1 -0
  91. package/es/index.js +2 -0
  92. package/es/index.js.map +1 -1
  93. package/es/ticker/default-ticker.d.ts +3 -2
  94. package/es/ticker/default-ticker.js +9 -6
  95. package/es/ticker/default-ticker.js.map +1 -1
  96. package/es/ticker/manual-ticker.d.ts +2 -1
  97. package/es/ticker/manual-ticker.js +6 -4
  98. package/es/ticker/manual-ticker.js.map +1 -1
  99. package/es/timeline.d.ts +11 -3
  100. package/es/timeline.js +28 -15
  101. package/es/timeline.js.map +1 -1
  102. package/es/utils/easing-func.js +2 -1
  103. package/es/utils/transform.d.ts +2 -0
  104. package/es/utils/transform.js +4 -0
  105. package/es/utils/transform.js.map +1 -0
  106. package/package.json +4 -4
@@ -23,10 +23,7 @@ class RAFTickHandler {
23
23
 
24
24
  export class DefaultTicker extends EventEmitter {
25
25
  constructor(stage) {
26
- super(), this.timelines = [], this.frameTimeHistory = [], this.checkSkip = delta => {
27
- if ("performance" === this.stage.params.optimize.tickRenderMode) return !1;
28
- return delta < this.interval + 2 * (Math.random() - .5) * this._jitter;
29
- }, this.handleTick = (handler, params) => {
26
+ super(), this.timelines = [], this.frameTimeHistory = [], this.handleTick = (handler, params) => {
30
27
  const {once: once = !1} = null != params ? params : {};
31
28
  if (this.ifCanStop()) return this.stop(), !1;
32
29
  const currentTime = handler.getTime();
@@ -42,6 +39,9 @@ export class DefaultTicker extends EventEmitter {
42
39
  }, this.init(), this.lastFrameTime = -1, this.tickCounts = 0, this.stage = stage,
43
40
  this.autoStop = !0, this.interval = 16, this.computeTimeOffsetAndJitter();
44
41
  }
42
+ bindStage(stage) {
43
+ this.stage = stage;
44
+ }
45
45
  computeTimeOffsetAndJitter() {
46
46
  this.timeOffset = Math.floor(Math.random() * this.interval), this._jitter = Math.min(Math.max(.2 * this.interval, 6), .7 * this.interval);
47
47
  }
@@ -125,5 +125,8 @@ export class DefaultTicker extends EventEmitter {
125
125
  this.stop(), this.timelines = [], null === (_a = this.tickerHandler) || void 0 === _a || _a.release(),
126
126
  this.tickerHandler = null, this.lastFrameTime = -1;
127
127
  }
128
- }
129
- //# sourceMappingURL=default-ticker.js.map
128
+ checkSkip(delta) {
129
+ if ("performance" === this.stage.params.optimize.tickRenderMode) return !1;
130
+ return delta < this.interval + 2 * (Math.random() - .5) * this._jitter;
131
+ }
132
+ }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ticker/default-ticker.ts"],"names":[],"mappings":"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","file":"default-ticker.js","sourcesContent":["import { EventEmitter } from '@visactor/vutils';\nimport type { IStage, ITimeline } from '@visactor/vrender-core';\nimport { application, PerformanceRAF, type ITickHandler, type ITicker, STATUS } from '@visactor/vrender-core';\n\nconst performanceRAF = new PerformanceRAF();\n\nclass RAFTickHandler implements ITickHandler {\n protected released: boolean = false;\n\n tick(interval: number, cb: (handler: ITickHandler) => void | boolean): void {\n performanceRAF.addAnimationFrameCb(() => {\n if (this.released) {\n return;\n }\n return cb(this);\n });\n }\n\n release(): void {\n this.released = true;\n }\n\n getTime(): number {\n return Date.now();\n }\n}\n\n/**\n * Graph-based Ticker implementation\n * This ticker works directly with GraphManager instances without needing timeline adapters\n */\nexport class DefaultTicker extends EventEmitter implements ITicker {\n protected interval: number;\n protected tickerHandler: ITickHandler;\n protected status: STATUS;\n protected lastFrameTime: number;\n protected tickCounts: number;\n protected stage: IStage;\n timelines: ITimeline[] = [];\n autoStop: boolean;\n // 随机扰动(每次都对interval进行随机的扰动,避免所有tick都发生在同一帧)\n protected _jitter: number;\n protected timeOffset: number;\n declare _lastTickTime: number;\n protected frameTimeHistory: number[] = [];\n\n constructor(stage: IStage) {\n super();\n this.init();\n this.lastFrameTime = -1;\n this.tickCounts = 0;\n this.stage = stage;\n this.autoStop = true;\n this.interval = 16;\n this.computeTimeOffsetAndJitter();\n }\n\n /**\n * 计算时间偏移和随机扰动\n */\n computeTimeOffsetAndJitter(): void {\n this.timeOffset = Math.floor(Math.random() * this.interval);\n this._jitter = Math.min(Math.max(this.interval * 0.2, 6), this.interval * 0.7);\n }\n\n init(): void {\n this.interval = 16;\n this.status = STATUS.INITIAL;\n application.global.hooks.onSetEnv.tap('graph-ticker', () => {\n this.initHandler();\n });\n if (application.global.env) {\n this.initHandler();\n }\n }\n\n addTimeline(timeline: ITimeline): void {\n this.timelines.push(timeline);\n }\n\n remTimeline(timeline: ITimeline): void {\n this.timelines = this.timelines.filter(t => t !== timeline);\n }\n\n getTimelines(): ITimeline[] {\n return this.timelines;\n }\n\n protected initHandler() {\n this.setupTickHandler();\n }\n\n /**\n * Set up the tick handler\n * @returns true if setup was successful, false otherwise\n */\n protected setupTickHandler(): boolean {\n const handler: ITickHandler = new RAFTickHandler();\n\n // Destroy the previous tick handler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n\n this.tickerHandler = handler;\n return true;\n }\n\n setInterval(interval: number): void {\n this.interval = interval;\n this.computeTimeOffsetAndJitter();\n }\n\n getInterval(): number {\n return this.interval;\n }\n\n setFPS(fps: number): void {\n this.setInterval(Math.floor(1000 / fps));\n }\n\n getFPS(): number {\n return 1000 / this.interval;\n }\n\n tick(interval: number): void {\n this.tickerHandler.tick(interval, (handler: ITickHandler) => {\n return this.handleTick(handler, { once: true });\n });\n }\n\n tickTo(t: number): void {\n if (!this.tickerHandler.tickTo) {\n return;\n }\n this.tickerHandler.tickTo(t, (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n\n pause(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.PAUSE;\n return true;\n }\n\n resume(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.RUNNING;\n return true;\n }\n\n ifCanStop(): boolean {\n if (this.autoStop) {\n if (!this.timelines.length) {\n return true;\n }\n if (this.timelines.every(timeline => !timeline.isRunning())) {\n return true;\n }\n }\n return false;\n }\n\n start(force: boolean = false): boolean {\n if (this.status === STATUS.RUNNING) {\n return false;\n }\n if (!this.tickerHandler) {\n return false;\n }\n\n // 暂停中、或者应该停止的时候,就不执行\n if (!force) {\n if (this.status === STATUS.PAUSE) {\n return false;\n }\n if (this.ifCanStop()) {\n return false;\n }\n }\n\n this.status = STATUS.RUNNING;\n this.tickerHandler.tick(0, this.handleTick);\n return true;\n }\n\n stop(): void {\n // Reset the tick handler\n this.status = STATUS.INITIAL;\n this.setupTickHandler();\n this.lastFrameTime = -1;\n }\n\n /**\n * 用于自动启动或停止\n * 基于当前的graph managers检查是否需要启动或停止\n */\n trySyncTickStatus(): void {\n if (this.status === STATUS.INITIAL && this.timelines.some(timeline => timeline.isRunning())) {\n this.start();\n } else if (this.status === STATUS.RUNNING && this.timelines.every(timeline => !timeline.isRunning())) {\n this.stop();\n }\n }\n\n release(): void {\n this.stop();\n this.timelines = [];\n this.tickerHandler?.release();\n this.tickerHandler = null;\n this.lastFrameTime = -1;\n }\n\n protected checkSkip = (delta: number): boolean => {\n if (this.stage.params.optimize.tickRenderMode === 'performance') {\n return false;\n }\n // 随机扰动(每次都对interval进行随机的扰动,避免所有tick都发生在同一帧)\n const skip = delta < this.interval + (Math.random() - 0.5) * 2 * this._jitter;\n return skip;\n };\n\n protected handleTick = (handler: ITickHandler, params?: { once?: boolean }): boolean => {\n const { once = false } = params ?? {};\n\n // 尝试停止\n if (this.ifCanStop()) {\n this.stop();\n return false;\n }\n\n const currentTime = handler.getTime();\n this._lastTickTime = currentTime;\n\n if (this.lastFrameTime < 0) {\n this.lastFrameTime = currentTime - this.interval + this.timeOffset;\n this.frameTimeHistory.push(this.lastFrameTime);\n }\n\n const delta = currentTime - this.lastFrameTime;\n\n const skip = this.checkSkip(delta);\n\n if (!skip) {\n this._handlerTick(delta);\n this.lastFrameTime = currentTime;\n this.frameTimeHistory.push(this.lastFrameTime);\n }\n\n if (!once) {\n handler.tick(this.interval, this.handleTick);\n }\n\n return !skip;\n };\n\n protected _handlerTick = (delta: number): void => {\n if (this.status !== STATUS.RUNNING) {\n return;\n }\n\n this.tickCounts++;\n\n // Update all graph managers\n this.timelines.forEach(timeline => {\n timeline.tick(delta);\n });\n\n this.emit('tick', delta);\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/ticker/default-ticker.ts"],"names":[],"mappings":"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","file":"default-ticker.js","sourcesContent":["import { EventEmitter } from '@visactor/vutils';\nimport type { IStage, ITimeline } from '@visactor/vrender-core';\nimport { application, PerformanceRAF, type ITickHandler, type ITicker, STATUS } from '@visactor/vrender-core';\n\nconst performanceRAF = new PerformanceRAF();\n\nclass RAFTickHandler implements ITickHandler {\n protected released: boolean = false;\n\n tick(interval: number, cb: (handler: ITickHandler) => void | boolean): void {\n performanceRAF.addAnimationFrameCb(() => {\n if (this.released) {\n return;\n }\n return cb(this);\n });\n }\n\n release(): void {\n this.released = true;\n }\n\n getTime(): number {\n return Date.now();\n }\n}\n\n/**\n * Graph-based Ticker implementation\n * This ticker works directly with GraphManager instances without needing timeline adapters\n */\nexport class DefaultTicker extends EventEmitter implements ITicker {\n protected interval: number;\n protected tickerHandler: ITickHandler;\n protected status: STATUS;\n protected lastFrameTime: number;\n protected tickCounts: number;\n protected stage: IStage;\n timelines: ITimeline[] = [];\n autoStop: boolean;\n // 随机扰动(每次都对interval进行随机的扰动,避免所有tick都发生在同一帧)\n protected _jitter: number;\n protected timeOffset: number;\n declare _lastTickTime: number;\n protected frameTimeHistory: number[] = [];\n\n constructor(stage?: IStage) {\n super();\n this.init();\n this.lastFrameTime = -1;\n this.tickCounts = 0;\n this.stage = stage;\n this.autoStop = true;\n this.interval = 16;\n this.computeTimeOffsetAndJitter();\n }\n\n bindStage(stage: IStage): void {\n this.stage = stage;\n }\n\n /**\n * 计算时间偏移和随机扰动\n */\n computeTimeOffsetAndJitter(): void {\n this.timeOffset = Math.floor(Math.random() * this.interval);\n this._jitter = Math.min(Math.max(this.interval * 0.2, 6), this.interval * 0.7);\n }\n\n init(): void {\n this.interval = 16;\n this.status = STATUS.INITIAL;\n application.global.hooks.onSetEnv.tap('graph-ticker', () => {\n this.initHandler();\n });\n if (application.global.env) {\n this.initHandler();\n }\n }\n\n addTimeline(timeline: ITimeline): void {\n this.timelines.push(timeline);\n }\n\n remTimeline(timeline: ITimeline): void {\n this.timelines = this.timelines.filter(t => t !== timeline);\n }\n\n getTimelines(): ITimeline[] {\n return this.timelines;\n }\n\n protected initHandler() {\n this.setupTickHandler();\n }\n\n /**\n * Set up the tick handler\n * @returns true if setup was successful, false otherwise\n */\n protected setupTickHandler(): boolean {\n const handler: ITickHandler = new RAFTickHandler();\n\n // Destroy the previous tick handler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n\n this.tickerHandler = handler;\n return true;\n }\n\n setInterval(interval: number): void {\n this.interval = interval;\n this.computeTimeOffsetAndJitter();\n }\n\n getInterval(): number {\n return this.interval;\n }\n\n setFPS(fps: number): void {\n this.setInterval(Math.floor(1000 / fps));\n }\n\n getFPS(): number {\n return 1000 / this.interval;\n }\n\n tick(interval: number): void {\n this.tickerHandler.tick(interval, (handler: ITickHandler) => {\n return this.handleTick(handler, { once: true });\n });\n }\n\n tickTo(t: number): void {\n if (!this.tickerHandler.tickTo) {\n return;\n }\n this.tickerHandler.tickTo(t, (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n\n pause(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.PAUSE;\n return true;\n }\n\n resume(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.RUNNING;\n return true;\n }\n\n ifCanStop(): boolean {\n if (this.autoStop) {\n if (!this.timelines.length) {\n return true;\n }\n if (this.timelines.every(timeline => !timeline.isRunning())) {\n return true;\n }\n }\n return false;\n }\n\n start(force: boolean = false): boolean {\n if (this.status === STATUS.RUNNING) {\n return false;\n }\n if (!this.tickerHandler) {\n return false;\n }\n\n // 暂停中、或者应该停止的时候,就不执行\n if (!force) {\n if (this.status === STATUS.PAUSE) {\n return false;\n }\n if (this.ifCanStop()) {\n return false;\n }\n }\n\n this.status = STATUS.RUNNING;\n this.tickerHandler.tick(0, this.handleTick);\n return true;\n }\n\n stop(): void {\n // Reset the tick handler\n this.status = STATUS.INITIAL;\n this.setupTickHandler();\n this.lastFrameTime = -1;\n }\n\n /**\n * 用于自动启动或停止\n * 基于当前的graph managers检查是否需要启动或停止\n */\n trySyncTickStatus(): void {\n if (this.status === STATUS.INITIAL && this.timelines.some(timeline => timeline.isRunning())) {\n this.start();\n } else if (this.status === STATUS.RUNNING && this.timelines.every(timeline => !timeline.isRunning())) {\n this.stop();\n }\n }\n\n release(): void {\n this.stop();\n this.timelines = [];\n this.tickerHandler?.release();\n this.tickerHandler = null;\n this.lastFrameTime = -1;\n }\n\n protected checkSkip(delta: number): boolean {\n if (this.stage.params.optimize.tickRenderMode === 'performance') {\n return false;\n }\n // 随机扰动(每次都对interval进行随机的扰动,避免所有tick都发生在同一帧)\n const skip = delta < this.interval + (Math.random() - 0.5) * 2 * this._jitter;\n return skip;\n }\n\n protected handleTick = (handler: ITickHandler, params?: { once?: boolean }): boolean => {\n const { once = false } = params ?? {};\n\n // 尝试停止\n if (this.ifCanStop()) {\n this.stop();\n return false;\n }\n\n const currentTime = handler.getTime();\n this._lastTickTime = currentTime;\n\n if (this.lastFrameTime < 0) {\n this.lastFrameTime = currentTime - this.interval + this.timeOffset;\n this.frameTimeHistory.push(this.lastFrameTime);\n }\n\n const delta = currentTime - this.lastFrameTime;\n\n const skip = this.checkSkip(delta);\n\n if (!skip) {\n this._handlerTick(delta);\n this.lastFrameTime = currentTime;\n this.frameTimeHistory.push(this.lastFrameTime);\n }\n\n if (!once) {\n handler.tick(this.interval, this.handleTick);\n }\n\n return !skip;\n };\n\n protected _handlerTick = (delta: number): void => {\n if (this.status !== STATUS.RUNNING) {\n return;\n }\n\n this.tickCounts++;\n\n // Update all graph managers\n this.timelines.forEach(timeline => {\n timeline.tick(delta);\n });\n\n this.emit('tick', delta);\n };\n}\n"]}
@@ -2,8 +2,9 @@ import type { IStage } from '@visactor/vrender-core';
2
2
  import { type ITicker } from '@visactor/vrender-core';
3
3
  import { DefaultTicker } from './default-ticker';
4
4
  export declare class ManualTicker extends DefaultTicker implements ITicker {
5
- constructor(stage: IStage);
5
+ constructor(stage?: IStage);
6
6
  protected setupTickHandler(): boolean;
7
+ checkSkip(delta: number): boolean;
7
8
  getTime(): number;
8
9
  tickAt(time: number): void;
9
10
  start(force?: boolean): boolean;
@@ -4,11 +4,10 @@ import { DefaultTicker } from "./default-ticker";
4
4
 
5
5
  class ManualTickHandler {
6
6
  constructor() {
7
- this.released = !1, this.startTime = -1, this.currentTime = -1;
7
+ this.released = !1, this.currentTime = -1;
8
8
  }
9
9
  tick(interval, cb) {
10
- this.startTime < 0 && (this.startTime = 0), this.currentTime = this.startTime + interval,
11
- cb(this);
10
+ this.currentTime < 0 && (this.currentTime = 0), this.currentTime += interval, cb(this);
12
11
  }
13
12
  release() {
14
13
  this.released = !0;
@@ -17,7 +16,7 @@ class ManualTickHandler {
17
16
  return this.currentTime;
18
17
  }
19
18
  tickTo(time, cb) {
20
- this.startTime < 0 && (this.startTime = 0, this.currentTime = 0);
19
+ this.currentTime < 0 && (this.currentTime = 0);
21
20
  const interval = time - this.currentTime;
22
21
  this.tick(interval, cb);
23
22
  }
@@ -32,6 +31,9 @@ export class ManualTicker extends DefaultTicker {
32
31
  return this.tickerHandler && this.tickerHandler.release(), this.tickerHandler = handler,
33
32
  !0;
34
33
  }
34
+ checkSkip(delta) {
35
+ return !1;
36
+ }
35
37
  getTime() {
36
38
  return this.tickerHandler.getTime();
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ticker/manual-ticker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAmC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,iBAAiB;IAAvB;QACY,aAAQ,GAAY,KAAK,CAAC;QAC1B,cAAS,GAAW,CAAC,CAAC,CAAC;QACvB,gBAAW,GAAW,CAAC,CAAC,CAAC;IA0BrC,CAAC;IAxBC,IAAI,CAAC,QAAgB,EAAE,EAAmC;QACxD,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SACpB;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC7C,EAAE,CAAC,IAAI,CAAC,CAAC;IACX,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,EAAmC;QACtD,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACtB;QACD,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,YAAY,KAAa;QACvB,KAAK,CAAC,KAAK,CAAC,CAAC;QAGb,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,CAAC;IACS,gBAAgB;QACxB,MAAM,OAAO,GAAiB,IAAI,iBAAiB,EAAE,CAAC;QAGtD,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;SAC9B;QAED,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,KAAK;QACjB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE;YAClC,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE;gBAChC,OAAO,KAAK,CAAC;aACd;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBACpB,OAAO,KAAK,CAAC;aACd;SACF;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;CACF","file":"manual-ticker.js","sourcesContent":["import type { IStage } from '@visactor/vrender-core';\nimport { STATUS, type ITickHandler, type ITicker } from '@visactor/vrender-core';\nimport { DefaultTicker } from './default-ticker';\n\nclass ManualTickHandler implements ITickHandler {\n protected released: boolean = false;\n protected startTime: number = -1;\n protected currentTime: number = -1;\n\n tick(interval: number, cb: (handler: ITickHandler) => void): void {\n if (this.startTime < 0) {\n this.startTime = 0;\n }\n this.currentTime = this.startTime + interval;\n cb(this);\n }\n\n release(): void {\n this.released = true;\n }\n\n getTime(): number {\n return this.currentTime;\n }\n\n tickTo(time: number, cb: (handler: ITickHandler) => void): void {\n if (this.startTime < 0) {\n this.startTime = 0;\n this.currentTime = 0;\n }\n const interval = time - this.currentTime;\n this.tick(interval, cb);\n }\n}\n\nexport class ManualTicker extends DefaultTicker implements ITicker {\n constructor(stage: IStage) {\n super(stage);\n // manualTicker 的 lastFrameTime 默认为 0\n // status 默认为 STATUS.RUNNING(不需要启动)\n this.lastFrameTime = 0;\n this.status = STATUS.RUNNING;\n }\n protected setupTickHandler(): boolean {\n const handler: ITickHandler = new ManualTickHandler();\n\n // Destroy the previous tick handler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n\n this.tickerHandler = handler;\n return true;\n }\n\n getTime(): number {\n return this.tickerHandler.getTime();\n }\n\n tickAt(time: number): void {\n this.tickTo(time);\n }\n\n start(force = false) {\n if (this.status === STATUS.RUNNING) {\n return false;\n }\n if (!this.tickerHandler) {\n return false;\n }\n if (!force) {\n if (this.status === STATUS.PAUSE) {\n return false;\n }\n if (this.ifCanStop()) {\n return false;\n }\n }\n this.status = STATUS.RUNNING;\n return true;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/ticker/manual-ticker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAmC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,iBAAiB;IAAvB;QACY,aAAQ,GAAY,KAAK,CAAC;QAC1B,gBAAW,GAAW,CAAC,CAAC,CAAC;IAyBrC,CAAC;IAvBC,IAAI,CAAC,QAAgB,EAAE,EAAmC;QACxD,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;YACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACtB;QACD,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC;QAC7B,EAAE,CAAC,IAAI,CAAC,CAAC;IACX,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,EAAmC;QACtD,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;YACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACtB;QACD,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,YAAY,KAAc;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;QAGb,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,CAAC;IACS,gBAAgB;QACxB,MAAM,OAAO,GAAiB,IAAI,iBAAiB,EAAE,CAAC;QAGtD,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;SAC9B;QAED,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,KAAK;QACjB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE;YAClC,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE;gBAChC,OAAO,KAAK,CAAC;aACd;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBACpB,OAAO,KAAK,CAAC;aACd;SACF;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;CACF","file":"manual-ticker.js","sourcesContent":["import type { IStage } from '@visactor/vrender-core';\nimport { STATUS, type ITickHandler, type ITicker } from '@visactor/vrender-core';\nimport { DefaultTicker } from './default-ticker';\n\nclass ManualTickHandler implements ITickHandler {\n protected released: boolean = false;\n protected currentTime: number = -1;\n\n tick(interval: number, cb: (handler: ITickHandler) => void): void {\n if (this.currentTime < 0) {\n this.currentTime = 0;\n }\n this.currentTime += interval;\n cb(this);\n }\n\n release(): void {\n this.released = true;\n }\n\n getTime(): number {\n return this.currentTime;\n }\n\n tickTo(time: number, cb: (handler: ITickHandler) => void): void {\n if (this.currentTime < 0) {\n this.currentTime = 0;\n }\n const interval = time - this.currentTime;\n this.tick(interval, cb);\n }\n}\n\nexport class ManualTicker extends DefaultTicker implements ITicker {\n constructor(stage?: IStage) {\n super(stage);\n // manualTicker 的 lastFrameTime 默认为 0\n // status 默认为 STATUS.RUNNING(不需要启动)\n this.lastFrameTime = 0;\n this.status = STATUS.RUNNING;\n }\n protected setupTickHandler(): boolean {\n const handler: ITickHandler = new ManualTickHandler();\n\n // Destroy the previous tick handler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n\n this.tickerHandler = handler;\n return true;\n }\n\n checkSkip(delta: number): boolean {\n return false;\n }\n\n getTime(): number {\n return this.tickerHandler.getTime();\n }\n\n tickAt(time: number): void {\n this.tickTo(time);\n }\n\n start(force = false) {\n if (this.status === STATUS.RUNNING) {\n return false;\n }\n if (!this.tickerHandler) {\n return false;\n }\n if (!force) {\n if (this.status === STATUS.PAUSE) {\n return false;\n }\n if (this.ifCanStop()) {\n return false;\n }\n }\n this.status = STATUS.RUNNING;\n return true;\n }\n}\n"]}
package/es/timeline.d.ts CHANGED
@@ -1,13 +1,20 @@
1
1
  import { type IAnimate, type ITimeline } from '@visactor/vrender-core';
2
+ interface AnimateNode {
3
+ animate: IAnimate;
4
+ next: AnimateNode | null;
5
+ prev: AnimateNode | null;
6
+ }
2
7
  export declare class DefaultTimeline implements ITimeline {
3
8
  id: number;
4
- protected animates: IAnimate[];
9
+ protected head: AnimateNode | null;
10
+ protected tail: AnimateNode | null;
11
+ protected animateMap: Map<IAnimate, AnimateNode>;
12
+ protected _animateCount: number;
5
13
  protected paused: boolean;
6
14
  protected _playSpeed: number;
7
15
  protected _totalDuration: number;
8
16
  protected _startTime: number;
9
17
  protected _currentTime: number;
10
- protected _endAnimatePtr: number;
11
18
  isGlobal?: boolean;
12
19
  get animateCount(): number;
13
20
  constructor();
@@ -18,7 +25,7 @@ export declare class DefaultTimeline implements ITimeline {
18
25
  resume(): void;
19
26
  tick(delta: number): void;
20
27
  clear(): void;
21
- removeAnimate(animate: IAnimate, release?: boolean, index?: number): void;
28
+ removeAnimate(animate: IAnimate, release?: boolean): void;
22
29
  protected recalculateTotalDuration(): void;
23
30
  getTotalDuration(): number;
24
31
  getPlaySpeed(): number;
@@ -30,3 +37,4 @@ export declare class DefaultTimeline implements ITimeline {
30
37
  setCurrentTime(time: number): void;
31
38
  }
32
39
  export declare const defaultTimeline: DefaultTimeline;
40
+ export {};
package/es/timeline.js CHANGED
@@ -2,22 +2,32 @@ import { Generator, AnimateStatus } from "@visactor/vrender-core";
2
2
 
3
3
  export class DefaultTimeline {
4
4
  get animateCount() {
5
- return this.animates.length;
5
+ return this._animateCount;
6
6
  }
7
7
  constructor() {
8
- this.animates = [], this._playSpeed = 1, this._totalDuration = 0, this._startTime = 0,
9
- this._currentTime = 0, this._endAnimatePtr = -1, this.id = Generator.GenAutoIncrementId(),
10
- this.animates = [], this.paused = !1;
8
+ this.head = null, this.tail = null, this.animateMap = new Map, this._animateCount = 0,
9
+ this._playSpeed = 1, this._totalDuration = 0, this._startTime = 0, this._currentTime = 0,
10
+ this.id = Generator.GenAutoIncrementId(), this.paused = !1;
11
11
  }
12
12
  isRunning() {
13
- return !this.paused && this._endAnimatePtr >= 0;
13
+ return !this.paused && this._animateCount > 0;
14
14
  }
15
15
  forEachAccessAnimate(cb) {
16
- for (let i = 0; i <= this._endAnimatePtr; i++) cb(this.animates[i], i);
16
+ let current = this.head, index = 0;
17
+ for (;current; ) {
18
+ const next = current.next;
19
+ cb(current.animate, index), index++, current = next;
20
+ }
17
21
  }
18
22
  addAnimate(animate) {
19
- this.animates.push(animate), this._endAnimatePtr++, this.animates[this.animates.length - 1] = this.animates[this._endAnimatePtr],
20
- this.animates[this._endAnimatePtr] = animate, this._totalDuration = Math.max(this._totalDuration, animate.getStartTime() + animate.getDuration());
23
+ const newNode = {
24
+ animate: animate,
25
+ next: null,
26
+ prev: null
27
+ };
28
+ this.head ? this.tail && (this.tail.next = newNode, newNode.prev = this.tail, this.tail = newNode) : (this.head = newNode,
29
+ this.tail = newNode), this.animateMap.set(animate, newNode), this._animateCount++,
30
+ this._totalDuration = Math.max(this._totalDuration, animate.getStartTime() + animate.getDuration());
21
31
  }
22
32
  pause() {
23
33
  this.paused = !0;
@@ -29,21 +39,24 @@ export class DefaultTimeline {
29
39
  if (this.paused) return;
30
40
  const scaledDelta = delta * this._playSpeed;
31
41
  this._currentTime += scaledDelta, this.forEachAccessAnimate(((animate, i) => {
32
- animate.status === AnimateStatus.END ? this.removeAnimate(animate, !0, i) : animate.status !== AnimateStatus.RUNNING && animate.status !== AnimateStatus.INITIAL || animate.advance(scaledDelta);
42
+ animate.status === AnimateStatus.END ? this.removeAnimate(animate, !0) : animate.status !== AnimateStatus.RUNNING && animate.status !== AnimateStatus.INITIAL || animate.advance(scaledDelta);
33
43
  }));
34
44
  }
35
45
  clear() {
36
46
  this.forEachAccessAnimate((animate => {
37
47
  animate.release();
38
- })), this.animates = [], this._totalDuration = 0;
48
+ })), this.head = null, this.tail = null, this.animateMap.clear(), this._animateCount = 0,
49
+ this._totalDuration = 0;
39
50
  }
40
- removeAnimate(animate, release = !0, index) {
41
- this._endAnimatePtr < 0 || (release && (animate._onRemove && animate._onRemove.forEach((cb => cb())),
42
- animate.release()), index = null != index ? index : this.animates.indexOf(animate),
43
- this.animates[index] = this.animates[this._endAnimatePtr], this._endAnimatePtr--);
51
+ removeAnimate(animate, release = !0) {
52
+ const node = this.animateMap.get(animate);
53
+ node && (release && (animate._onRemove && animate._onRemove.forEach((cb => cb())),
54
+ animate.release()), node.prev ? node.prev.next = node.next : this.head = node.next,
55
+ node.next ? node.next.prev = node.prev : this.tail = node.prev, this.animateMap.delete(animate),
56
+ this._animateCount--, animate.getStartTime() + animate.getDuration() >= this._totalDuration && this.recalculateTotalDuration());
44
57
  }
45
58
  recalculateTotalDuration() {
46
- this._totalDuration = 0, this.animates.forEach((animate => {
59
+ this._totalDuration = 0, this.forEachAccessAnimate((animate => {
47
60
  this._totalDuration = Math.max(this._totalDuration, animate.getStartTime() + animate.getDuration());
48
61
  }));
49
62
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/timeline.ts"],"names":[],"mappings":"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","file":"timeline.js","sourcesContent":["import { Generator, type IAnimate, type ITimeline, AnimateStatus } from '@visactor/vrender-core';\n\nexport class DefaultTimeline implements ITimeline {\n declare id: number;\n protected animates: IAnimate[] = [];\n protected declare paused: boolean;\n\n // 添加必要的属性\n protected _playSpeed: number = 1;\n protected _totalDuration: number = 0;\n protected _startTime: number = 0;\n protected _currentTime: number = 0;\n\n // 0 ... _endAnimatePtr ... animates.length\n // [0, _endAnimatePtr] 表示正在运行的动画\n // (_endAnimatePtr, animates.length) 表示已经结束的动画\n protected _endAnimatePtr: number = -1;\n\n declare isGlobal?: boolean;\n\n get animateCount() {\n return this.animates.length;\n }\n\n constructor() {\n this.id = Generator.GenAutoIncrementId();\n this.animates = [];\n this.paused = false;\n }\n\n isRunning() {\n return !this.paused && this._endAnimatePtr >= 0;\n }\n\n forEachAccessAnimate(cb: (animate: IAnimate, index: number) => void) {\n for (let i = 0; i <= this._endAnimatePtr; i++) {\n cb(this.animates[i], i);\n }\n }\n\n addAnimate(animate: IAnimate) {\n this.animates.push(animate);\n // 交换位置\n this._endAnimatePtr++;\n this.animates[this.animates.length - 1] = this.animates[this._endAnimatePtr];\n this.animates[this._endAnimatePtr] = animate;\n // 更新总时长\n this._totalDuration = Math.max(this._totalDuration, animate.getStartTime() + animate.getDuration());\n }\n\n pause() {\n this.paused = true;\n }\n\n resume() {\n this.paused = false;\n }\n\n tick(delta: number) {\n if (this.paused) {\n return;\n }\n\n // 应用播放速度\n const scaledDelta = delta * this._playSpeed;\n\n // 更新当前时间\n this._currentTime += scaledDelta;\n\n this.forEachAccessAnimate((animate, i) => {\n if (animate.status === AnimateStatus.END) {\n this.removeAnimate(animate, true, i);\n } else if (animate.status === AnimateStatus.RUNNING || animate.status === AnimateStatus.INITIAL) {\n animate.advance(scaledDelta);\n }\n });\n }\n\n clear() {\n this.forEachAccessAnimate(animate => {\n animate.release();\n });\n this.animates = [];\n this._totalDuration = 0;\n }\n\n removeAnimate(animate: IAnimate, release: boolean = true, index?: number) {\n if (this._endAnimatePtr < 0) {\n return;\n }\n if (release) {\n animate._onRemove && animate._onRemove.forEach(cb => cb());\n animate.release();\n }\n\n index = index ?? this.animates.indexOf(animate);\n // 交换位置\n this.animates[index] = this.animates[this._endAnimatePtr];\n this._endAnimatePtr--;\n return;\n }\n\n // 重新计算总时长\n protected recalculateTotalDuration() {\n this._totalDuration = 0;\n this.animates.forEach(animate => {\n this._totalDuration = Math.max(this._totalDuration, animate.getStartTime() + animate.getDuration());\n });\n }\n\n getTotalDuration() {\n return this._totalDuration;\n }\n\n getPlaySpeed() {\n return this._playSpeed;\n }\n\n setPlaySpeed(speed: number) {\n this._playSpeed = speed;\n }\n\n // 实现ITimeline接口所需的其他方法\n getPlayState(): 'playing' | 'paused' | 'stopped' {\n if (this.paused) {\n return 'paused';\n }\n if (this.animateCount === 0) {\n return 'stopped';\n }\n return 'playing';\n }\n\n setStartTime(time: number) {\n this._startTime = time;\n }\n\n getStartTime() {\n return this._startTime;\n }\n\n getCurrentTime() {\n return this._currentTime;\n }\n\n setCurrentTime(time: number) {\n this._currentTime = time;\n }\n}\n\n// 不会使用,存粹做临时存储用,请一定要放置到stage中才行\nexport const defaultTimeline = new DefaultTimeline();\ndefaultTimeline.isGlobal = true;\n"]}
1
+ {"version":3,"sources":["../src/timeline.ts"],"names":[],"mappings":"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","file":"timeline.js","sourcesContent":["import { Generator, type IAnimate, type ITimeline, AnimateStatus } from '@visactor/vrender-core';\n\n// 定义链表节点\ninterface AnimateNode {\n animate: IAnimate;\n next: AnimateNode | null;\n prev: AnimateNode | null;\n}\n\nexport class DefaultTimeline implements ITimeline {\n declare id: number;\n protected head: AnimateNode | null = null;\n protected tail: AnimateNode | null = null;\n protected animateMap: Map<IAnimate, AnimateNode> = new Map();\n protected _animateCount: number = 0;\n protected declare paused: boolean;\n\n // 添加必要的属性\n protected _playSpeed: number = 1;\n protected _totalDuration: number = 0;\n protected _startTime: number = 0;\n protected _currentTime: number = 0;\n\n declare isGlobal?: boolean;\n\n get animateCount() {\n return this._animateCount;\n }\n\n constructor() {\n this.id = Generator.GenAutoIncrementId();\n this.paused = false;\n }\n\n isRunning() {\n return !this.paused && this._animateCount > 0;\n }\n\n forEachAccessAnimate(cb: (animate: IAnimate, index: number) => void) {\n let current = this.head;\n let index = 0;\n\n while (current) {\n // 保存下一个节点的引用,以防在回调中移除当前节点\n const next = current.next;\n cb(current.animate, index);\n index++;\n current = next;\n }\n }\n\n addAnimate(animate: IAnimate) {\n const newNode: AnimateNode = {\n animate,\n next: null,\n prev: null\n };\n\n // 添加到链表尾部\n if (!this.head) {\n this.head = newNode;\n this.tail = newNode;\n } else {\n if (this.tail) {\n this.tail.next = newNode;\n newNode.prev = this.tail;\n this.tail = newNode;\n }\n }\n\n // 在映射中保存节点引用\n this.animateMap.set(animate, newNode);\n this._animateCount++;\n\n // 更新总时长\n this._totalDuration = Math.max(this._totalDuration, animate.getStartTime() + animate.getDuration());\n }\n\n pause() {\n this.paused = true;\n }\n\n resume() {\n this.paused = false;\n }\n\n tick(delta: number) {\n if (this.paused) {\n return;\n }\n\n // 应用播放速度\n const scaledDelta = delta * this._playSpeed;\n\n // 更新当前时间\n this._currentTime += scaledDelta;\n\n this.forEachAccessAnimate((animate, i) => {\n if (animate.status === AnimateStatus.END) {\n this.removeAnimate(animate, true);\n } else if (animate.status === AnimateStatus.RUNNING || animate.status === AnimateStatus.INITIAL) {\n animate.advance(scaledDelta);\n }\n });\n }\n\n clear() {\n this.forEachAccessAnimate(animate => {\n animate.release();\n });\n\n this.head = null;\n this.tail = null;\n this.animateMap.clear();\n this._animateCount = 0;\n this._totalDuration = 0;\n }\n\n removeAnimate(animate: IAnimate, release: boolean = true) {\n const node = this.animateMap.get(animate);\n\n if (!node) {\n return;\n }\n\n if (release) {\n animate._onRemove && animate._onRemove.forEach(cb => cb());\n animate.release();\n }\n\n // 从链表中移除节点\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n // 节点是头节点\n this.head = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n // 节点是尾节点\n this.tail = node.prev;\n }\n\n // 从映射中移除\n this.animateMap.delete(animate);\n this._animateCount--;\n\n // 如果移除的是最长时间的动画,应该重新计算总时长\n if (animate.getStartTime() + animate.getDuration() >= this._totalDuration) {\n this.recalculateTotalDuration();\n }\n\n return;\n }\n\n // 重新计算总时长\n protected recalculateTotalDuration() {\n this._totalDuration = 0;\n this.forEachAccessAnimate(animate => {\n this._totalDuration = Math.max(this._totalDuration, animate.getStartTime() + animate.getDuration());\n });\n }\n\n getTotalDuration() {\n return this._totalDuration;\n }\n\n getPlaySpeed() {\n return this._playSpeed;\n }\n\n setPlaySpeed(speed: number) {\n this._playSpeed = speed;\n }\n\n // 实现ITimeline接口所需的其他方法\n getPlayState(): 'playing' | 'paused' | 'stopped' {\n if (this.paused) {\n return 'paused';\n }\n if (this.animateCount === 0) {\n return 'stopped';\n }\n return 'playing';\n }\n\n setStartTime(time: number) {\n this._startTime = time;\n }\n\n getStartTime() {\n return this._startTime;\n }\n\n getCurrentTime() {\n return this._currentTime;\n }\n\n setCurrentTime(time: number) {\n this._currentTime = time;\n }\n}\n\n// 不会使用,存粹做临时存储用,请一定要放置到stage中才行\nexport const defaultTimeline = new DefaultTimeline();\ndefaultTimeline.isGlobal = true;\n"]}
@@ -4,4 +4,5 @@ export function generatorPathEasingFunc(path) {
4
4
  const customPath = new CustomPath2D;
5
5
  return customPath.setCtx(new CurveContext(customPath)), customPath.fromString(path, 0, 0, 1, 1),
6
6
  x => customPath.getYAt(x);
7
- }
7
+ }
8
+ //# sourceMappingURL=easing-func.js.map
@@ -0,0 +1,2 @@
1
+ export declare const transformKeys: string[];
2
+ export declare const isTransformKey: (key: string) => boolean;
@@ -0,0 +1,4 @@
1
+ export const transformKeys = [ "x", "y", "dx", "dy", "scaleX", "scaleY", "angle", "anchor", "postMatrix", "scrollX", "scrollY" ];
2
+
3
+ export const isTransformKey = key => transformKeys.includes(key);
4
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/transform.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,SAAS;CACV,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE;IAC5C,OAAO,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC","file":"transform.js","sourcesContent":["export const transformKeys = [\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor',\n 'postMatrix',\n 'scrollX',\n 'scrollY'\n];\nexport const isTransformKey = (key: string) => {\n return transformKeys.includes(key);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visactor/vrender-animate",
3
- "version": "1.0.0-alpha.4",
3
+ "version": "1.0.0-alpha.6",
4
4
  "description": "",
5
5
  "sideEffects": false,
6
6
  "main": "cjs/index.js",
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "dependencies": {
15
15
  "@visactor/vutils": "~0.19.5",
16
- "@visactor/vrender-core": "1.0.0-alpha.4"
16
+ "@visactor/vrender-core": "1.0.0-alpha.6"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@rushstack/eslint-patch": "~1.1.4",
@@ -30,8 +30,8 @@
30
30
  "typescript": "4.9.5",
31
31
  "cross-env": "^7.0.3",
32
32
  "@internal/bundler": "0.0.1",
33
- "@internal/eslint-config": "0.0.1",
34
- "@internal/ts-config": "0.0.1"
33
+ "@internal/ts-config": "0.0.1",
34
+ "@internal/eslint-config": "0.0.1"
35
35
  },
36
36
  "keywords": [
37
37
  "VisActor",