@applemusic-like-lyrics/core 0.0.10 → 0.0.12
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/amll-core.js +1 -1
- package/dist/amll-core.js.map +1 -1
- package/dist/amll-core.mjs +731 -453
- package/dist/amll-core.mjs.map +1 -1
- package/dist/bg-render/pixi-renderer.d.ts +6 -0
- package/dist/index.d.ts +1 -1
- package/dist/lyric-player/bottom-line.d.ts +26 -0
- package/dist/lyric-player/index.d.ts +89 -9
- package/dist/lyric-player/lyric-line.d.ts +15 -1
- package/package.json +12 -5
|
@@ -5,6 +5,29 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { Disposable, HasElement, LyricLine } from "../interfaces";
|
|
7
7
|
import { SpringParams } from "../utils/spring";
|
|
8
|
+
import { LyricLineEl } from "./lyric-line";
|
|
9
|
+
/**
|
|
10
|
+
* 歌词行鼠标相关事件,可以获取到歌词行的索引和歌词行元素
|
|
11
|
+
*/
|
|
12
|
+
export declare class LyricLineMouseEvent extends MouseEvent {
|
|
13
|
+
/**
|
|
14
|
+
* 歌词行索引
|
|
15
|
+
*/
|
|
16
|
+
readonly lineIndex: number;
|
|
17
|
+
/**
|
|
18
|
+
* 歌词行元素
|
|
19
|
+
*/
|
|
20
|
+
readonly line: LyricLineEl;
|
|
21
|
+
constructor(
|
|
22
|
+
/**
|
|
23
|
+
* 歌词行索引
|
|
24
|
+
*/
|
|
25
|
+
lineIndex: number,
|
|
26
|
+
/**
|
|
27
|
+
* 歌词行元素
|
|
28
|
+
*/
|
|
29
|
+
line: LyricLineEl, event: MouseEvent);
|
|
30
|
+
}
|
|
8
31
|
/**
|
|
9
32
|
* 歌词播放组件,本框架的核心组件
|
|
10
33
|
*
|
|
@@ -17,22 +40,36 @@ export declare class LyricPlayer extends EventTarget implements HasElement, Disp
|
|
|
17
40
|
private processedLines;
|
|
18
41
|
private lyricLinesEl;
|
|
19
42
|
private lyricLinesSize;
|
|
43
|
+
private lyricLinesIndexes;
|
|
20
44
|
private hotLines;
|
|
21
45
|
private bufferedLines;
|
|
22
46
|
private scrollToIndex;
|
|
47
|
+
private allowScroll;
|
|
48
|
+
private scrolledHandler;
|
|
49
|
+
private isScrolled;
|
|
50
|
+
private invokedByScrollEvent;
|
|
51
|
+
private padding;
|
|
52
|
+
private scrollOffset;
|
|
53
|
+
private hidePassedLines;
|
|
23
54
|
private resizeObserver;
|
|
24
55
|
private posXSpringParams;
|
|
25
56
|
private posYSpringParams;
|
|
26
57
|
private scaleSpringParams;
|
|
27
58
|
private enableBlur;
|
|
59
|
+
private enableScale;
|
|
28
60
|
private interludeDots;
|
|
29
61
|
private interludeDotsSize;
|
|
62
|
+
private bottomLine;
|
|
30
63
|
readonly supportPlusLighter: boolean;
|
|
31
64
|
readonly supportMaskImage: boolean;
|
|
32
65
|
private disableSpring;
|
|
33
66
|
private alignAnchor;
|
|
67
|
+
private alignPosition;
|
|
68
|
+
private isNonDynamic;
|
|
34
69
|
readonly size: [number, number];
|
|
35
|
-
readonly
|
|
70
|
+
readonly innerSize: [number, number];
|
|
71
|
+
private readonly onLineClickedHandler;
|
|
72
|
+
_getIsNonDynamic(): boolean;
|
|
36
73
|
/**
|
|
37
74
|
* 设置是否使用物理弹簧算法实现歌词动画效果,默认启用
|
|
38
75
|
*
|
|
@@ -46,6 +83,20 @@ export declare class LyricPlayer extends EventTarget implements HasElement, Disp
|
|
|
46
83
|
* @returns 是否启用物理弹簧
|
|
47
84
|
*/
|
|
48
85
|
getEnableSpring(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* 是否启用歌词行缩放效果,默认启用
|
|
88
|
+
*
|
|
89
|
+
* 如果启用,非选中的歌词行会轻微缩小以凸显当前播放歌词行效果
|
|
90
|
+
*
|
|
91
|
+
* 此效果对性能影响微乎其微,推荐启用
|
|
92
|
+
* @param enable 是否启用歌词行缩放效果
|
|
93
|
+
*/
|
|
94
|
+
setEnableScale(enable?: boolean): void;
|
|
95
|
+
/**
|
|
96
|
+
* 获取当前是否启用了歌词行缩放效果
|
|
97
|
+
* @returns 是否启用歌词行缩放效果
|
|
98
|
+
*/
|
|
99
|
+
getEnableScale(): boolean;
|
|
49
100
|
readonly style: import("jss").StyleSheet<"lyricPlayer" | "lyricLine" | "@media (max-width: 1024px)" | "lyricDuetLine" | "lyricBgLine" | "lyricMainLine" | "lyricSubLine" | "disableSpring" | "interludeDots" | "@supports (mix-blend-mode: plus-lighter)" | "tmpDisableTransition">;
|
|
50
101
|
private onPageShow;
|
|
51
102
|
constructor();
|
|
@@ -55,15 +106,20 @@ export declare class LyricPlayer extends EventTarget implements HasElement, Disp
|
|
|
55
106
|
* 否则返回 undefined
|
|
56
107
|
*
|
|
57
108
|
* 这个只允许内部调用
|
|
58
|
-
* @returns [
|
|
109
|
+
* @returns [开始时间,结束时间,大概处于的歌词行ID,下一句是否为对唱歌词] 或 undefined 如果不处于间奏区间
|
|
59
110
|
*/
|
|
60
|
-
getCurrentInterlude(): [number, number, number] | undefined;
|
|
111
|
+
getCurrentInterlude(): [number, number, number, boolean] | undefined;
|
|
61
112
|
/**
|
|
62
113
|
* 重建样式
|
|
63
114
|
*
|
|
64
115
|
* 这个只允许内部调用
|
|
65
116
|
*/
|
|
66
117
|
rebuildStyle(): void;
|
|
118
|
+
/**
|
|
119
|
+
* 设置是否隐藏已经播放过的歌词行,默认不隐藏
|
|
120
|
+
* @param hide 是否隐藏已经播放过的歌词行,默认不隐藏
|
|
121
|
+
*/
|
|
122
|
+
setHidePassedLines(hide: boolean): void;
|
|
67
123
|
/**
|
|
68
124
|
* 设置是否启用歌词行的模糊效果
|
|
69
125
|
* @param enable 是否启用
|
|
@@ -74,10 +130,18 @@ export declare class LyricPlayer extends EventTarget implements HasElement, Disp
|
|
|
74
130
|
* @param lines 歌词数组
|
|
75
131
|
*/
|
|
76
132
|
setLyricLines(lines: LyricLine[]): void;
|
|
133
|
+
/**
|
|
134
|
+
* 重置用户滚动状态
|
|
135
|
+
*
|
|
136
|
+
* 请在用户完成滚动点击跳转歌词时调用本事件再调用 `calcLayout` 以正确滚动到目标位置
|
|
137
|
+
*/
|
|
138
|
+
resetScroll(): void;
|
|
77
139
|
/**
|
|
78
140
|
* 重新布局定位歌词行的位置,调用完成后再逐帧调用 `update`
|
|
79
141
|
* 函数即可让歌词通过动画移动到目标位置。
|
|
80
142
|
*
|
|
143
|
+
* 函数有一个 `force` 参数,用于指定是否强制修改布局,也就是不经过动画直接调整元素位置和大小。
|
|
144
|
+
*
|
|
81
145
|
* 此函数还有一个 `reflow` 参数,用于指定是否需要重新计算布局
|
|
82
146
|
*
|
|
83
147
|
* 因为计算布局必定会导致浏览器重排布局,所以会大幅度影响流畅度和性能,故请只在以下情况下将其设置为 true:
|
|
@@ -86,9 +150,10 @@ export declare class LyricPlayer extends EventTarget implements HasElement, Disp
|
|
|
86
150
|
* 2. 加载了新的歌词时(不论前后歌词是否完全一样)
|
|
87
151
|
* 3. 用户自行跳转了歌曲播放位置(不论距离远近)
|
|
88
152
|
*
|
|
153
|
+
* @param force 是否不经过动画直接修改布局定位
|
|
89
154
|
* @param reflow 是否进行重新布局(重新计算每行歌词大小)
|
|
90
155
|
*/
|
|
91
|
-
calcLayout(reflow?: boolean): void;
|
|
156
|
+
calcLayout(force?: boolean, reflow?: boolean): void;
|
|
92
157
|
/**
|
|
93
158
|
* 获取当前歌词的播放位置
|
|
94
159
|
*
|
|
@@ -105,14 +170,29 @@ export declare class LyricPlayer extends EventTarget implements HasElement, Disp
|
|
|
105
170
|
getLyricLines(): LyricLine[];
|
|
106
171
|
getElement(): HTMLElement;
|
|
107
172
|
/**
|
|
108
|
-
*
|
|
173
|
+
* 获取一个特殊的底栏元素,默认是空白的,可以往内部添加任意元素
|
|
109
174
|
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
175
|
+
* 这个元素始终在歌词的底部,可以用于显示歌曲创作者等信息
|
|
176
|
+
*
|
|
177
|
+
* 但是请勿删除该元素,只能在内部存放元素
|
|
178
|
+
*
|
|
179
|
+
* @returns 一个元素,可以往内部添加任意元素
|
|
180
|
+
*/
|
|
181
|
+
getBottomLineElement(): HTMLElement;
|
|
182
|
+
/**
|
|
183
|
+
* 设置目标歌词行的对齐方式,默认为 `center`
|
|
184
|
+
*
|
|
185
|
+
* - 设置成 `top` 的话将会向目标歌词行的顶部对齐
|
|
186
|
+
* - 设置成 `bottom` 的话将会向目标歌词行的底部对齐
|
|
187
|
+
* - 设置成 `center` 的话将会向目标歌词行的垂直中心对齐
|
|
113
188
|
* @param alignAnchor 歌词行对齐方式,详情见函数说明
|
|
114
189
|
*/
|
|
115
|
-
setAlignAnchor(alignAnchor: "top" | "bottom" |
|
|
190
|
+
setAlignAnchor(alignAnchor: "top" | "bottom" | "center"): void;
|
|
191
|
+
/**
|
|
192
|
+
* 设置默认的歌词行对齐位置,相对于整个歌词播放组件的大小位置,默认为 `0.5`
|
|
193
|
+
* @param alignPosition 一个 `[0.0-1.0]` 之间的任意数字,代表组件高度由上到下的比例位置
|
|
194
|
+
*/
|
|
195
|
+
setAlignPosition(alignPosition: number): void;
|
|
116
196
|
/**
|
|
117
197
|
* 设置当前播放进度,单位为毫秒且**必须是整数**,此时将会更新内部的歌词进度信息
|
|
118
198
|
* 内部会根据调用间隔和播放进度自动决定如何滚动和显示歌词,所以这个的调用频率越快越准确越好
|
|
@@ -2,7 +2,16 @@ import { LyricPlayer } from ".";
|
|
|
2
2
|
import { Disposable, HasElement, LyricLine, LyricWord } from "../interfaces";
|
|
3
3
|
import { Spring } from "../utils/spring";
|
|
4
4
|
export declare function shouldEmphasize(word: LyricWord): boolean;
|
|
5
|
-
export declare class
|
|
5
|
+
export declare class RawLyricLineMouseEvent extends MouseEvent {
|
|
6
|
+
readonly line: LyricLineEl;
|
|
7
|
+
constructor(line: LyricLineEl, event: MouseEvent);
|
|
8
|
+
}
|
|
9
|
+
type MouseEventMap = {
|
|
10
|
+
[evt in keyof HTMLElementEventMap]: HTMLElementEventMap[evt] extends MouseEvent ? evt : never;
|
|
11
|
+
};
|
|
12
|
+
type MouseEventTypes = MouseEventMap[keyof MouseEventMap];
|
|
13
|
+
type MouseEventListener = (this: LyricLineEl, ev: RawLyricLineMouseEvent) => void;
|
|
14
|
+
export declare class LyricLineEl extends EventTarget implements HasElement, Disposable {
|
|
6
15
|
private lyricPlayer;
|
|
7
16
|
private lyricLine;
|
|
8
17
|
private element;
|
|
@@ -19,6 +28,10 @@ export declare class LyricLineEl implements HasElement, Disposable {
|
|
|
19
28
|
scale: Spring;
|
|
20
29
|
};
|
|
21
30
|
constructor(lyricPlayer: LyricPlayer, lyricLine?: LyricLine);
|
|
31
|
+
private listenersMap;
|
|
32
|
+
private readonly onMouseEvent;
|
|
33
|
+
addEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | AddEventListenerOptions | undefined): void;
|
|
34
|
+
removeEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | EventListenerOptions | undefined): void;
|
|
22
35
|
private isEnabled;
|
|
23
36
|
enable(): void;
|
|
24
37
|
measureSize(): [number, number];
|
|
@@ -40,3 +53,4 @@ export declare class LyricLineEl implements HasElement, Disposable {
|
|
|
40
53
|
get isInSight(): boolean;
|
|
41
54
|
dispose(): void;
|
|
42
55
|
}
|
|
56
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applemusic-like-lyrics/core",
|
|
3
3
|
"packageManager": "yarn@3.6.1",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.12",
|
|
5
5
|
"description": "AMLL 的纯 JS 核心组件框架,包括歌词显示组件和背景组件等其它可以复用的组件",
|
|
6
6
|
"repository": {
|
|
7
7
|
"url": "https://github.com/Steve-xmh/applemusic-like-lyrics.git",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"scripts": {
|
|
16
16
|
"build:docs": "typedoc --plugin typedoc-plugin-markdown --out docs src/index.ts",
|
|
17
17
|
"build": "vite build",
|
|
18
|
+
"build:dev": "vite build",
|
|
18
19
|
"fmt": "rome format --write ./src",
|
|
19
20
|
"dev": "vite dev"
|
|
20
21
|
},
|
|
@@ -23,6 +24,7 @@
|
|
|
23
24
|
"typings": "./dist/index.d.ts",
|
|
24
25
|
"exports": {
|
|
25
26
|
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
26
28
|
"import": "./dist/amll-core.mjs",
|
|
27
29
|
"require": "./dist/amll-core.cjs"
|
|
28
30
|
}
|
|
@@ -33,10 +35,11 @@
|
|
|
33
35
|
"lil-gui": "^0.18.2",
|
|
34
36
|
"rome": "^12.1.3",
|
|
35
37
|
"stats.js": "^0.17.0",
|
|
36
|
-
"typedoc": "^0.
|
|
37
|
-
"typedoc-plugin-markdown": "^3.
|
|
38
|
-
"
|
|
39
|
-
"vite
|
|
38
|
+
"typedoc": "^0.25.2",
|
|
39
|
+
"typedoc-plugin-markdown": "^3.16.0",
|
|
40
|
+
"typescript": "^5.2.2",
|
|
41
|
+
"vite": "^4.4.11",
|
|
42
|
+
"vite-plugin-dts": "^3.6.0",
|
|
40
43
|
"vite-plugin-top-level-await": "^1.3.1",
|
|
41
44
|
"vite-plugin-wasm": "^3.2.2"
|
|
42
45
|
},
|
|
@@ -45,9 +48,13 @@
|
|
|
45
48
|
"@pixi/core": "*",
|
|
46
49
|
"@pixi/display": "*",
|
|
47
50
|
"@pixi/filter-blur": "*",
|
|
51
|
+
"@pixi/filter-bulge-pinch": "*",
|
|
48
52
|
"@pixi/filter-color-matrix": "*",
|
|
49
53
|
"@pixi/sprite": "*",
|
|
50
54
|
"jss": "*",
|
|
51
55
|
"jss-preset-default": "*"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"node-vibrant": "^3.2.1-alpha.1"
|
|
52
59
|
}
|
|
53
60
|
}
|