@cloudcome/utils-browser 1.2.18 → 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.
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/timer.cjs +34 -13
- package/dist/timer.cjs.map +1 -1
- package/dist/timer.d.ts +40 -3
- package/dist/timer.mjs +34 -13
- package/dist/timer.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
package/dist/index.mjs
CHANGED
package/dist/timer.cjs
CHANGED
|
@@ -4,37 +4,58 @@ let _cloudcome_utils_core_timer = require("@cloudcome/utils-core/timer");
|
|
|
4
4
|
/**
|
|
5
5
|
* 创建一个基于 `requestAnimationFrame` 的间隔定时器
|
|
6
6
|
*
|
|
7
|
-
* @
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // 无 condition
|
|
10
|
+
* frameInterval({
|
|
11
|
+
* runner: (state) => console.log(state.times),
|
|
12
|
+
* })
|
|
13
|
+
*
|
|
14
|
+
* // 有 condition,T 自动推断为 number
|
|
15
|
+
* frameInterval({
|
|
16
|
+
* condition: (state) => state.times,
|
|
17
|
+
* runner: (state) => state.data.toFixed(2),
|
|
18
|
+
* })
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
8
21
|
* @param options - 配置选项
|
|
9
22
|
* @returns {TimerHandler} 返回包含控制方法的对象
|
|
10
23
|
*/
|
|
11
|
-
function frameInterval(
|
|
24
|
+
function frameInterval(options) {
|
|
25
|
+
const { runner, condition, leading, trailing } = options;
|
|
12
26
|
let rafId;
|
|
13
|
-
const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = (0, _cloudcome_utils_core_timer.makeInterval)(
|
|
14
|
-
|
|
15
|
-
|
|
27
|
+
const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = (0, _cloudcome_utils_core_timer.makeInterval)({
|
|
28
|
+
dispatcher: (call) => {
|
|
29
|
+
rafId = requestAnimationFrame(call);
|
|
30
|
+
},
|
|
31
|
+
runner,
|
|
32
|
+
condition,
|
|
33
|
+
leading: leading ?? false,
|
|
34
|
+
trailing
|
|
35
|
+
});
|
|
16
36
|
return {
|
|
17
37
|
start() {
|
|
18
38
|
if (!canStart()) return;
|
|
19
|
-
|
|
20
|
-
else rafId = requestAnimationFrame(start);
|
|
39
|
+
start();
|
|
21
40
|
},
|
|
22
41
|
stop() {
|
|
23
42
|
if (!canStop()) return;
|
|
24
|
-
if (options?.trailing) execute();
|
|
25
|
-
cancelAnimationFrame(rafId);
|
|
26
43
|
stop();
|
|
44
|
+
cancelAnimationFrame(rafId);
|
|
27
45
|
},
|
|
28
46
|
pause() {
|
|
29
47
|
if (!canPause()) return;
|
|
30
|
-
if (options?.trailing) execute();
|
|
31
|
-
cancelAnimationFrame(rafId);
|
|
32
48
|
pause();
|
|
49
|
+
cancelAnimationFrame(rafId);
|
|
33
50
|
},
|
|
34
51
|
resume(immediate) {
|
|
35
52
|
if (!canResume()) return;
|
|
36
|
-
if (immediate ||
|
|
37
|
-
else rafId = requestAnimationFrame(resume);
|
|
53
|
+
if (immediate || leading) resume();
|
|
54
|
+
else rafId = requestAnimationFrame(() => resume());
|
|
55
|
+
},
|
|
56
|
+
execute() {
|
|
57
|
+
cancelAnimationFrame(rafId);
|
|
58
|
+
execute();
|
|
38
59
|
}
|
|
39
60
|
};
|
|
40
61
|
}
|
package/dist/timer.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer.cjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"timer.cjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {\n makeInterval,\n type TimerHandler,\n type TimerStateBase,\n type TimerState,\n type MakeIntervalOptions,\n} from '@cloudcome/utils-core/timer';\n\n/**\n * frameInterval 配置选项\n * @template T - condition 函数返回值类型\n */\nexport type FrameIntervalOptions<T> = {\n /**\n * 条件函数,每次执行前调用,返回值存入 state.data\n * 支持同步或异步返回值\n * 抛错时跳过本次 runner 执行,继续下一次调度\n */\n condition?: (state: TimerStateBase) => T;\n /**\n * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态\n */\n runner: (state: TimerState<Awaited<T>>) => unknown;\n /**\n * 是否在定时器启动时立即执行一次,默认为 false\n */\n leading?: boolean;\n /**\n * 是否在定时器停止或暂停时额外执行一次(trailing edge)\n */\n trailing?: boolean;\n};\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @example\n * ```typescript\n * // 无 condition\n * frameInterval({\n * runner: (state) => console.log(state.times),\n * })\n *\n * // 有 condition,T 自动推断为 number\n * frameInterval({\n * condition: (state) => state.times,\n * runner: (state) => state.data.toFixed(2),\n * })\n * ```\n *\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler {\n const { runner, condition, leading, trailing } = options;\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({\n dispatcher: (call) => {\n rafId = requestAnimationFrame(call);\n },\n runner: runner as MakeIntervalOptions<T>['runner'],\n condition,\n leading: leading ?? false,\n trailing,\n });\n\n return {\n start() {\n if (!canStart()) return;\n start();\n },\n\n stop() {\n if (!canStop()) return;\n stop();\n cancelAnimationFrame(rafId);\n },\n\n pause() {\n if (!canPause()) return;\n pause();\n cancelAnimationFrame(rafId);\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n if (immediate || leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(() => resume());\n }\n },\n\n execute() {\n cancelAnimationFrame(rafId);\n execute();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,cAAwB,SAAgD;CACtF,MAAM,EAAE,QAAQ,WAAW,SAAS,aAAa;CACjD,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,aAAA,GAAA,4BAAA,cAAyB;EACnG,aAAa,SAAS;GACpB,QAAQ,sBAAsB,KAAK;;EAE7B;EACR;EACA,SAAS,WAAW;EACpB;EACD,CAAC;CAEF,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;;EAGT,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,MAAM;GACN,qBAAqB,MAAM;;EAG7B,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;GACP,qBAAqB,MAAM;;EAG7B,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAClB,IAAI,aAAa,SACf,QAAQ;QAER,QAAQ,4BAA4B,QAAQ,CAAC;;EAIjD,UAAU;GACR,qBAAqB,MAAM;GAC3B,SAAS;;EAEZ"}
|
package/dist/timer.d.ts
CHANGED
|
@@ -1,9 +1,46 @@
|
|
|
1
|
-
import { TimerHandler,
|
|
1
|
+
import { TimerHandler, TimerStateBase, TimerState } from '@cloudcome/utils-core/timer';
|
|
2
|
+
/**
|
|
3
|
+
* frameInterval 配置选项
|
|
4
|
+
* @template T - condition 函数返回值类型
|
|
5
|
+
*/
|
|
6
|
+
export type FrameIntervalOptions<T> = {
|
|
7
|
+
/**
|
|
8
|
+
* 条件函数,每次执行前调用,返回值存入 state.data
|
|
9
|
+
* 支持同步或异步返回值
|
|
10
|
+
* 抛错时跳过本次 runner 执行,继续下一次调度
|
|
11
|
+
*/
|
|
12
|
+
condition?: (state: TimerStateBase) => T;
|
|
13
|
+
/**
|
|
14
|
+
* 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态
|
|
15
|
+
*/
|
|
16
|
+
runner: (state: TimerState<Awaited<T>>) => unknown;
|
|
17
|
+
/**
|
|
18
|
+
* 是否在定时器启动时立即执行一次,默认为 false
|
|
19
|
+
*/
|
|
20
|
+
leading?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 是否在定时器停止或暂停时额外执行一次(trailing edge)
|
|
23
|
+
*/
|
|
24
|
+
trailing?: boolean;
|
|
25
|
+
};
|
|
2
26
|
/**
|
|
3
27
|
* 创建一个基于 `requestAnimationFrame` 的间隔定时器
|
|
4
28
|
*
|
|
5
|
-
* @
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* // 无 condition
|
|
32
|
+
* frameInterval({
|
|
33
|
+
* runner: (state) => console.log(state.times),
|
|
34
|
+
* })
|
|
35
|
+
*
|
|
36
|
+
* // 有 condition,T 自动推断为 number
|
|
37
|
+
* frameInterval({
|
|
38
|
+
* condition: (state) => state.times,
|
|
39
|
+
* runner: (state) => state.data.toFixed(2),
|
|
40
|
+
* })
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
6
43
|
* @param options - 配置选项
|
|
7
44
|
* @returns {TimerHandler} 返回包含控制方法的对象
|
|
8
45
|
*/
|
|
9
|
-
export declare function frameInterval
|
|
46
|
+
export declare function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler;
|
package/dist/timer.mjs
CHANGED
|
@@ -3,37 +3,58 @@ import { makeInterval } from "@cloudcome/utils-core/timer";
|
|
|
3
3
|
/**
|
|
4
4
|
* 创建一个基于 `requestAnimationFrame` 的间隔定时器
|
|
5
5
|
*
|
|
6
|
-
* @
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // 无 condition
|
|
9
|
+
* frameInterval({
|
|
10
|
+
* runner: (state) => console.log(state.times),
|
|
11
|
+
* })
|
|
12
|
+
*
|
|
13
|
+
* // 有 condition,T 自动推断为 number
|
|
14
|
+
* frameInterval({
|
|
15
|
+
* condition: (state) => state.times,
|
|
16
|
+
* runner: (state) => state.data.toFixed(2),
|
|
17
|
+
* })
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
7
20
|
* @param options - 配置选项
|
|
8
21
|
* @returns {TimerHandler} 返回包含控制方法的对象
|
|
9
22
|
*/
|
|
10
|
-
function frameInterval(
|
|
23
|
+
function frameInterval(options) {
|
|
24
|
+
const { runner, condition, leading, trailing } = options;
|
|
11
25
|
let rafId;
|
|
12
|
-
const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval(
|
|
13
|
-
|
|
14
|
-
|
|
26
|
+
const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({
|
|
27
|
+
dispatcher: (call) => {
|
|
28
|
+
rafId = requestAnimationFrame(call);
|
|
29
|
+
},
|
|
30
|
+
runner,
|
|
31
|
+
condition,
|
|
32
|
+
leading: leading ?? false,
|
|
33
|
+
trailing
|
|
34
|
+
});
|
|
15
35
|
return {
|
|
16
36
|
start() {
|
|
17
37
|
if (!canStart()) return;
|
|
18
|
-
|
|
19
|
-
else rafId = requestAnimationFrame(start);
|
|
38
|
+
start();
|
|
20
39
|
},
|
|
21
40
|
stop() {
|
|
22
41
|
if (!canStop()) return;
|
|
23
|
-
if (options?.trailing) execute();
|
|
24
|
-
cancelAnimationFrame(rafId);
|
|
25
42
|
stop();
|
|
43
|
+
cancelAnimationFrame(rafId);
|
|
26
44
|
},
|
|
27
45
|
pause() {
|
|
28
46
|
if (!canPause()) return;
|
|
29
|
-
if (options?.trailing) execute();
|
|
30
|
-
cancelAnimationFrame(rafId);
|
|
31
47
|
pause();
|
|
48
|
+
cancelAnimationFrame(rafId);
|
|
32
49
|
},
|
|
33
50
|
resume(immediate) {
|
|
34
51
|
if (!canResume()) return;
|
|
35
|
-
if (immediate ||
|
|
36
|
-
else rafId = requestAnimationFrame(resume);
|
|
52
|
+
if (immediate || leading) resume();
|
|
53
|
+
else rafId = requestAnimationFrame(() => resume());
|
|
54
|
+
},
|
|
55
|
+
execute() {
|
|
56
|
+
cancelAnimationFrame(rafId);
|
|
57
|
+
execute();
|
|
37
58
|
}
|
|
38
59
|
};
|
|
39
60
|
}
|
package/dist/timer.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer.mjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"timer.mjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {\n makeInterval,\n type TimerHandler,\n type TimerStateBase,\n type TimerState,\n type MakeIntervalOptions,\n} from '@cloudcome/utils-core/timer';\n\n/**\n * frameInterval 配置选项\n * @template T - condition 函数返回值类型\n */\nexport type FrameIntervalOptions<T> = {\n /**\n * 条件函数,每次执行前调用,返回值存入 state.data\n * 支持同步或异步返回值\n * 抛错时跳过本次 runner 执行,继续下一次调度\n */\n condition?: (state: TimerStateBase) => T;\n /**\n * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态\n */\n runner: (state: TimerState<Awaited<T>>) => unknown;\n /**\n * 是否在定时器启动时立即执行一次,默认为 false\n */\n leading?: boolean;\n /**\n * 是否在定时器停止或暂停时额外执行一次(trailing edge)\n */\n trailing?: boolean;\n};\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @example\n * ```typescript\n * // 无 condition\n * frameInterval({\n * runner: (state) => console.log(state.times),\n * })\n *\n * // 有 condition,T 自动推断为 number\n * frameInterval({\n * condition: (state) => state.times,\n * runner: (state) => state.data.toFixed(2),\n * })\n * ```\n *\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler {\n const { runner, condition, leading, trailing } = options;\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({\n dispatcher: (call) => {\n rafId = requestAnimationFrame(call);\n },\n runner: runner as MakeIntervalOptions<T>['runner'],\n condition,\n leading: leading ?? false,\n trailing,\n });\n\n return {\n start() {\n if (!canStart()) return;\n start();\n },\n\n stop() {\n if (!canStop()) return;\n stop();\n cancelAnimationFrame(rafId);\n },\n\n pause() {\n if (!canPause()) return;\n pause();\n cancelAnimationFrame(rafId);\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n if (immediate || leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(() => resume());\n }\n },\n\n execute() {\n cancelAnimationFrame(rafId);\n execute();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,cAAwB,SAAgD;CACtF,MAAM,EAAE,QAAQ,WAAW,SAAS,aAAa;CACjD,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,YAAY,aAAa;EACnG,aAAa,SAAS;GACpB,QAAQ,sBAAsB,KAAK;;EAE7B;EACR;EACA,SAAS,WAAW;EACpB;EACD,CAAC;CAEF,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;;EAGT,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,MAAM;GACN,qBAAqB,MAAM;;EAG7B,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;GACP,qBAAqB,MAAM;;EAG7B,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAClB,IAAI,aAAa,SACf,QAAQ;QAER,QAAQ,4BAA4B,QAAQ,CAAC;;EAIjD,UAAU;GACR,qBAAqB,MAAM;GAC3B,SAAS;;EAEZ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcome/utils-browser",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "cloudcome utils for browser",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"node": ">=22"
|
|
106
106
|
},
|
|
107
107
|
"dependencies": {
|
|
108
|
-
"@cloudcome/utils-core": "~1.
|
|
108
|
+
"@cloudcome/utils-core": "~1.22.0"
|
|
109
109
|
},
|
|
110
110
|
"keywords": [
|
|
111
111
|
"cloudcome",
|