a-js-tools 2.0.1 → 2.0.3
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/README.md +5 -8
- package/{cjs/array/difference.js → array/difference.cjs.js} +1 -4
- package/{es/src/array → array}/difference.d.ts +1 -4
- package/{es/array/difference.js → array/difference.es.js} +1 -4
- package/{cjs/array/index.js → array/index.cjs.js} +13 -34
- package/{es/src/array → array}/index.d.ts +9 -30
- package/{es/array/index.js → array/index.es.js} +13 -34
- package/{cjs/array/intersection.js → array/intersection.cjs.js} +1 -6
- package/{es/src/array → array}/intersection.d.ts +1 -6
- package/{es/array/intersection.js → array/intersection.es.js} +1 -6
- package/{cjs/array/symmetricDifference.js → array/symmetricDifference.cjs.js} +2 -8
- package/{es/src/array → array}/symmetricDifference.d.ts +1 -7
- package/{es/array/symmetricDifference.js → array/symmetricDifference.es.js} +2 -8
- package/{cjs/className.js → className.cjs.js} +0 -4
- package/{es/src/className.d.ts → className.d.ts} +0 -4
- package/{es/className.js → className.es.js} +0 -4
- package/createBezier.cjs.js +136 -0
- package/createBezier.d.ts +65 -0
- package/createBezier.es.js +134 -0
- package/{cjs/getRandomNumber.js → getRandomNumber.cjs.js} +3 -9
- package/{es/src/getRandomNumber.d.ts → getRandomNumber.d.ts} +2 -4
- package/{es/getRandomNumber.js → getRandomNumber.es.js} +3 -9
- package/{cjs/getRandomString.js → getRandomString.cjs.js} +21 -21
- package/{es/src/getRandomString.d.ts → getRandomString.d.ts} +11 -8
- package/{es/getRandomString.js → getRandomString.es.js} +21 -21
- package/{cjs/index.js → index.cjs.js} +18 -16
- package/{es/src/index.d.ts → index.d.ts} +1 -0
- package/index.es.js +15 -0
- package/{cjs/isNode.js → isNode.cjs.js} +0 -4
- package/{es/src/isNode.d.ts → isNode.d.ts} +0 -4
- package/{es/isNode.js → isNode.es.js} +0 -4
- package/{cjs/object/createConstructor.js → object/createConstructor.cjs.js} +2 -5
- package/{es/src/object → object}/createConstructor.d.ts +2 -8
- package/{es/object/createConstructor.js → object/createConstructor.es.js} +2 -5
- package/package.json +80 -51
- package/{cjs/performance.js → performance.cjs.js} +8 -16
- package/{es/src/performance.d.ts → performance.d.ts} +4 -15
- package/{es/performance.js → performance.es.js} +5 -13
- package/{cjs/regexp/autoEscapedRegExp.js → regexp/autoEscapedRegExp.cjs.js} +3 -7
- package/{es/src/regexp → regexp}/autoEscapedRegExp.d.ts +1 -5
- package/{es/regexp/autoEscapedRegExp.js → regexp/autoEscapedRegExp.es.js} +3 -7
- package/regexp/escapeRegExp.cjs.js +22 -0
- package/regexp/escapeRegExp.d.ts +16 -0
- package/regexp/escapeRegExp.es.js +20 -0
- package/{cjs/regexp/parse.js → regexp/parse.cjs.js} +0 -2
- package/{es/src/regexp → regexp}/parse.d.ts +0 -2
- package/{es/regexp/parse.js → regexp/parse.es.js} +0 -2
- package/{es/src/regexp → regexp}/types.d.ts +0 -5
- package/{cjs/sleep.js → sleep.cjs.js} +3 -6
- package/{es/src/sleep.d.ts → sleep.d.ts} +0 -3
- package/{es/sleep.js → sleep.es.js} +2 -5
- package/cjs/regexp/escapeRegExp.js +0 -24
- package/es/index.js +0 -14
- package/es/regexp/escapeRegExp.js +0 -22
- package/es/src/regexp/escapeRegExp.d.ts +0 -18
- /package/{cjs/array/union.js → array/union.cjs.js} +0 -0
- /package/{es/src/array → array}/union.d.ts +0 -0
- /package/{es/array/union.js → array/union.es.js} +0 -0
- /package/{es/src/object → object}/index.d.ts +0 -0
- /package/{es/src/regexp → regexp}/index.d.ts +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @module @a-js-tools/createBezier
|
|
5
|
+
* @file createBezier.ts
|
|
6
|
+
* @description 生成贝尔赛曲线
|
|
7
|
+
* @author Mr.MudBean <Mr.MudBean@outlook.com>
|
|
8
|
+
* @copyright 2026 ©️ Mr.MudBean
|
|
9
|
+
* @since 2026-03-26 11:24
|
|
10
|
+
* @version 2.0.2
|
|
11
|
+
* @lastModified 2026-03-26 14:12
|
|
12
|
+
*
|
|
13
|
+
* ## [贝尔赛曲线](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference/Values/easing-function#%E4%B8%89%E6%AC%A1%E8%B4%9D%E5%A1%9E%E5%B0%94%E7%BC%93%E5%8A%A8%E5%87%BD%E6%95%B0)
|
|
14
|
+
*
|
|
15
|
+
* 一种通过控制点生成光滑曲线的数学参数曲线,是平滑插值曲线。
|
|
16
|
+
*
|
|
17
|
+
* 广泛应用于计算机图像学、字体设计、动画游戏开发、工业设计和医学图像处理。
|
|
18
|
+
*
|
|
19
|
+
* 常见的贝尔赛曲线类型有二次和三次,其中三次贝尔赛曲线使用最多。曲线具有端点插值、凸包性。
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* ## 在 JS 中模拟 CSS cubic-bezier(p1x, p1y, p2x, p2y)
|
|
24
|
+
*
|
|
25
|
+
* @param p1x - 第一个控制点 X
|
|
26
|
+
* @param p1y - 第一个控制点 Y
|
|
27
|
+
* @param p2x - 第二个控制点 X
|
|
28
|
+
* @param p2y - 第二个控制点 Y
|
|
29
|
+
* @returns 一个接收时间 t (0-1) 返回进度值 (0-1 或超出) 的函数
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* // --- 使用示例 ---
|
|
33
|
+
*
|
|
34
|
+
* // 1. 定义一个类似 CSS 'ease-in-out' 的曲线: cubic-bezier(0.42, 0, 0.58, 1)
|
|
35
|
+
* const myEaseInOut = createBezier(0.42, 0, 0.58, 1);
|
|
36
|
+
*
|
|
37
|
+
* // 2. 定义一个带回弹效果的曲线: cubic-bezier(0.68, -0.55, 0.27, 1.55)
|
|
38
|
+
* const myElastic = createBezier(0.68, -0.55, 0.27, 1.55);
|
|
39
|
+
*
|
|
40
|
+
* // 3. 在 JS 动画循环中使用
|
|
41
|
+
* let startTime = null;
|
|
42
|
+
* const duration = 1000; // 1秒
|
|
43
|
+
* const element = document.getElementById('box');
|
|
44
|
+
*
|
|
45
|
+
* function animate(timestamp) {
|
|
46
|
+
* if (!startTime) startTime = timestamp;
|
|
47
|
+
* const elapsed = timestamp - startTime;
|
|
48
|
+
*
|
|
49
|
+
* // 计算归一化时间 (0 到 1)
|
|
50
|
+
* let rawTime = Math.min(elapsed / duration, 1);
|
|
51
|
+
*
|
|
52
|
+
* // 【关键点】将线性时间 rawTime 传入贝塞尔函数,得到非线性进度
|
|
53
|
+
* const progress = myElastic(rawTime);
|
|
54
|
+
*
|
|
55
|
+
* // 应用进度 (例如移动距离)
|
|
56
|
+
* const distance = 300 * progress;
|
|
57
|
+
* element.style.transform = `translateX(${distance}px)`;
|
|
58
|
+
*
|
|
59
|
+
* if (elapsed < duration) {
|
|
60
|
+
* requestAnimationFrame(animate);
|
|
61
|
+
* }
|
|
62
|
+
* }
|
|
63
|
+
*
|
|
64
|
+
* requestAnimationFrame(animate);
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
function createBezier(p1x, p1y, p2x, p2y) {
|
|
68
|
+
// 三次贝塞尔曲线公式: B(t) = (1-t)^3 * P0 + 3(1-t)^2*t * P1 + 3(1-t)*t^2 * P2 + t^3 * P3
|
|
69
|
+
// 这里 P0=(0,0), P3=(1,1)
|
|
70
|
+
const cx = 3 * p1x;
|
|
71
|
+
const bx = 3 * (p2x - p1x) - cx;
|
|
72
|
+
const ax = 1 - cx - bx;
|
|
73
|
+
const cy = 3 * p1y;
|
|
74
|
+
const by = 3 * (p2y - p1y) - cy;
|
|
75
|
+
const ay = 1 - cy - by;
|
|
76
|
+
// 计算给定 t 的 x 值
|
|
77
|
+
/**
|
|
78
|
+
* @param t
|
|
79
|
+
*/
|
|
80
|
+
function sampleCurveX(t) {
|
|
81
|
+
return ((ax * t + bx) * t + cx) * t;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* ### 计算给定 t 的 y 值
|
|
85
|
+
* @param t 时间进度
|
|
86
|
+
*/
|
|
87
|
+
function sampleCurveY(t) {
|
|
88
|
+
return ((ay * t + by) * t + cy) * t;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* ### 核心难点:已知 x (时间),求 t。因为 x(t) 是单调的,可以用牛顿迭代法求解
|
|
92
|
+
* @param x 时间进度
|
|
93
|
+
*/
|
|
94
|
+
function getTForX(x) {
|
|
95
|
+
let t0, t1, t2, x2, d2;
|
|
96
|
+
// 初始猜测
|
|
97
|
+
t2 = x;
|
|
98
|
+
// 牛顿迭代法 (通常 8 次足够精确)
|
|
99
|
+
for (let i = 0; i < 8; i++) {
|
|
100
|
+
x2 = sampleCurveX(t2) - x;
|
|
101
|
+
if (Math.abs(x2) < 1e-6)
|
|
102
|
+
return t2;
|
|
103
|
+
d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;
|
|
104
|
+
if (Math.abs(d2) < 1e-6)
|
|
105
|
+
break;
|
|
106
|
+
t2 = t2 - x2 / d2;
|
|
107
|
+
}
|
|
108
|
+
// 如果牛顿法失败,退化为二分法
|
|
109
|
+
t0 = 0;
|
|
110
|
+
t1 = 1;
|
|
111
|
+
t2 = x;
|
|
112
|
+
while (t0 < t1) {
|
|
113
|
+
x2 = sampleCurveX(t2);
|
|
114
|
+
if (Math.abs(x2 - x) < 1e-6)
|
|
115
|
+
return t2;
|
|
116
|
+
if (x > x2)
|
|
117
|
+
t0 = t2;
|
|
118
|
+
else
|
|
119
|
+
t1 = t2;
|
|
120
|
+
t2 = (t1 - t0) * 0.5 + t0;
|
|
121
|
+
}
|
|
122
|
+
return t2;
|
|
123
|
+
}
|
|
124
|
+
// 返回最终的计算函数
|
|
125
|
+
return function (t) {
|
|
126
|
+
// 边界处理:CSS 允许 t < 0 或 t > 1 (产生回弹效果)
|
|
127
|
+
if (t <= 0)
|
|
128
|
+
return sampleCurveY(0);
|
|
129
|
+
if (t >= 1)
|
|
130
|
+
return sampleCurveY(1);
|
|
131
|
+
const realT = getTForX(t);
|
|
132
|
+
return sampleCurveY(realT);
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
exports.createBezier = createBezier;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @a-js-tools/createBezier
|
|
3
|
+
* @file createBezier.ts
|
|
4
|
+
* @description 生成贝尔赛曲线
|
|
5
|
+
* @author Mr.MudBean <Mr.MudBean@outlook.com>
|
|
6
|
+
* @copyright 2026 ©️ Mr.MudBean
|
|
7
|
+
* @since 2026-03-26 11:24
|
|
8
|
+
* @version 2.0.2
|
|
9
|
+
* @lastModified 2026-03-26 14:12
|
|
10
|
+
*
|
|
11
|
+
* ## [贝尔赛曲线](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference/Values/easing-function#%E4%B8%89%E6%AC%A1%E8%B4%9D%E5%A1%9E%E5%B0%94%E7%BC%93%E5%8A%A8%E5%87%BD%E6%95%B0)
|
|
12
|
+
*
|
|
13
|
+
* 一种通过控制点生成光滑曲线的数学参数曲线,是平滑插值曲线。
|
|
14
|
+
*
|
|
15
|
+
* 广泛应用于计算机图像学、字体设计、动画游戏开发、工业设计和医学图像处理。
|
|
16
|
+
*
|
|
17
|
+
* 常见的贝尔赛曲线类型有二次和三次,其中三次贝尔赛曲线使用最多。曲线具有端点插值、凸包性。
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* ## 在 JS 中模拟 CSS cubic-bezier(p1x, p1y, p2x, p2y)
|
|
22
|
+
*
|
|
23
|
+
* @param p1x - 第一个控制点 X
|
|
24
|
+
* @param p1y - 第一个控制点 Y
|
|
25
|
+
* @param p2x - 第二个控制点 X
|
|
26
|
+
* @param p2y - 第二个控制点 Y
|
|
27
|
+
* @returns 一个接收时间 t (0-1) 返回进度值 (0-1 或超出) 的函数
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* // --- 使用示例 ---
|
|
31
|
+
*
|
|
32
|
+
* // 1. 定义一个类似 CSS 'ease-in-out' 的曲线: cubic-bezier(0.42, 0, 0.58, 1)
|
|
33
|
+
* const myEaseInOut = createBezier(0.42, 0, 0.58, 1);
|
|
34
|
+
*
|
|
35
|
+
* // 2. 定义一个带回弹效果的曲线: cubic-bezier(0.68, -0.55, 0.27, 1.55)
|
|
36
|
+
* const myElastic = createBezier(0.68, -0.55, 0.27, 1.55);
|
|
37
|
+
*
|
|
38
|
+
* // 3. 在 JS 动画循环中使用
|
|
39
|
+
* let startTime = null;
|
|
40
|
+
* const duration = 1000; // 1秒
|
|
41
|
+
* const element = document.getElementById('box');
|
|
42
|
+
*
|
|
43
|
+
* function animate(timestamp) {
|
|
44
|
+
* if (!startTime) startTime = timestamp;
|
|
45
|
+
* const elapsed = timestamp - startTime;
|
|
46
|
+
*
|
|
47
|
+
* // 计算归一化时间 (0 到 1)
|
|
48
|
+
* let rawTime = Math.min(elapsed / duration, 1);
|
|
49
|
+
*
|
|
50
|
+
* // 【关键点】将线性时间 rawTime 传入贝塞尔函数,得到非线性进度
|
|
51
|
+
* const progress = myElastic(rawTime);
|
|
52
|
+
*
|
|
53
|
+
* // 应用进度 (例如移动距离)
|
|
54
|
+
* const distance = 300 * progress;
|
|
55
|
+
* element.style.transform = `translateX(${distance}px)`;
|
|
56
|
+
*
|
|
57
|
+
* if (elapsed < duration) {
|
|
58
|
+
* requestAnimationFrame(animate);
|
|
59
|
+
* }
|
|
60
|
+
* }
|
|
61
|
+
*
|
|
62
|
+
* requestAnimationFrame(animate);
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function createBezier(p1x: number, p1y: number, p2x: number, p2y: number): (t: number) => number;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @a-js-tools/createBezier
|
|
3
|
+
* @file createBezier.ts
|
|
4
|
+
* @description 生成贝尔赛曲线
|
|
5
|
+
* @author Mr.MudBean <Mr.MudBean@outlook.com>
|
|
6
|
+
* @copyright 2026 ©️ Mr.MudBean
|
|
7
|
+
* @since 2026-03-26 11:24
|
|
8
|
+
* @version 2.0.2
|
|
9
|
+
* @lastModified 2026-03-26 14:12
|
|
10
|
+
*
|
|
11
|
+
* ## [贝尔赛曲线](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference/Values/easing-function#%E4%B8%89%E6%AC%A1%E8%B4%9D%E5%A1%9E%E5%B0%94%E7%BC%93%E5%8A%A8%E5%87%BD%E6%95%B0)
|
|
12
|
+
*
|
|
13
|
+
* 一种通过控制点生成光滑曲线的数学参数曲线,是平滑插值曲线。
|
|
14
|
+
*
|
|
15
|
+
* 广泛应用于计算机图像学、字体设计、动画游戏开发、工业设计和医学图像处理。
|
|
16
|
+
*
|
|
17
|
+
* 常见的贝尔赛曲线类型有二次和三次,其中三次贝尔赛曲线使用最多。曲线具有端点插值、凸包性。
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* ## 在 JS 中模拟 CSS cubic-bezier(p1x, p1y, p2x, p2y)
|
|
22
|
+
*
|
|
23
|
+
* @param p1x - 第一个控制点 X
|
|
24
|
+
* @param p1y - 第一个控制点 Y
|
|
25
|
+
* @param p2x - 第二个控制点 X
|
|
26
|
+
* @param p2y - 第二个控制点 Y
|
|
27
|
+
* @returns 一个接收时间 t (0-1) 返回进度值 (0-1 或超出) 的函数
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* // --- 使用示例 ---
|
|
31
|
+
*
|
|
32
|
+
* // 1. 定义一个类似 CSS 'ease-in-out' 的曲线: cubic-bezier(0.42, 0, 0.58, 1)
|
|
33
|
+
* const myEaseInOut = createBezier(0.42, 0, 0.58, 1);
|
|
34
|
+
*
|
|
35
|
+
* // 2. 定义一个带回弹效果的曲线: cubic-bezier(0.68, -0.55, 0.27, 1.55)
|
|
36
|
+
* const myElastic = createBezier(0.68, -0.55, 0.27, 1.55);
|
|
37
|
+
*
|
|
38
|
+
* // 3. 在 JS 动画循环中使用
|
|
39
|
+
* let startTime = null;
|
|
40
|
+
* const duration = 1000; // 1秒
|
|
41
|
+
* const element = document.getElementById('box');
|
|
42
|
+
*
|
|
43
|
+
* function animate(timestamp) {
|
|
44
|
+
* if (!startTime) startTime = timestamp;
|
|
45
|
+
* const elapsed = timestamp - startTime;
|
|
46
|
+
*
|
|
47
|
+
* // 计算归一化时间 (0 到 1)
|
|
48
|
+
* let rawTime = Math.min(elapsed / duration, 1);
|
|
49
|
+
*
|
|
50
|
+
* // 【关键点】将线性时间 rawTime 传入贝塞尔函数,得到非线性进度
|
|
51
|
+
* const progress = myElastic(rawTime);
|
|
52
|
+
*
|
|
53
|
+
* // 应用进度 (例如移动距离)
|
|
54
|
+
* const distance = 300 * progress;
|
|
55
|
+
* element.style.transform = `translateX(${distance}px)`;
|
|
56
|
+
*
|
|
57
|
+
* if (elapsed < duration) {
|
|
58
|
+
* requestAnimationFrame(animate);
|
|
59
|
+
* }
|
|
60
|
+
* }
|
|
61
|
+
*
|
|
62
|
+
* requestAnimationFrame(animate);
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
function createBezier(p1x, p1y, p2x, p2y) {
|
|
66
|
+
// 三次贝塞尔曲线公式: B(t) = (1-t)^3 * P0 + 3(1-t)^2*t * P1 + 3(1-t)*t^2 * P2 + t^3 * P3
|
|
67
|
+
// 这里 P0=(0,0), P3=(1,1)
|
|
68
|
+
const cx = 3 * p1x;
|
|
69
|
+
const bx = 3 * (p2x - p1x) - cx;
|
|
70
|
+
const ax = 1 - cx - bx;
|
|
71
|
+
const cy = 3 * p1y;
|
|
72
|
+
const by = 3 * (p2y - p1y) - cy;
|
|
73
|
+
const ay = 1 - cy - by;
|
|
74
|
+
// 计算给定 t 的 x 值
|
|
75
|
+
/**
|
|
76
|
+
* @param t
|
|
77
|
+
*/
|
|
78
|
+
function sampleCurveX(t) {
|
|
79
|
+
return ((ax * t + bx) * t + cx) * t;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* ### 计算给定 t 的 y 值
|
|
83
|
+
* @param t 时间进度
|
|
84
|
+
*/
|
|
85
|
+
function sampleCurveY(t) {
|
|
86
|
+
return ((ay * t + by) * t + cy) * t;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* ### 核心难点:已知 x (时间),求 t。因为 x(t) 是单调的,可以用牛顿迭代法求解
|
|
90
|
+
* @param x 时间进度
|
|
91
|
+
*/
|
|
92
|
+
function getTForX(x) {
|
|
93
|
+
let t0, t1, t2, x2, d2;
|
|
94
|
+
// 初始猜测
|
|
95
|
+
t2 = x;
|
|
96
|
+
// 牛顿迭代法 (通常 8 次足够精确)
|
|
97
|
+
for (let i = 0; i < 8; i++) {
|
|
98
|
+
x2 = sampleCurveX(t2) - x;
|
|
99
|
+
if (Math.abs(x2) < 1e-6)
|
|
100
|
+
return t2;
|
|
101
|
+
d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;
|
|
102
|
+
if (Math.abs(d2) < 1e-6)
|
|
103
|
+
break;
|
|
104
|
+
t2 = t2 - x2 / d2;
|
|
105
|
+
}
|
|
106
|
+
// 如果牛顿法失败,退化为二分法
|
|
107
|
+
t0 = 0;
|
|
108
|
+
t1 = 1;
|
|
109
|
+
t2 = x;
|
|
110
|
+
while (t0 < t1) {
|
|
111
|
+
x2 = sampleCurveX(t2);
|
|
112
|
+
if (Math.abs(x2 - x) < 1e-6)
|
|
113
|
+
return t2;
|
|
114
|
+
if (x > x2)
|
|
115
|
+
t0 = t2;
|
|
116
|
+
else
|
|
117
|
+
t1 = t2;
|
|
118
|
+
t2 = (t1 - t0) * 0.5 + t0;
|
|
119
|
+
}
|
|
120
|
+
return t2;
|
|
121
|
+
}
|
|
122
|
+
// 返回最终的计算函数
|
|
123
|
+
return function (t) {
|
|
124
|
+
// 边界处理:CSS 允许 t < 0 或 t > 1 (产生回弹效果)
|
|
125
|
+
if (t <= 0)
|
|
126
|
+
return sampleCurveY(0);
|
|
127
|
+
if (t >= 1)
|
|
128
|
+
return sampleCurveY(1);
|
|
129
|
+
const realT = getTForX(t);
|
|
130
|
+
return sampleCurveY(realT);
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export { createBezier };
|
|
@@ -3,15 +3,10 @@
|
|
|
3
3
|
var aTypeOfJs = require('a-type-of-js');
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* @packageDocumentation
|
|
9
|
-
* @module @a-js-tools/get-random-number
|
|
10
|
-
* @license MIT
|
|
6
|
+
* 获取随机数
|
|
11
7
|
*/
|
|
12
8
|
/**
|
|
13
|
-
*
|
|
14
|
-
* 获取一个随机的整数类型
|
|
9
|
+
* ## 获取一个随机的整数类型
|
|
15
10
|
*
|
|
16
11
|
* 您可以传入两个参数并获取它们之间的任意数字,返回值<span style="color:#ff0;">*会包含端值*</span>
|
|
17
12
|
*
|
|
@@ -44,8 +39,7 @@ function getRandomInt(max = 1, min = 0) {
|
|
|
44
39
|
return Math.round(Math.random() * (_max - _min) + _min);
|
|
45
40
|
}
|
|
46
41
|
/**
|
|
47
|
-
*
|
|
48
|
-
* 获取任意的浮点数
|
|
42
|
+
* ## 获取任意的浮点数
|
|
49
43
|
*
|
|
50
44
|
* 您可以传入两个参数并获取它们之间的任意数字
|
|
51
45
|
*
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* 获取一个随机的整数类型
|
|
2
|
+
* ## 获取一个随机的整数类型
|
|
4
3
|
*
|
|
5
4
|
* 您可以传入两个参数并获取它们之间的任意数字,返回值<span style="color:#ff0;">*会包含端值*</span>
|
|
6
5
|
*
|
|
@@ -12,8 +11,7 @@
|
|
|
12
11
|
*/
|
|
13
12
|
export declare function getRandomInt(max?: number, min?: number): number;
|
|
14
13
|
/**
|
|
15
|
-
*
|
|
16
|
-
* 获取任意的浮点数
|
|
14
|
+
* ## 获取任意的浮点数
|
|
17
15
|
*
|
|
18
16
|
* 您可以传入两个参数并获取它们之间的任意数字
|
|
19
17
|
*
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import { isNaN, isNumber } from 'a-type-of-js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* @packageDocumentation
|
|
7
|
-
* @module @a-js-tools/get-random-number
|
|
8
|
-
* @license MIT
|
|
4
|
+
* 获取随机数
|
|
9
5
|
*/
|
|
10
6
|
/**
|
|
11
|
-
*
|
|
12
|
-
* 获取一个随机的整数类型
|
|
7
|
+
* ## 获取一个随机的整数类型
|
|
13
8
|
*
|
|
14
9
|
* 您可以传入两个参数并获取它们之间的任意数字,返回值<span style="color:#ff0;">*会包含端值*</span>
|
|
15
10
|
*
|
|
@@ -42,8 +37,7 @@ function getRandomInt(max = 1, min = 0) {
|
|
|
42
37
|
return Math.round(Math.random() * (_max - _min) + _min);
|
|
43
38
|
}
|
|
44
39
|
/**
|
|
45
|
-
*
|
|
46
|
-
* 获取任意的浮点数
|
|
40
|
+
* ## 获取任意的浮点数
|
|
47
41
|
*
|
|
48
42
|
* 您可以传入两个参数并获取它们之间的任意数字
|
|
49
43
|
*
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var aTypeOfJs = require('a-type-of-js');
|
|
4
|
-
var createConstructor = require('./object/createConstructor.js');
|
|
5
|
-
var getRandomNumber = require('./getRandomNumber.js');
|
|
4
|
+
var createConstructor = require('./object/createConstructor.cjs.js');
|
|
5
|
+
var getRandomNumber = require('./getRandomNumber.cjs.js');
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* 获取随机字符串
|
|
9
|
-
*
|
|
10
|
-
* @packageDocumentation
|
|
11
|
-
* @module @a-js-tools/get-random-string
|
|
12
|
-
* @license MIT
|
|
13
9
|
*/
|
|
14
10
|
/**
|
|
11
|
+
* 获取简单的随机字符串
|
|
15
12
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
13
|
+
* @param options - 字符串生成参数
|
|
14
|
+
* @returns - 随机字符串
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { getRandomString } from 'a-js-tools';
|
|
21
18
|
*
|
|
19
|
+
* // 获取简单的随机字符串
|
|
20
|
+
* // 'abcdefg'
|
|
21
|
+
* // getRandomString(7);
|
|
22
|
+
* ```
|
|
22
23
|
*/
|
|
23
24
|
function getRandomString(options) {
|
|
24
25
|
// 验证输入参数
|
|
@@ -90,18 +91,17 @@ function getRandomString(options) {
|
|
|
90
91
|
result += str[getRandomNumber.getRandomInt(strLen - 1)];
|
|
91
92
|
}
|
|
92
93
|
/**
|
|
94
|
+
* ## 字符串交叉函数
|
|
93
95
|
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* 非线形串交叉,对相交叉
|
|
96
|
+
* 非线形串交叉,对相交叉
|
|
97
97
|
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
98
|
+
* @param str1 - 字符串1
|
|
99
|
+
* @param str2 - 字符串2
|
|
100
|
+
* @returns - 交叉后的字符串
|
|
101
|
+
* @example
|
|
102
|
+
* ```ts
|
|
103
|
+
* interleaveString('abc', '123') // 'a1b2c3'
|
|
104
|
+
* ```
|
|
105
105
|
*/
|
|
106
106
|
function interleaveString(str1, str2) {
|
|
107
107
|
const str1Length = str1.length, str2Length = str2.length;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* 随机字符串 生成器
|
|
4
|
-
*
|
|
2
|
+
* 随机字符串生成器
|
|
5
3
|
*/
|
|
6
4
|
export type RandomStringOptions = {
|
|
7
5
|
/**
|
|
@@ -43,12 +41,17 @@ export type RandomStringOptions = {
|
|
|
43
41
|
type?: 'string' | 'uuid';
|
|
44
42
|
};
|
|
45
43
|
/**
|
|
44
|
+
* 获取简单的随机字符串
|
|
46
45
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
46
|
+
* @param options - 字符串生成参数
|
|
47
|
+
* @returns - 随机字符串
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* import { getRandomString } from 'a-js-tools';
|
|
52
51
|
*
|
|
52
|
+
* // 获取简单的随机字符串
|
|
53
|
+
* // 'abcdefg'
|
|
54
|
+
* // getRandomString(7);
|
|
55
|
+
* ```
|
|
53
56
|
*/
|
|
54
57
|
export declare function getRandomString(options?: RandomStringOptions | number): string;
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { isPlainObject, isNumber, isNaN, isUndefined } from 'a-type-of-js';
|
|
2
|
-
import { ObjectAssign } from './object/createConstructor.js';
|
|
3
|
-
import { getRandomInt } from './getRandomNumber.js';
|
|
2
|
+
import { ObjectAssign } from './object/createConstructor.es.js';
|
|
3
|
+
import { getRandomInt } from './getRandomNumber.es.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 获取随机字符串
|
|
7
|
-
*
|
|
8
|
-
* @packageDocumentation
|
|
9
|
-
* @module @a-js-tools/get-random-string
|
|
10
|
-
* @license MIT
|
|
11
7
|
*/
|
|
12
8
|
/**
|
|
9
|
+
* 获取简单的随机字符串
|
|
13
10
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
11
|
+
* @param options - 字符串生成参数
|
|
12
|
+
* @returns - 随机字符串
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { getRandomString } from 'a-js-tools';
|
|
19
16
|
*
|
|
17
|
+
* // 获取简单的随机字符串
|
|
18
|
+
* // 'abcdefg'
|
|
19
|
+
* // getRandomString(7);
|
|
20
|
+
* ```
|
|
20
21
|
*/
|
|
21
22
|
function getRandomString(options) {
|
|
22
23
|
// 验证输入参数
|
|
@@ -88,18 +89,17 @@ function getRandomString(options) {
|
|
|
88
89
|
result += str[getRandomInt(strLen - 1)];
|
|
89
90
|
}
|
|
90
91
|
/**
|
|
92
|
+
* ## 字符串交叉函数
|
|
91
93
|
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* 非线形串交叉,对相交叉
|
|
94
|
+
* 非线形串交叉,对相交叉
|
|
95
95
|
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
96
|
+
* @param str1 - 字符串1
|
|
97
|
+
* @param str2 - 字符串2
|
|
98
|
+
* @returns - 交叉后的字符串
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* interleaveString('abc', '123') // 'a1b2c3'
|
|
102
|
+
* ```
|
|
103
103
|
*/
|
|
104
104
|
function interleaveString(str1, str2) {
|
|
105
105
|
const str1Length = str1.length, str2Length = str2.length;
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var className = require('./className.js');
|
|
4
|
-
var createConstructor = require('./object/createConstructor.js');
|
|
5
|
-
var getRandomNumber = require('./getRandomNumber.js');
|
|
6
|
-
var getRandomString = require('./getRandomString.js');
|
|
7
|
-
var performance = require('./performance.js');
|
|
8
|
-
var escapeRegExp = require('./regexp/escapeRegExp.js');
|
|
9
|
-
var autoEscapedRegExp = require('./regexp/autoEscapedRegExp.js');
|
|
10
|
-
var isNode = require('./isNode.js');
|
|
11
|
-
var index = require('./array/index.js');
|
|
12
|
-
var sleep = require('./sleep.js');
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var symmetricDifference = require('./array/symmetricDifference.js');
|
|
3
|
+
var className = require('./className.cjs.js');
|
|
4
|
+
var createConstructor = require('./object/createConstructor.cjs.js');
|
|
5
|
+
var getRandomNumber = require('./getRandomNumber.cjs.js');
|
|
6
|
+
var getRandomString = require('./getRandomString.cjs.js');
|
|
7
|
+
var performance = require('./performance.cjs.js');
|
|
8
|
+
var escapeRegExp = require('./regexp/escapeRegExp.cjs.js');
|
|
9
|
+
var autoEscapedRegExp = require('./regexp/autoEscapedRegExp.cjs.js');
|
|
10
|
+
var isNode = require('./isNode.cjs.js');
|
|
11
|
+
var index = require('./array/index.cjs.js');
|
|
12
|
+
var sleep = require('./sleep.cjs.js');
|
|
13
|
+
var createBezier = require('./createBezier.cjs.js');
|
|
14
|
+
var difference = require('./array/difference.cjs.js');
|
|
15
|
+
var intersection = require('./array/intersection.cjs.js');
|
|
16
|
+
var symmetricDifference = require('./array/symmetricDifference.cjs.js');
|
|
17
|
+
var union = require('./array/union.cjs.js');
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
|
|
@@ -32,7 +33,8 @@ exports.isBrowser = isNode.isBrowser;
|
|
|
32
33
|
exports.isNode = isNode.isNode;
|
|
33
34
|
exports.enArr = index.enArr;
|
|
34
35
|
exports.sleep = sleep.sleep;
|
|
35
|
-
exports.
|
|
36
|
-
exports.union = union.union;
|
|
36
|
+
exports.createBezier = createBezier.createBezier;
|
|
37
37
|
exports.difference = difference.difference;
|
|
38
|
+
exports.intersection = intersection.intersection;
|
|
38
39
|
exports.symmetricDifference = symmetricDifference.symmetricDifference;
|
|
40
|
+
exports.union = union.union;
|
|
@@ -9,3 +9,4 @@ export { escapeRegExp, autoEscapedRegExp } from './regexp';
|
|
|
9
9
|
export { isBrowser, isNode } from './isNode';
|
|
10
10
|
export { intersection, enArr, union, difference, symmetricDifference, } from './array';
|
|
11
11
|
export { sleep } from './sleep';
|
|
12
|
+
export { createBezier } from './createBezier';
|
package/index.es.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { toLowerCamelCase, toSplitCase } from './className.es.js';
|
|
2
|
+
export { ObjectAssign, createConstructor } from './object/createConstructor.es.js';
|
|
3
|
+
export { getRandomFloat, getRandomInt } from './getRandomNumber.es.js';
|
|
4
|
+
export { getRandomString } from './getRandomString.es.js';
|
|
5
|
+
export { debounce, throttle } from './performance.es.js';
|
|
6
|
+
export { escapeRegExp } from './regexp/escapeRegExp.es.js';
|
|
7
|
+
export { autoEscapedRegExp } from './regexp/autoEscapedRegExp.es.js';
|
|
8
|
+
export { isBrowser, isNode } from './isNode.es.js';
|
|
9
|
+
export { enArr } from './array/index.es.js';
|
|
10
|
+
export { sleep } from './sleep.es.js';
|
|
11
|
+
export { createBezier } from './createBezier.es.js';
|
|
12
|
+
export { difference } from './array/difference.es.js';
|
|
13
|
+
export { intersection } from './array/intersection.es.js';
|
|
14
|
+
export { symmetricDifference } from './array/symmetricDifference.es.js';
|
|
15
|
+
export { union } from './array/union.es.js';
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
var aTypeOfJs = require('a-type-of-js');
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
6
|
* 判断当前环境是否为 node 环境
|
|
8
|
-
*
|
|
9
7
|
*/
|
|
10
8
|
function isNode() {
|
|
11
9
|
return !aTypeOfJs.isUndefined((globalThis &&
|
|
@@ -15,9 +13,7 @@ function isNode() {
|
|
|
15
13
|
undefined);
|
|
16
14
|
}
|
|
17
15
|
/**
|
|
18
|
-
*
|
|
19
16
|
* 是否为浏览器环境
|
|
20
|
-
*
|
|
21
17
|
*/
|
|
22
18
|
function isBrowser() {
|
|
23
19
|
return !isNode();
|