@ezuikit/multi-screen 0.1.0-beta.1
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/LICENSE +21 -0
- package/README.md +155 -0
- package/dist/constant.js +40 -0
- package/dist/index.js +2535 -0
- package/dist/index.mjs +2518 -0
- package/dist/index.umd.js +4016 -0
- package/dist/style.css +4 -0
- package/dist/style.js +6 -0
- package/dist/types/index.d.ts +1090 -0
- package/package.json +46 -0
|
@@ -0,0 +1,1090 @@
|
|
|
1
|
+
import EventEmitter from 'eventemitter3';
|
|
2
|
+
import I18n from '@ezuikit/utils-i18n';
|
|
3
|
+
import { ThemeOptions } from '@ezuikit/player-theme';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 设置面板配置选项
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
interface SettingsPanelOptions {
|
|
10
|
+
/** 当前画面比例 */
|
|
11
|
+
scaleMode?: ThemeOptions['scaleMode'];
|
|
12
|
+
/**
|
|
13
|
+
* 音频模式
|
|
14
|
+
* selected: 选中的有声音
|
|
15
|
+
* all: 所有窗口都有声音
|
|
16
|
+
* muted: 所有窗口都静音
|
|
17
|
+
*/
|
|
18
|
+
audioMode?: 'selected' | 'all' | "muted";
|
|
19
|
+
/** 是否启用浏览器硬解 */
|
|
20
|
+
enableHardwareDecoding?: boolean;
|
|
21
|
+
/** 语言 */
|
|
22
|
+
language?: 'zh' | 'en';
|
|
23
|
+
/** 国际化实例 */
|
|
24
|
+
i18n?: I18n;
|
|
25
|
+
/** 设置变化回调 */
|
|
26
|
+
onChange?: (settings: SettingsData) => void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 设置数据
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
interface SettingsData {
|
|
33
|
+
/** 画面比例 */
|
|
34
|
+
scaleMode: ThemeOptions['scaleMode'];
|
|
35
|
+
/** 音频模式 */
|
|
36
|
+
audioMode: SettingsPanelOptions['audioMode'];
|
|
37
|
+
/** 是否启用浏览器硬解 */
|
|
38
|
+
enableHardwareDecoding: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 设置面板组件
|
|
42
|
+
* @remarks
|
|
43
|
+
* 提供画面比例、声音设置、浏览器硬解等设置选项
|
|
44
|
+
* @public
|
|
45
|
+
*/
|
|
46
|
+
declare class SettingsPanel {
|
|
47
|
+
private readonly container;
|
|
48
|
+
private picker;
|
|
49
|
+
private settings;
|
|
50
|
+
private readonly language;
|
|
51
|
+
private readonly i18n?;
|
|
52
|
+
private readonly onChange?;
|
|
53
|
+
private audioPicker?;
|
|
54
|
+
private readonly _scaleModes;
|
|
55
|
+
/**
|
|
56
|
+
* 创建设置面板实例
|
|
57
|
+
* @param options - 设置面板配置选项
|
|
58
|
+
*/
|
|
59
|
+
constructor(container: HTMLElement, options: SettingsPanelOptions);
|
|
60
|
+
/**
|
|
61
|
+
* 获取国际化文本
|
|
62
|
+
* @private
|
|
63
|
+
*/
|
|
64
|
+
private t;
|
|
65
|
+
/**
|
|
66
|
+
* 初始化组件
|
|
67
|
+
* @private
|
|
68
|
+
*/
|
|
69
|
+
private init;
|
|
70
|
+
/**
|
|
71
|
+
* 创建设置面板 Picker
|
|
72
|
+
* @private
|
|
73
|
+
*/
|
|
74
|
+
private createPicker;
|
|
75
|
+
/**
|
|
76
|
+
* 获取面板 HTML
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
private getPanelHTML;
|
|
80
|
+
/**
|
|
81
|
+
* 获取音频模式文本
|
|
82
|
+
* @private
|
|
83
|
+
*/
|
|
84
|
+
private getAudioModeText;
|
|
85
|
+
/**
|
|
86
|
+
* 绑定事件
|
|
87
|
+
* @private
|
|
88
|
+
*/
|
|
89
|
+
private bindEvents;
|
|
90
|
+
/**
|
|
91
|
+
* 创建音频选择器
|
|
92
|
+
* @private
|
|
93
|
+
*/
|
|
94
|
+
private createAudioPicker;
|
|
95
|
+
/**
|
|
96
|
+
* 设置画面比例
|
|
97
|
+
* @param ratio - 画面比例
|
|
98
|
+
*/
|
|
99
|
+
setScaleMode(ratio: 0 | 1 | 2): void;
|
|
100
|
+
/**
|
|
101
|
+
* 设置音频模式
|
|
102
|
+
* @param mode - 音频模式
|
|
103
|
+
*/
|
|
104
|
+
setAudioMode(mode: SettingsPanelOptions['audioMode']): void;
|
|
105
|
+
/**
|
|
106
|
+
* 获取当前设置
|
|
107
|
+
*/
|
|
108
|
+
getSettings(): SettingsData;
|
|
109
|
+
/**
|
|
110
|
+
* 通知设置变化
|
|
111
|
+
* @private
|
|
112
|
+
*/
|
|
113
|
+
private notifyChange;
|
|
114
|
+
/**
|
|
115
|
+
* 销毁组件
|
|
116
|
+
*/
|
|
117
|
+
destroy(): void;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* 控件基类配置项
|
|
122
|
+
* @public
|
|
123
|
+
*/
|
|
124
|
+
interface SlControlOptions {
|
|
125
|
+
layout: MultiScreen;
|
|
126
|
+
/** 播放器窗口节点 */
|
|
127
|
+
rootContainer?: HTMLElement;
|
|
128
|
+
/** 挂载节点 player id, 默认挂载 body 上 */
|
|
129
|
+
getPopupContainer?: () => HTMLElement;
|
|
130
|
+
/** 给控件新增自定义类名 */
|
|
131
|
+
className?: string;
|
|
132
|
+
/** 语言数据 */
|
|
133
|
+
locale?: Record<string, string>;
|
|
134
|
+
/** 样式类后缀 */
|
|
135
|
+
classNameSuffix?: string;
|
|
136
|
+
/** 控件类型, 默认 button */
|
|
137
|
+
controlType?: 'button' | 'text';
|
|
138
|
+
/** 当前语言 */
|
|
139
|
+
language?: 'zh' | 'en' | string;
|
|
140
|
+
/** 所有语言数据 */
|
|
141
|
+
locales?: Record<string, Record<string | number, string | number>>;
|
|
142
|
+
/** 点击事件回调 */
|
|
143
|
+
onClick?: (e: Event) => void;
|
|
144
|
+
/** 其他自定义属性 */
|
|
145
|
+
[key: string]: any;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 控件基类
|
|
149
|
+
* @remarks
|
|
150
|
+
* 提供控件的基础功能,包括状态管理、事件处理、国际化等
|
|
151
|
+
* @category Control
|
|
152
|
+
* @example
|
|
153
|
+
* ```ts
|
|
154
|
+
* // 创建自定义控件
|
|
155
|
+
* class MyControl extends Control {
|
|
156
|
+
* protected _onControlClick(e: Event): void {
|
|
157
|
+
* console.log('Control clicked');
|
|
158
|
+
* }
|
|
159
|
+
* }
|
|
160
|
+
*
|
|
161
|
+
* // 使用控件
|
|
162
|
+
* const myControl = new MyControl({
|
|
163
|
+
* classNameSuffix: 'my-control',
|
|
164
|
+
* language: 'zh',
|
|
165
|
+
* onClick: (e) => console.log('Clicked')
|
|
166
|
+
* });
|
|
167
|
+
* ```
|
|
168
|
+
* @public
|
|
169
|
+
*/
|
|
170
|
+
declare class Control extends EventEmitter {
|
|
171
|
+
static cname: string;
|
|
172
|
+
/** 控件容器元素 */
|
|
173
|
+
$container: HTMLDivElement | HTMLSpanElement;
|
|
174
|
+
/** 控件挂载的父节点 */
|
|
175
|
+
$popupContainer: HTMLElement;
|
|
176
|
+
/** 当前语言对应的翻译数据 */
|
|
177
|
+
locale: Record<string | number, string> | null;
|
|
178
|
+
/** 控件配置选项 */
|
|
179
|
+
protected options: SlControlOptions;
|
|
180
|
+
/** 是否禁用状态 */
|
|
181
|
+
protected _disabled: boolean;
|
|
182
|
+
/** 是否激活状态 */
|
|
183
|
+
protected _active: boolean;
|
|
184
|
+
/** 驼峰命名的控件名称 */
|
|
185
|
+
private readonly _camelCaseName;
|
|
186
|
+
layout: MultiScreen | undefined;
|
|
187
|
+
/**
|
|
188
|
+
* 创建控件实例
|
|
189
|
+
* @param options - 控件配置选项
|
|
190
|
+
*/
|
|
191
|
+
constructor(options: Partial<SlControlOptions>);
|
|
192
|
+
/**
|
|
193
|
+
* 获取或设置激活状态
|
|
194
|
+
*/
|
|
195
|
+
get active(): boolean;
|
|
196
|
+
set active(active: boolean);
|
|
197
|
+
/**
|
|
198
|
+
* 获取或设置禁用状态
|
|
199
|
+
*/
|
|
200
|
+
get disabled(): boolean;
|
|
201
|
+
set disabled(disabled: boolean);
|
|
202
|
+
/**
|
|
203
|
+
* 重置控件状态
|
|
204
|
+
* @param hide - 是否隐藏控件
|
|
205
|
+
*/
|
|
206
|
+
reset(hide?: boolean): void;
|
|
207
|
+
/**
|
|
208
|
+
* 重置控件挂载节点
|
|
209
|
+
* @param popupContainer - 新的挂载节点
|
|
210
|
+
* @param append - 添加方式:prepend(插入第一个位置) | append(追加在末尾) | before(插入指定元素前)
|
|
211
|
+
* @param element - 当 append = 'before' 时需要,插入到该元素之前
|
|
212
|
+
* @example
|
|
213
|
+
* ```ts
|
|
214
|
+
* // 追加到容器末尾
|
|
215
|
+
* control.resetPopupContainer(newContainer, 'append');
|
|
216
|
+
*
|
|
217
|
+
* // 插入到容器第一个位置
|
|
218
|
+
* control.resetPopupContainer(newContainer, 'prepend');
|
|
219
|
+
*
|
|
220
|
+
* // 插入到指定元素之前
|
|
221
|
+
* control.resetPopupContainer(newContainer, 'before', targetElement);
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
resetPopupContainer(popupContainer: Element, append?: 'prepend' | 'append' | 'before', element?: Element): void;
|
|
225
|
+
/**
|
|
226
|
+
* 显示控件
|
|
227
|
+
*/
|
|
228
|
+
show(): void;
|
|
229
|
+
/**
|
|
230
|
+
* 隐藏控件
|
|
231
|
+
*/
|
|
232
|
+
hide(): void;
|
|
233
|
+
/**
|
|
234
|
+
* 销毁控件
|
|
235
|
+
* @remarks
|
|
236
|
+
* 清理所有事件监听器和 DOM 元素
|
|
237
|
+
*/
|
|
238
|
+
destroy(): void;
|
|
239
|
+
/**
|
|
240
|
+
* 更新控件显示
|
|
241
|
+
* @remarks
|
|
242
|
+
* 子类可以重写此方法来实现自定义更新逻辑
|
|
243
|
+
* @public
|
|
244
|
+
*/
|
|
245
|
+
update(): void;
|
|
246
|
+
/**
|
|
247
|
+
* 更新禁用状态的样式
|
|
248
|
+
* @param disabled - 是否禁用
|
|
249
|
+
* @protected
|
|
250
|
+
*/
|
|
251
|
+
protected _updateDisabledState(disabled: boolean): void;
|
|
252
|
+
/**
|
|
253
|
+
* 更新激活状态的样式
|
|
254
|
+
* @param active - 是否激活
|
|
255
|
+
* @protected
|
|
256
|
+
*/
|
|
257
|
+
protected _updateActiveState(active: boolean): void;
|
|
258
|
+
/**
|
|
259
|
+
* 绑定点击事件
|
|
260
|
+
* @private
|
|
261
|
+
*/
|
|
262
|
+
private _onClick;
|
|
263
|
+
/**
|
|
264
|
+
* 控件点击事件处理
|
|
265
|
+
* @param e - 事件对象
|
|
266
|
+
* @remarks
|
|
267
|
+
* 子类可以重写此方法来实现自定义点击行为
|
|
268
|
+
* @protected
|
|
269
|
+
*/
|
|
270
|
+
protected _onControlClick(e: Event): void;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* 播放/暂停控件配置项
|
|
275
|
+
* @public
|
|
276
|
+
*/
|
|
277
|
+
type PlayOptions = SlControlOptions;
|
|
278
|
+
/**
|
|
279
|
+
* 播放/暂停控件
|
|
280
|
+
* @remarks
|
|
281
|
+
* 提供视频播放和暂停功能,支持状态自动切换
|
|
282
|
+
* @category Control
|
|
283
|
+
* @public
|
|
284
|
+
*/
|
|
285
|
+
declare class Play extends Control {
|
|
286
|
+
/** 播放状态 */
|
|
287
|
+
private _playing;
|
|
288
|
+
static cname: string;
|
|
289
|
+
constructor(options: PlayOptions);
|
|
290
|
+
/**
|
|
291
|
+
* 播放状态
|
|
292
|
+
*/
|
|
293
|
+
get playing(): boolean;
|
|
294
|
+
/**
|
|
295
|
+
* 点击控件触发
|
|
296
|
+
* @protected
|
|
297
|
+
*/
|
|
298
|
+
protected _onControlClick(e: Event): void;
|
|
299
|
+
/**
|
|
300
|
+
* 渲染控件内容
|
|
301
|
+
* @private
|
|
302
|
+
*/
|
|
303
|
+
private _render;
|
|
304
|
+
/**
|
|
305
|
+
* 更新控件显示
|
|
306
|
+
* @public
|
|
307
|
+
*/
|
|
308
|
+
update(): void;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* 静音控件配置项
|
|
313
|
+
* @public
|
|
314
|
+
*/
|
|
315
|
+
interface MutedOptions extends SlControlOptions {
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* 静音控件
|
|
319
|
+
* @remarks
|
|
320
|
+
* 提供静音控制功能,支持全部静音、其他静音、取消静音
|
|
321
|
+
* @category Control
|
|
322
|
+
* @public
|
|
323
|
+
*/
|
|
324
|
+
declare class Muted extends Control {
|
|
325
|
+
static cname: string;
|
|
326
|
+
constructor(options: MutedOptions);
|
|
327
|
+
/**
|
|
328
|
+
* 点击控件触发
|
|
329
|
+
* @protected
|
|
330
|
+
*/
|
|
331
|
+
protected _onControlClick(e: Event): void;
|
|
332
|
+
/**
|
|
333
|
+
* 渲染控件内容
|
|
334
|
+
* @private
|
|
335
|
+
*/
|
|
336
|
+
private _render;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* 截图控件配置项
|
|
341
|
+
* @public
|
|
342
|
+
*/
|
|
343
|
+
interface ScreenshotOptions extends SlControlOptions {
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* 截图控件
|
|
347
|
+
* @remarks
|
|
348
|
+
* 提供视频截图功能
|
|
349
|
+
* @category Control
|
|
350
|
+
* @public
|
|
351
|
+
*/
|
|
352
|
+
declare class Screenshot extends Control {
|
|
353
|
+
static cname: string;
|
|
354
|
+
constructor(options: ScreenshotOptions);
|
|
355
|
+
/**
|
|
356
|
+
* 点击控件触发
|
|
357
|
+
* @protected
|
|
358
|
+
*/
|
|
359
|
+
protected _onControlClick(e: Event): void;
|
|
360
|
+
/**
|
|
361
|
+
* 渲染控件内容
|
|
362
|
+
* @private
|
|
363
|
+
*/
|
|
364
|
+
private _render;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* 网页全屏控件配置项
|
|
369
|
+
* @public
|
|
370
|
+
*/
|
|
371
|
+
interface WebFullscreenOptions extends SlControlOptions {
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* 网页全屏控件
|
|
375
|
+
* @remarks
|
|
376
|
+
* 提供网页全屏功能(伪全屏,仅在网页内全屏)
|
|
377
|
+
* @category Control
|
|
378
|
+
* @public
|
|
379
|
+
*/
|
|
380
|
+
declare class WebFullscreen extends Control {
|
|
381
|
+
/** 网页全屏状态 */
|
|
382
|
+
layout: MultiScreen;
|
|
383
|
+
static cname: string;
|
|
384
|
+
constructor(options: WebFullscreenOptions & {
|
|
385
|
+
layout: MultiScreen;
|
|
386
|
+
});
|
|
387
|
+
/**
|
|
388
|
+
* 点击控件触发
|
|
389
|
+
* @protected
|
|
390
|
+
*/
|
|
391
|
+
protected _onControlClick(e: Event): void;
|
|
392
|
+
/**
|
|
393
|
+
* 渲染控件内容
|
|
394
|
+
* @private
|
|
395
|
+
*/
|
|
396
|
+
private _render;
|
|
397
|
+
/**
|
|
398
|
+
* 更新控件显示
|
|
399
|
+
* @public
|
|
400
|
+
*/
|
|
401
|
+
update(): void;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* 全局全屏控件配置项
|
|
406
|
+
* @public
|
|
407
|
+
*/
|
|
408
|
+
interface FullscreenOptions extends SlControlOptions {
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* 全局全屏控件
|
|
412
|
+
* @remarks
|
|
413
|
+
* 提供浏览器原生全屏功能
|
|
414
|
+
* @category Control
|
|
415
|
+
* @public
|
|
416
|
+
*/
|
|
417
|
+
declare class Fullscreen extends Control {
|
|
418
|
+
static cname: string;
|
|
419
|
+
layout: MultiScreen;
|
|
420
|
+
constructor(options: FullscreenOptions);
|
|
421
|
+
/**
|
|
422
|
+
* 点击控件触发
|
|
423
|
+
* @protected
|
|
424
|
+
*/
|
|
425
|
+
protected _onControlClick(e: Event): void;
|
|
426
|
+
/**
|
|
427
|
+
* 渲染控件内容
|
|
428
|
+
* @private
|
|
429
|
+
*/
|
|
430
|
+
private _render;
|
|
431
|
+
/**
|
|
432
|
+
* 更新控件显示
|
|
433
|
+
* @public
|
|
434
|
+
*/
|
|
435
|
+
update(): void;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* 设置控件配置项
|
|
440
|
+
* @public
|
|
441
|
+
*/
|
|
442
|
+
interface SettingsOptions extends SlControlOptions {
|
|
443
|
+
/** MultiScreen 实例 */
|
|
444
|
+
layout: MultiScreen;
|
|
445
|
+
/** 设置变化回调 */
|
|
446
|
+
onSettingsChange?: (settings: SettingsData) => void;
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* 设置控件
|
|
450
|
+
* @remarks
|
|
451
|
+
* 提供画面比例、声音设置、浏览器硬解等设置选项
|
|
452
|
+
* @category Control
|
|
453
|
+
* @public
|
|
454
|
+
*/
|
|
455
|
+
declare class Settings extends Control {
|
|
456
|
+
static cname: string;
|
|
457
|
+
private readonly _layout;
|
|
458
|
+
protected _settingsPanel?: SettingsPanel;
|
|
459
|
+
private readonly _onSettingsChange?;
|
|
460
|
+
constructor(options: SettingsOptions);
|
|
461
|
+
/**
|
|
462
|
+
* 点击控件触发
|
|
463
|
+
* @protected
|
|
464
|
+
*/
|
|
465
|
+
protected _onControlClick(e: Event): void;
|
|
466
|
+
/**
|
|
467
|
+
* 渲染控件内容
|
|
468
|
+
* @private
|
|
469
|
+
*/
|
|
470
|
+
private _render;
|
|
471
|
+
/**
|
|
472
|
+
* 初始化设置面板
|
|
473
|
+
* @private
|
|
474
|
+
*/
|
|
475
|
+
private _initSettingsPanel;
|
|
476
|
+
/**
|
|
477
|
+
* 获取设置面板实例
|
|
478
|
+
* @public
|
|
479
|
+
*/
|
|
480
|
+
get settingsPanel(): SettingsPanel | undefined;
|
|
481
|
+
/**
|
|
482
|
+
* 销毁控件
|
|
483
|
+
* @public
|
|
484
|
+
*/
|
|
485
|
+
destroy(): void;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* 分屏模式选择器配置选项
|
|
490
|
+
* @public
|
|
491
|
+
*/
|
|
492
|
+
interface ModePickerOptions {
|
|
493
|
+
/** 当前分屏模式 */
|
|
494
|
+
currentMode: LayoutMode;
|
|
495
|
+
/** 模式变化回调 */
|
|
496
|
+
onChange: (mode: LayoutMode) => void;
|
|
497
|
+
/** 语言 */
|
|
498
|
+
i18n?: I18n;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* 分屏模式选择器组件
|
|
502
|
+
* @remarks
|
|
503
|
+
* 提供一个下拉菜单样式的分屏模式选择器
|
|
504
|
+
* @public
|
|
505
|
+
*/
|
|
506
|
+
declare class ModePicker {
|
|
507
|
+
private readonly container;
|
|
508
|
+
private _currentMode;
|
|
509
|
+
private readonly onChange;
|
|
510
|
+
private readonly i18n;
|
|
511
|
+
private picker;
|
|
512
|
+
private readonly modeOptions;
|
|
513
|
+
/**
|
|
514
|
+
* 创建模式选择器实例
|
|
515
|
+
* @param options - 选择器配置选项
|
|
516
|
+
*/
|
|
517
|
+
constructor(container: HTMLElement, options: ModePickerOptions);
|
|
518
|
+
get current(): LayoutMode;
|
|
519
|
+
set current(mode: LayoutMode);
|
|
520
|
+
/**
|
|
521
|
+
* 初始化组件
|
|
522
|
+
* @private
|
|
523
|
+
*/
|
|
524
|
+
private _init;
|
|
525
|
+
/**
|
|
526
|
+
* 创建分屏模式图标
|
|
527
|
+
* @param rows - 行数
|
|
528
|
+
* @param cols - 列数
|
|
529
|
+
* @returns SVG 图标字符串
|
|
530
|
+
* @private
|
|
531
|
+
*/
|
|
532
|
+
private _createModeIcon;
|
|
533
|
+
/**
|
|
534
|
+
* 创建下拉选择器
|
|
535
|
+
* @private
|
|
536
|
+
*/
|
|
537
|
+
private createPicker;
|
|
538
|
+
/**
|
|
539
|
+
* 创建下拉菜单内容
|
|
540
|
+
* @returns 下拉菜单 HTML 字符串
|
|
541
|
+
* @private
|
|
542
|
+
*/
|
|
543
|
+
private createDropdownContent;
|
|
544
|
+
private _onOptionsClick;
|
|
545
|
+
/**
|
|
546
|
+
* 选中指定模式
|
|
547
|
+
* @param mode - 分屏模式
|
|
548
|
+
* @private
|
|
549
|
+
*/
|
|
550
|
+
private selectMode;
|
|
551
|
+
/**
|
|
552
|
+
* 设置当前分屏模式
|
|
553
|
+
* @param mode - 分屏模式
|
|
554
|
+
*/
|
|
555
|
+
setMode(mode: LayoutMode): void;
|
|
556
|
+
/**
|
|
557
|
+
* 销毁选择器实例
|
|
558
|
+
* @remarks
|
|
559
|
+
* 清理所有 DOM 元素和事件监听器
|
|
560
|
+
*/
|
|
561
|
+
destroy(): void;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
/**
|
|
565
|
+
* 分屏模式控件配置项
|
|
566
|
+
* @public
|
|
567
|
+
*/
|
|
568
|
+
interface ModeOptions extends SlControlOptions {
|
|
569
|
+
/** 模式变化回调 */
|
|
570
|
+
onModeChange?: (mode: LayoutMode) => void;
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* 分屏模式控件
|
|
574
|
+
* @remarks
|
|
575
|
+
* 提供分屏模式选择功能
|
|
576
|
+
* @category Control
|
|
577
|
+
* @public
|
|
578
|
+
*/
|
|
579
|
+
declare class Mode extends Control {
|
|
580
|
+
private _modePicker?;
|
|
581
|
+
private readonly _onModeChange?;
|
|
582
|
+
static cname: string;
|
|
583
|
+
mode: LayoutMode;
|
|
584
|
+
constructor(options: ModeOptions);
|
|
585
|
+
/**
|
|
586
|
+
* 点击控件触发
|
|
587
|
+
* @protected
|
|
588
|
+
*/
|
|
589
|
+
protected _onControlClick(e: Event): void;
|
|
590
|
+
/**
|
|
591
|
+
* 渲染控件内容
|
|
592
|
+
* @private
|
|
593
|
+
*/
|
|
594
|
+
private _render;
|
|
595
|
+
/**
|
|
596
|
+
* 初始化模式选择器
|
|
597
|
+
* @private
|
|
598
|
+
*/
|
|
599
|
+
private _initModePicker;
|
|
600
|
+
/**
|
|
601
|
+
* 获取模式选择器实例
|
|
602
|
+
* @public
|
|
603
|
+
*/
|
|
604
|
+
get modePicker(): ModePicker | undefined;
|
|
605
|
+
/**
|
|
606
|
+
* 更新当前模式
|
|
607
|
+
* @param mode - 分屏模式
|
|
608
|
+
* @public
|
|
609
|
+
*/
|
|
610
|
+
setMode(mode: LayoutMode): void;
|
|
611
|
+
/**
|
|
612
|
+
* 销毁控件
|
|
613
|
+
* @public
|
|
614
|
+
*/
|
|
615
|
+
destroy(): void;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
/**
|
|
619
|
+
* 插件导出模块
|
|
620
|
+
* @remarks
|
|
621
|
+
* 导出所有内置 Control 类控件
|
|
622
|
+
* @packageDocumentation
|
|
623
|
+
*/
|
|
624
|
+
|
|
625
|
+
type ControlConstructor = new (options: any) => Control;
|
|
626
|
+
declare const LeftControls: ControlConstructor[];
|
|
627
|
+
declare const RightControls: ControlConstructor[];
|
|
628
|
+
declare const __CAN_DISABLED_CONTROL__: string[];
|
|
629
|
+
|
|
630
|
+
/**
|
|
631
|
+
* 分屏布局模式
|
|
632
|
+
* @remarks
|
|
633
|
+
* 支持预设的固定分屏模式(数字代表分屏数量)或自定义模式
|
|
634
|
+
* @public
|
|
635
|
+
*/
|
|
636
|
+
type LayoutMode = 1 | 2 | 4 | 6 | 9 | 16 | 25 | 36 | 64 | 'custom';
|
|
637
|
+
/**
|
|
638
|
+
* 自定义布局配置
|
|
639
|
+
* @public
|
|
640
|
+
*/
|
|
641
|
+
interface CustomLayout {
|
|
642
|
+
/** 行数 */
|
|
643
|
+
rows: number;
|
|
644
|
+
/** 列数 */
|
|
645
|
+
cols: number;
|
|
646
|
+
}
|
|
647
|
+
/**
|
|
648
|
+
* 单个分屏项配置
|
|
649
|
+
* @public
|
|
650
|
+
*/
|
|
651
|
+
type ScreenItem = Record<string, any>;
|
|
652
|
+
/**
|
|
653
|
+
* 工具栏插件配置
|
|
654
|
+
* @public
|
|
655
|
+
*/
|
|
656
|
+
interface ToolbarPlugin {
|
|
657
|
+
/** 插件名称 */
|
|
658
|
+
name: string;
|
|
659
|
+
/** 插件内容(支持 emoji 或自定义文本) */
|
|
660
|
+
content: string | ((layout: MultiScreen) => string);
|
|
661
|
+
/** 工具提示文本 */
|
|
662
|
+
tooltip?: string | ((layout: MultiScreen) => string);
|
|
663
|
+
/** 禁用默认操作, 需要用户根据业务自己在onClick中自己实现想要的操作 */
|
|
664
|
+
disabledDefault?: boolean;
|
|
665
|
+
/**
|
|
666
|
+
* 插件容器的类名
|
|
667
|
+
*/
|
|
668
|
+
wrapperClassName?: string;
|
|
669
|
+
/** 点击事件回调 */
|
|
670
|
+
onClick: (layout: MultiScreen) => void;
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* 分屏布局组件配置选项
|
|
674
|
+
* @public
|
|
675
|
+
*/
|
|
676
|
+
interface MultiScreenOptions {
|
|
677
|
+
/** 容器的宽,容器的宽度,支持 CSS 单位或数字(px), 默认 100% */
|
|
678
|
+
width?: string | number;
|
|
679
|
+
/** 容器的高,容器的宽度,支持 CSS 单位或数字(px), 默认 100% */
|
|
680
|
+
height?: string | number;
|
|
681
|
+
/** 分屏模式,默认 4 分屏 */
|
|
682
|
+
mode?: LayoutMode;
|
|
683
|
+
/** 自定义布局配置,当 mode 为 'custom' 时有效 */
|
|
684
|
+
customLayout?: CustomLayout;
|
|
685
|
+
/** 分屏数据数组 */
|
|
686
|
+
screens?: ScreenItem[];
|
|
687
|
+
/** 主题模式,默认 'dark' */
|
|
688
|
+
theme?: 'light' | 'dark';
|
|
689
|
+
/** 语言,默认 'zh' */
|
|
690
|
+
language?: 'zh' | 'en';
|
|
691
|
+
/** 是否显示工具栏,默认 true */
|
|
692
|
+
showToolbar?: boolean;
|
|
693
|
+
/** 内容填充模型 */
|
|
694
|
+
scaleMode?: 0 | 1 | 2;
|
|
695
|
+
/**
|
|
696
|
+
* 音频模式
|
|
697
|
+
* selected: 选中的有声音
|
|
698
|
+
* all: 所有窗口都有声音
|
|
699
|
+
* muted: 所有窗口都静音
|
|
700
|
+
*/
|
|
701
|
+
audioMode?: SettingsPanelOptions['audioMode'];
|
|
702
|
+
/**
|
|
703
|
+
* 启用硬件解码, 默认 true
|
|
704
|
+
*/
|
|
705
|
+
enableHardwareDecoding?: boolean;
|
|
706
|
+
/** 工具栏插件数组 */
|
|
707
|
+
plugins?: ControlConstructor[];
|
|
708
|
+
/**
|
|
709
|
+
* 可选的分屏模式配置
|
|
710
|
+
* @remarks
|
|
711
|
+
* - 如果设置为 null,则不显示模式选择器
|
|
712
|
+
* - 如果不设置,则显示默认模式选择器
|
|
713
|
+
* - 如果设置了 modes,则只显示指定的模式
|
|
714
|
+
*/
|
|
715
|
+
modesOptions?: {
|
|
716
|
+
disabledDefault?: boolean;
|
|
717
|
+
modes?: LayoutMode[];
|
|
718
|
+
} | null;
|
|
719
|
+
playOptions?: (ToolbarPlugin & {
|
|
720
|
+
disabledDefault?: boolean;
|
|
721
|
+
}) | null;
|
|
722
|
+
/**
|
|
723
|
+
* 静音配置
|
|
724
|
+
*/
|
|
725
|
+
mutedOptions?: ToolbarPlugin | null;
|
|
726
|
+
/**
|
|
727
|
+
* 截图配置
|
|
728
|
+
*/
|
|
729
|
+
screenshotOptions?: ToolbarPlugin | null;
|
|
730
|
+
/**
|
|
731
|
+
* 模式选择器配置
|
|
732
|
+
* @remarks
|
|
733
|
+
* - 如果设置为 null,则不显示模式选择器
|
|
734
|
+
* - 如果不设置,则显示默认模式选择器
|
|
735
|
+
* - 如果设置了 modes,则只显示指定的模式
|
|
736
|
+
*/
|
|
737
|
+
modeOptions?: ToolbarPlugin | null;
|
|
738
|
+
/**
|
|
739
|
+
* 设置面板配置
|
|
740
|
+
* @remarks
|
|
741
|
+
* - 如果设置为 null,则不显示设置面板
|
|
742
|
+
* - 如果不设置,则显示默认设置面板
|
|
743
|
+
*/
|
|
744
|
+
settingOptions?: ToolbarPlugin | null;
|
|
745
|
+
/**
|
|
746
|
+
* 全屏配置
|
|
747
|
+
*/
|
|
748
|
+
webFullscreenOptions?: ToolbarPlugin | null;
|
|
749
|
+
/**
|
|
750
|
+
* 全屏配置
|
|
751
|
+
*/
|
|
752
|
+
fullscreenOptions?: ToolbarPlugin | null;
|
|
753
|
+
/** 占位 */
|
|
754
|
+
placeholder?: string | (() => string);
|
|
755
|
+
/** 分屏点击事件回调 */
|
|
756
|
+
onScreenClick?: (index: number, screen: ScreenItem) => void;
|
|
757
|
+
/** 分屏模式切换事件回调 */
|
|
758
|
+
onModeChange?: (mode: LayoutMode) => void;
|
|
759
|
+
/** 全屏状态变化事件回调 */
|
|
760
|
+
onFullscreenChange?: (isFullscreen: boolean, type: 'web' | 'global') => void;
|
|
761
|
+
}
|
|
762
|
+
/**
|
|
763
|
+
* 分屏布局事件类型定义
|
|
764
|
+
* @public
|
|
765
|
+
*/
|
|
766
|
+
interface MultiScreenEvents {
|
|
767
|
+
/** 分屏点击事件 */
|
|
768
|
+
'screen:click': (index: number, screen: ScreenItem) => void;
|
|
769
|
+
/** 分屏模式变化事件 */
|
|
770
|
+
'mode:change': (mode: LayoutMode) => void;
|
|
771
|
+
/** 全屏状态变化事件 */
|
|
772
|
+
'fullscreen:change': (isFullscreen: boolean, type: 'web' | 'global') => void;
|
|
773
|
+
/** 主题变化事件 */
|
|
774
|
+
'theme:change': (theme: 'light' | 'dark') => void;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
declare abstract class AbstractPlayer {
|
|
778
|
+
options: any;
|
|
779
|
+
constructor(options: any);
|
|
780
|
+
/**
|
|
781
|
+
* 播放
|
|
782
|
+
*/
|
|
783
|
+
abstract play(): void;
|
|
784
|
+
/**
|
|
785
|
+
* 暂停
|
|
786
|
+
*/
|
|
787
|
+
abstract pause(): void;
|
|
788
|
+
/**
|
|
789
|
+
* 截图
|
|
790
|
+
* @param _filename
|
|
791
|
+
* @param _format
|
|
792
|
+
* @param _quality
|
|
793
|
+
* @param _type
|
|
794
|
+
*/
|
|
795
|
+
abstract screenshot(_filename?: string, _format?: 'png' | 'jpeg' | 'webp', _quality?: number, _type?: 'download' | 'base64' | 'blob'): void;
|
|
796
|
+
/**
|
|
797
|
+
*
|
|
798
|
+
* @param scaleMode
|
|
799
|
+
*/
|
|
800
|
+
abstract setScaleMode(scaleMode?: 0 | 1 | 2): void;
|
|
801
|
+
abstract destroy(): void;
|
|
802
|
+
abstract muted: boolean;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
/**
|
|
806
|
+
* 分屏布局组件
|
|
807
|
+
* @remarks
|
|
808
|
+
* 支持多种分屏模式、主题切换、国际化、全屏显示等功能
|
|
809
|
+
* @example
|
|
810
|
+
* ```typescript
|
|
811
|
+
* import MultiScreen from '@ezuikit/player-multi-screen';
|
|
812
|
+
* import '@ezuikit/player-multi-screen/style.css';
|
|
813
|
+
* const layout = new MultiScreen('app', Player{
|
|
814
|
+
* mode: 4,
|
|
815
|
+
* theme: 'dark',
|
|
816
|
+
* language: 'zh',
|
|
817
|
+
* screens: [
|
|
818
|
+
* { url: 'https://www.example.com/video.flv' },
|
|
819
|
+
* { url: 'https://www.example.com/video.flv' }
|
|
820
|
+
* ]
|
|
821
|
+
* });
|
|
822
|
+
* // 切换分屏模式
|
|
823
|
+
* layout.setMode(9);
|
|
824
|
+
* // 切换主题
|
|
825
|
+
* layout.setTheme('light');
|
|
826
|
+
* ```
|
|
827
|
+
* @public
|
|
828
|
+
*/
|
|
829
|
+
declare class MultiScreen extends EventEmitter<MultiScreenEvents> {
|
|
830
|
+
/** 事件常量 */
|
|
831
|
+
static EVENTS: {};
|
|
832
|
+
/** 根容器节点 */
|
|
833
|
+
$container: HTMLElement;
|
|
834
|
+
/** 分屏容器 */
|
|
835
|
+
private $screenContainer;
|
|
836
|
+
/** 工具栏 */
|
|
837
|
+
private toolbar;
|
|
838
|
+
/** 工具栏左侧容器 */
|
|
839
|
+
private $toolbarLeft;
|
|
840
|
+
/** 工具栏右侧容器 */
|
|
841
|
+
private $toolbarRight;
|
|
842
|
+
/** 分屏模式 */
|
|
843
|
+
mode: LayoutMode;
|
|
844
|
+
/** 播放器实例数组 */
|
|
845
|
+
players: (AbstractPlayer | null)[];
|
|
846
|
+
/** 自定义布局配置 */
|
|
847
|
+
private customLayout?;
|
|
848
|
+
/** 分屏数据配置 */
|
|
849
|
+
private _screens;
|
|
850
|
+
/** 当前主题 */
|
|
851
|
+
private theme;
|
|
852
|
+
/** 国际化实例 */
|
|
853
|
+
i18n: I18n | null;
|
|
854
|
+
/** 当前选中的分屏索引 */
|
|
855
|
+
_current: number;
|
|
856
|
+
private _isGlobalFullscreenOp;
|
|
857
|
+
/** 控件集合 */
|
|
858
|
+
controls: Record<string, Control>;
|
|
859
|
+
/** 是否显示工具栏 */
|
|
860
|
+
private readonly showToolbar;
|
|
861
|
+
/** 填充模式 */
|
|
862
|
+
scaleMode: ThemeOptions['scaleMode'];
|
|
863
|
+
/** 音频模式 */
|
|
864
|
+
audioMode: SettingsPanelOptions['audioMode'];
|
|
865
|
+
/** 是否正在播放 */
|
|
866
|
+
playing: boolean;
|
|
867
|
+
/** 是网页全屏 */
|
|
868
|
+
isWebFullscreen: boolean;
|
|
869
|
+
/** 是全局全屏 */
|
|
870
|
+
isGlobalFullscreen: boolean;
|
|
871
|
+
/** 是否启用硬件解码 */
|
|
872
|
+
enableHardwareDecoding: boolean;
|
|
873
|
+
language: string;
|
|
874
|
+
/**
|
|
875
|
+
* 全屏变化处理函数
|
|
876
|
+
* @private
|
|
877
|
+
*/
|
|
878
|
+
_fullscreenChangeHandler?: () => void;
|
|
879
|
+
options: MultiScreenOptions;
|
|
880
|
+
private readonly _Player;
|
|
881
|
+
private _delegations;
|
|
882
|
+
private _delegationsClose;
|
|
883
|
+
/**
|
|
884
|
+
* 创建一个分屏布局实例
|
|
885
|
+
* @param containerID - 容器ID
|
|
886
|
+
* @param Player - 播放器类,必须是 AbstractPlayer 的子类
|
|
887
|
+
* @param options - 布局配置选项
|
|
888
|
+
* @throws 当容器元素未找到时抛出错误
|
|
889
|
+
*/
|
|
890
|
+
constructor(containerID: string, Player: new (...args: any[]) => AbstractPlayer, options: MultiScreenOptions);
|
|
891
|
+
private get _totalScreens();
|
|
892
|
+
/**
|
|
893
|
+
* 初始化组件
|
|
894
|
+
* @private
|
|
895
|
+
*/
|
|
896
|
+
private _init;
|
|
897
|
+
/**
|
|
898
|
+
* 初始化控件
|
|
899
|
+
* @private
|
|
900
|
+
*/
|
|
901
|
+
private _initControls;
|
|
902
|
+
/**
|
|
903
|
+
* 渲染分屏列表
|
|
904
|
+
* @private
|
|
905
|
+
*/
|
|
906
|
+
private _renderScreens;
|
|
907
|
+
get current(): number;
|
|
908
|
+
set current(index: number);
|
|
909
|
+
private _disabledControl;
|
|
910
|
+
/**
|
|
911
|
+
* 初始化播放器实例
|
|
912
|
+
* @param playerOptions Player 播放器的配置
|
|
913
|
+
* @returns 播放器实例
|
|
914
|
+
* @example
|
|
915
|
+
* ```typescript
|
|
916
|
+
* const player = layout._initPlayer({
|
|
917
|
+
* url: "https://example.com/video.flv",
|
|
918
|
+
* // 其他播放器配置项...
|
|
919
|
+
* });
|
|
920
|
+
* ```
|
|
921
|
+
*/
|
|
922
|
+
private _initPlayer;
|
|
923
|
+
/**
|
|
924
|
+
* 创建单个分屏元素
|
|
925
|
+
* @param screen - 分屏数据
|
|
926
|
+
* @param index - 分屏索引
|
|
927
|
+
* @returns 分屏 DOM 元素
|
|
928
|
+
* @private
|
|
929
|
+
*/
|
|
930
|
+
private _createScreenElement;
|
|
931
|
+
/**
|
|
932
|
+
* 选中指定分屏
|
|
933
|
+
* @param index - 分屏索引
|
|
934
|
+
* @private
|
|
935
|
+
*/
|
|
936
|
+
private _selectScreen;
|
|
937
|
+
/**
|
|
938
|
+
* 获取国际化翻译文本
|
|
939
|
+
* @param key - 翻译键
|
|
940
|
+
* @returns 翻译后的文本
|
|
941
|
+
*/
|
|
942
|
+
t(key: string): string;
|
|
943
|
+
/**
|
|
944
|
+
* 设置分屏模式
|
|
945
|
+
* @param mode - 分屏模式(预设模式或自定义布局配置)
|
|
946
|
+
* @fires mode:change - 当模式变化时触发
|
|
947
|
+
* @example
|
|
948
|
+
* ```typescript
|
|
949
|
+
* // 使用预设模式
|
|
950
|
+
* layout.setMode(9); // 切换为 9 分屏
|
|
951
|
+
* // 使用自定义布局
|
|
952
|
+
* layout.setMode({ rows: 3, cols: 5 }); // 自定义 3x5 布局 mode 为 'custom'
|
|
953
|
+
* ```
|
|
954
|
+
*/
|
|
955
|
+
setMode(mode: LayoutMode | CustomLayout): void;
|
|
956
|
+
/**
|
|
957
|
+
* 设置分屏数据
|
|
958
|
+
* @param screen - 分屏数据数
|
|
959
|
+
* @param index - 分屏索引(从1开始)(可选),默认当前选中的分屏索引(从1开始)
|
|
960
|
+
* @example
|
|
961
|
+
* ```typescript
|
|
962
|
+
* layout.setScreen({
|
|
963
|
+
* url: "https://example.com/video.flv"
|
|
964
|
+
* });
|
|
965
|
+
* ```
|
|
966
|
+
*/
|
|
967
|
+
setScreen(screen: ScreenItem, index?: number): void;
|
|
968
|
+
/**
|
|
969
|
+
* 关闭指定分屏, 删除对应分屏数据(不可恢复)
|
|
970
|
+
* @param index - 分屏索引(从1开始)(可选),默认当前选中的分屏索引(从1开始)
|
|
971
|
+
* @example
|
|
972
|
+
* ```typescript
|
|
973
|
+
* layout.close(1); // 关闭第 1 分屏
|
|
974
|
+
* ```
|
|
975
|
+
*/
|
|
976
|
+
close(index?: number): void;
|
|
977
|
+
/**
|
|
978
|
+
* 设置主题模式
|
|
979
|
+
* @param theme - 主题('light' 或 'dark')
|
|
980
|
+
* @fires theme:change - 当主题变化时触发
|
|
981
|
+
* @example
|
|
982
|
+
* ```typescript
|
|
983
|
+
* layout.setTheme('light');
|
|
984
|
+
* ```
|
|
985
|
+
*/
|
|
986
|
+
setTheme(theme: 'light' | 'dark'): void;
|
|
987
|
+
/**
|
|
988
|
+
* 切换网页全屏模式
|
|
989
|
+
* @returns Promise - 全屏操作结果
|
|
990
|
+
* @example
|
|
991
|
+
* ```typescript
|
|
992
|
+
* layout.toggleWebFullscreen();
|
|
993
|
+
* ```
|
|
994
|
+
*/
|
|
995
|
+
toggleWebFullscreen(): Promise<void>;
|
|
996
|
+
/**
|
|
997
|
+
* 切换全局`全屏模式
|
|
998
|
+
* @returns Promise - 全屏操作结果
|
|
999
|
+
* @example
|
|
1000
|
+
* ```typescript
|
|
1001
|
+
* layout.toggleFullscreen();
|
|
1002
|
+
* ```
|
|
1003
|
+
*/
|
|
1004
|
+
toggleFullscreen(): Promise<void>;
|
|
1005
|
+
/**
|
|
1006
|
+
* 全部播放
|
|
1007
|
+
* @param index - 窗口索引(从1开始),不传则全部播放
|
|
1008
|
+
*/
|
|
1009
|
+
play(index?: number): void;
|
|
1010
|
+
/**
|
|
1011
|
+
* 全部暂停
|
|
1012
|
+
* @param index - 窗口索引(从1开始),不传则全部暂停
|
|
1013
|
+
*/
|
|
1014
|
+
pause(index?: number): void;
|
|
1015
|
+
/**
|
|
1016
|
+
* 指定窗口静音或取消静音
|
|
1017
|
+
* @param {boolean} muted - 是否静音
|
|
1018
|
+
* @param {number=} index - 窗口索引(从1开始),空值默认所有窗口
|
|
1019
|
+
*/
|
|
1020
|
+
muted(muted?: boolean, index?: number): void;
|
|
1021
|
+
/**
|
|
1022
|
+
* @description 截图,调用后弹出下载框保存截图
|
|
1023
|
+
* @param {string=} filename 保存的文件名, 默认 时间戳
|
|
1024
|
+
* @param {string=} format 截图的格式,可选png或jpeg或者webp ,默认 png
|
|
1025
|
+
* @param {number=} quality 当格式是jpeg或者webp时,压缩质量,取值0 ~ 1 ,默认 0.92
|
|
1026
|
+
* @param {("download" | "base64" | "blob")=} type download,base64,blob, 默认download
|
|
1027
|
+
* @param {number=} index - 窗口索引(从1开始),空值默认当前选中窗口
|
|
1028
|
+
*
|
|
1029
|
+
* @returns {string | Blob | undefined} undefined 代表截图失败
|
|
1030
|
+
* @example
|
|
1031
|
+
* ```ts
|
|
1032
|
+
* player.screenshot()
|
|
1033
|
+
* player.screenshot("filename", "jpeg", 0.7, "download")
|
|
1034
|
+
* ```
|
|
1035
|
+
*/
|
|
1036
|
+
screenshot(filename?: string, format?: 'png' | 'jpeg' | 'webp', quality?: number, type?: 'download' | 'base64' | 'blob', index?: number): void;
|
|
1037
|
+
/**
|
|
1038
|
+
* 设置视频画面缩放模式
|
|
1039
|
+
* @param {0 | 1 | 2} scaleMode - 缩放模式, 0: 窗口铺满, 1: 等比缩放大边铺满, 2: 等比缩放小边铺满
|
|
1040
|
+
* @param {number=} index - 窗口索引(从1开始),空值默认所有窗口
|
|
1041
|
+
*/
|
|
1042
|
+
setScaleMode(scaleMode: ThemeOptions['scaleMode'], index?: number): void;
|
|
1043
|
+
/**
|
|
1044
|
+
* 设置视频画面缩放模式
|
|
1045
|
+
* @param {SettingsPanelOptions['audioMode']} audioMode - 音频模式 selected: 选中的有声音 all: 所有窗口都有声音 muted: 所有窗口都静音
|
|
1046
|
+
*/
|
|
1047
|
+
setAudioMode(audioMode: SettingsPanelOptions['audioMode']): void;
|
|
1048
|
+
/**
|
|
1049
|
+
* 重新调整播放器窗口大小
|
|
1050
|
+
*
|
|
1051
|
+
* Adjust the player window size
|
|
1052
|
+
* @param {number | string} width 宽度(容器的宽度,支持 CSS 单位或数字(px))
|
|
1053
|
+
* @param {number | string} height 高度(容器的高度,支持 CSS 单位或数字(px))
|
|
1054
|
+
* @example
|
|
1055
|
+
* ```ts
|
|
1056
|
+
* layout.resize(600, 400) // 600px * 400px
|
|
1057
|
+
* layout.resize("600px", "400px") // 600px * 400px
|
|
1058
|
+
* layout.resize("50%", "1vh")
|
|
1059
|
+
* layout.resize("2em", "2rem")
|
|
1060
|
+
* ```
|
|
1061
|
+
*/
|
|
1062
|
+
resize(width?: number | string, height?: number | string): void;
|
|
1063
|
+
/**
|
|
1064
|
+
* 销毁组件实例
|
|
1065
|
+
* @remarks
|
|
1066
|
+
* 清理所有事件监听器和 DOM 元素
|
|
1067
|
+
* @example
|
|
1068
|
+
* ```typescript
|
|
1069
|
+
* layout.destroy();
|
|
1070
|
+
* ```
|
|
1071
|
+
*/
|
|
1072
|
+
destroy(): void;
|
|
1073
|
+
/**
|
|
1074
|
+
* @param {number=} index - 窗口索引(从1开始),空值默认所有窗口
|
|
1075
|
+
*/
|
|
1076
|
+
private _getPlayers;
|
|
1077
|
+
/**
|
|
1078
|
+
* 监听全屏状态变化
|
|
1079
|
+
* @private
|
|
1080
|
+
*/
|
|
1081
|
+
private _listenFullscreenChange;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
/**
|
|
1085
|
+
* 分屏布局组件库
|
|
1086
|
+
* @packageDocumentation
|
|
1087
|
+
*/
|
|
1088
|
+
|
|
1089
|
+
export { AbstractPlayer, Control, Fullscreen, LeftControls, Mode, Muted, Play, RightControls, Screenshot, Settings, SettingsPanel, WebFullscreen, __CAN_DISABLED_CONTROL__, MultiScreen as default };
|
|
1090
|
+
export type { ControlConstructor, CustomLayout, FullscreenOptions, LayoutMode, ModeOptions, MultiScreenEvents, MultiScreenOptions, MutedOptions, PlayOptions, ScreenItem, ScreenshotOptions, SettingsData, SettingsOptions, SettingsPanelOptions, SlControlOptions, ToolbarPlugin, WebFullscreenOptions };
|