APlayer 中文文档 下载 App

APlayer 特有播放器事件列表

与音频事件的区别

上一页 音频事件 是底层 HTML5 Audio 原生事件,由浏览器触发。本页的事件是 APlayer 自己实现的、在播放器层面触发的事件,与具体音频无关。

对比项音频事件播放器事件
触发者浏览器(HTML5 Audio API)APlayer 自身逻辑
含义具体音频的加载、播放、出错等播放器 UI 和结构的变化
数量20+ 个(标准事件)13 个
典型事件play、pause、ended、errorlistshow、listswitch、lrcshow、destroy

播放器事件完整列表

列表相关(6 个)

事件触发时机
listshow播放列表展开
listhide播放列表折叠
listadd添加一个或多个音频到列表
listremove从列表移除一个音频
listswitch切换到列表中另一首音频
listclear清空整个播放列表

歌词相关(2 个)

事件触发时机
lrcshow歌词区域显示
lrchide歌词区域隐藏

通知相关(2 个)

事件触发时机
noticeshow通知消息弹出
noticehide通知消息消失

其他(3 个)

事件触发时机
destroy播放器被销毁
volumechange音量变化(此事件同时属于音频事件和播放器事件)
themechange主题色变化(部分版本支持)

示例代码

监听全部列表事件

const ap = new APlayer({ ... });

ap.on('listshow', () => console.log('列表展开'));
ap.on('listhide', () => console.log('列表折叠'));
ap.on('listadd', (audio) => console.log('添加:', audio.name));
ap.on('listremove', (audio) => console.log('移除:', audio.name));
ap.on('listswitch', (index) => console.log('切到第', index + 1, '首'));
ap.on('listclear', () => console.log('列表清空'));

监听歌词显隐

ap.on('lrcshow', () => {
    document.getElementById('lrc-btn').textContent = '隐藏歌词';
});

ap.on('lrchide', () => {
    document.getElementById('lrc-btn').textContent = '显示歌词';
});

监听销毁

ap.on('destroy', () => {
    console.log('播放器已销毁');
    // 在这里清理自定义引用
    ap = null;
});

listswitch 的 index 参数

listswitch 事件的回调函数会接收一个 index 参数,这是新歌曲在数组中的下标(从 0 开始)。

ap.on('listswitch', function(index) {
    const audio = ap.list.audios[index];
    console.log(`切到: ${audio.name} - ${audio.artist}(第 ${index + 1} 首)`);
});

事件的触发顺序

以一次正常的歌曲切换为例,事件触发顺序是:

  1. pause(旧歌曲暂停)
  2. listswitch(列表切换到新歌曲)
  3. play / playing(新歌曲开始播放)
  4. listswitch 之后如果新歌曲有自己的 theme,主题色会跟着变

以一次 list.add() 为例:

  1. listadd(触发一次,即使添加了多个音频)

以一次 ap.destroy() 为例:

  1. 暂停当前播放
  2. 清理 DOM 元素
  3. destroy(触发)

事件解绑

APlayer 不提供单独的 off() 方法。如果需要解绑事件:

// 方式一:销毁整个播放器(所有事件自动清除)
ap.destroy();

// 方式二:自行维护回调函数的引用(推荐做法)
function myPlayHandler() { ... }
ap.on('play', myPlayHandler);

// 如果需要解绑,可以改写 APlayer 的事件系统或直接 ap.destroy()
// 实际上大多数场景不需要解绑——destroy 会自动处理

简单说:不需要纠结解绑。ap.destroy() 会一次性清理所有事件绑定和 DOM 操作。