From d637a0fa723831dae3097ced7412df8bcb1abbff Mon Sep 17 00:00:00 2001 From: kron Date: Thu, 6 Nov 2025 14:06:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=BC=E5=AE=B9=E6=80=A7?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/audioManager.js | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/audioManager.js b/src/audioManager.js index 5b27186..35f66f4 100644 --- a/src/audioManager.js +++ b/src/audioManager.js @@ -162,10 +162,12 @@ class AudioManager { // 监听加载状态 audio.onCanplay(() => { - // 保险:预加载阶段确保不播放 - try { - audio.pause(); - } catch (_) {} + // 预加载阶段:仅在未授权情况下暂停,避免用户刚点击播放被打断 + if (!this.allowPlayMap.get(key)) { + try { + audio.pause(); + } catch (_) {} + } clearTimeout(loadTimeout); debugLog(`音频 ${key} 已加载完成`); uni.$emit("audioLoaded", key); @@ -284,6 +286,34 @@ class AudioManager { } } + // 停止所有音频 + stopAll() { + for (const [k, audio] of this.audioMap.entries()) { + try { + audio.stop(); + } catch (_) {} + this.allowPlayMap.set(k, false); + } + this.currentPlayingKey = null; + } + + // 销毁所有音频实例并清理状态 + destroyAll() { + for (const [k, audio] of this.audioMap.entries()) { + try { + audio.destroy(); + } catch (_) {} + this.allowPlayMap.delete(k); + this.retryCount.delete(k); + this.audioMap.delete(k); + } + this.audioKeys = []; + this.currentLoadingIndex = 0; + this.isLoading = false; + this.loadingPromise = null; + this.currentPlayingKey = null; + } + // 手动重新加载指定音频 reloadAudio(key) { if (audioFils[key]) {