@sanyueqi/web-components
Version:
Web components
292 lines (263 loc) • 6 kB
TypeScript
// music-player-plugin.d.ts
/**
* 音乐平台类型
*/
declare type MusicServer = 'netease' | 'tencent' | 'kugou' | 'xiami' | 'baidu';
/**
* 音乐类型
*/
declare type MusicType = 'song' | 'playlist' | 'album' | 'search' | 'artist';
/**
* 循环模式
*/
declare type LoopMode = 'all' | 'one' | 'none';
/**
* 播放顺序
*/
declare type OrderMode = 'list' | 'random';
/**
* 预加载模式
*/
declare type PreloadMode = 'none' | 'metadata' | 'auto';
/**
* 歌词类型
*/
declare type LrcType = 0 | 1 | 2 | 3;
/**
* 本地音乐项
*/
declare interface LocalMusicItem {
/** 歌曲名称 */
name: string;
/** 歌手名称 */
artist: string;
/** 音乐文件 URL */
url: string;
/** 封面图片 URL */
cover?: string;
/** LRC 格式歌词 */
lrc?: string;
}
/**
* MetingJS 配置
*/
declare interface MetingConfig {
/** Meting API 地址 */
api?: string;
/** 音乐平台 */
server: MusicServer;
/** 音乐类型 */
type: MusicType;
/** 歌单/专辑/单曲 ID 或搜索关键词 */
id: string;
/** 认证 token */
auth?: string;
/** 备用 API 列表 */
fallbackApis?: string[];
/** MetingJS 脚本路径 */
jsPath?: string;
}
/**
* 播放器配置
*/
declare interface PlayerConfig {
/** 是否自动播放 */
autoplay?: boolean;
/** 主题色 */
theme?: string;
/** 循环模式 */
loop?: LoopMode;
/** 播放顺序 */
order?: OrderMode;
/** 预加载模式 */
preload?: PreloadMode;
/** 默认音量 (0-1) */
volume?: number;
/** 是否互斥播放 */
mutex?: boolean;
/** 歌词类型 */
lrcType?: LrcType;
/** 歌词是否默认隐藏 */
lrcHidden?: boolean;
/** 播放列表是否默认折叠 */
listFolded?: boolean;
/** 播放列表最大高度 */
listMaxHeight?: string;
/** localStorage 存储键名 */
storageName?: string;
}
/**
* 响应式配置
*/
declare interface ResponsiveConfig {
/** 移动端配置 */
mobile: {
/** 在移动端是否隐藏 */
hide: boolean;
/** 移动端断点 */
breakpoint: number;
};
}
/**
* 音乐播放器完整配置
*/
declare interface MusicPlayerConfig {
/** 启用音乐播放器功能 */
enable: boolean;
/** APlayer CSS 文件路径 */
aplayerCss?: string;
/** APlayer JS 文件路径 */
aplayerJs?: string;
/** 使用模式 */
mode: 'meting' | 'local';
/** Meting API 配置 */
meting?: MetingConfig;
/** 本地音乐配置 */
local?: {
playlist: LocalMusicItem[];
};
/** APlayer 配置选项 */
player?: PlayerConfig;
/** 响应式配置 */
responsive?: ResponsiveConfig;
}
/**
* APlayer 事件类型
*/
declare type APlayerEvent =
| 'play'
| 'pause'
| 'ended'
| 'loading'
| 'loadstart'
| 'loadeddata'
| 'canplay'
| 'playing'
| 'seeked'
| 'volumechange'
| 'lrcshow'
| 'lrchide';
/**
* APlayer 实例接口
*/
declare interface APlayerInstance {
/** 播放 */
play(): void;
/** 暂停 */
pause(): void;
/** 跳转到指定时间 */
seek(time: number): void;
/** 切换播放/暂停 */
toggle(): void;
/** 播放下一首 */
skipForward(): void;
/** 播放上一首 */
skipBack(): void;
/** 设置音量 */
volume(percentage: number, isFire?: boolean): void;
/** 监听事件 */
on(event: APlayerEvent, handler: () => void): void;
/** 销毁实例 */
destroy(): void;
/** 音频元素 */
audio: HTMLAudioElement;
/** 播放器容器 */
container: HTMLElement;
/** 歌词实例 */
lrc?: any;
/** 是否暂停 */
paused: boolean;
/** 当前音量 */
volume: number;
}
/**
* MetingJS 元素
*/
declare interface MetingJSElement extends HTMLElement {
/** APlayer 实例 */
aplayer?: APlayerInstance;
}
/**
* 音乐播放器插件主类
*/
declare class MusicPlayerPlugin {
/**
* 构造函数
*/
constructor();
/**
* 初始化音乐播放器
* @param config - 播放器配置
*/
init(config: MusicPlayerConfig): void;
/**
* 销毁音乐播放器
*/
destroy(): void;
/**
* 获取 APlayer 实例
* @returns APlayer 实例数组
*/
getPlayers(): APlayerInstance[];
/**
* 获取指定索引的播放器实例
* @param index - 播放器索引
* @returns APlayer 实例
*/
getPlayer(index: number): APlayerInstance | null;
/**
* 显示播放器
*/
show(): void;
/**
* 隐藏播放器
*/
hide(): void;
/**
* 切换播放器显示状态
*/
toggle(): void;
}
/**
* 初始化音乐播放器
* @param config - 播放器配置
*/
declare function initMusicPlayer(config: MusicPlayerConfig): void;
/**
* 销毁音乐播放器
*/
declare function destroyMusicPlayer(): void;
/**
* 获取音乐播放器实例
* @returns 音乐播放器实例
*/
declare function getMusicPlayerInstance(): MusicPlayerPlugin;
/**
* 默认导出
*/
declare const _default: {
init: typeof initMusicPlayer;
destroy: typeof destroyMusicPlayer;
getInstance: typeof getMusicPlayerInstance;
};
export {
MusicPlayerPlugin,
MusicPlayerConfig,
MetingConfig,
PlayerConfig,
ResponsiveConfig,
LocalMusicItem,
APlayerInstance,
MetingJSElement,
MusicServer,
MusicType,
LoopMode,
OrderMode,
PreloadMode,
LrcType,
APlayerEvent,
initMusicPlayer,
destroyMusicPlayer,
getMusicPlayerInstance
};
export default _default;