From 15ee4e7afac4091995a2cd9c7569587f54ea6c77 Mon Sep 17 00:00:00 2001 From: kron Date: Tue, 25 Nov 2025 15:02:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9F=B3=E9=A2=91loading?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/audioManager.js | 25 +++++++- src/pages.json | 3 + src/pages/load-resources.vue | 107 +++++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 src/pages/load-resources.vue diff --git a/src/audioManager.js b/src/audioManager.js index 044ba09..03ac17e 100644 --- a/src/audioManager.js +++ b/src/audioManager.js @@ -123,6 +123,8 @@ class AudioManager { // 网络状态相关 this.networkOnline = true; this.pendingPlayKey = null; + // 新增:就绪状态映射 + this.readyMap = new Map(); try { uni.onNetworkStatusChange(({ isConnected }) => { this.networkOnline = !!isConnected; @@ -224,6 +226,8 @@ class AudioManager { } catch (_) {} } clearTimeout(loadTimeout); + // 标记为已就绪 + this.readyMap.set(key, true); debugLog(`音频 ${key} 已加载完成`); uni.$emit("audioLoaded", key); const loadedAudioKeys = uni.getStorageSync("loadedAudioKeys") || {}; @@ -237,6 +241,8 @@ class AudioManager { clearTimeout(loadTimeout); debugLog(`音频 ${key} 加载失败:`, res.errMsg); this.allowPlayMap.set(key, false); + // 标记为未就绪 + this.readyMap.set(key, false); this.handleAudioError(key); if (callback) callback(); }); @@ -476,6 +482,7 @@ class AudioManager { this.allowPlayMap.delete(k); this.retryCount.delete(k); this.audioMap.delete(k); + this.readyMap.delete(k); } this.audioKeys = []; this.currentLoadingIndex = 0; @@ -573,7 +580,23 @@ class AudioManager { } debugLog(`静音状态已设置为: ${this.isMuted}`); } + + // 新增:返回音频加载进度(0~1) + getLoadProgress() { + // 总数优先使用已初始化的 audioKeys,未初始化则回退到 audioFils + const keys = + this.audioKeys && this.audioKeys.length > 0 + ? this.audioKeys + : Object.keys(audioFils); + const total = keys.length; + if (total === 0) return 0; + let loaded = 0; + for (const k of keys) { + if (this.readyMap.get(k)) loaded++; + } + return loaded / total; + } } // 导出单例 -export default new AudioManager(); +export default new AudioManager(); \ No newline at end of file diff --git a/src/pages.json b/src/pages.json index ffdb1ff..931d6b6 100644 --- a/src/pages.json +++ b/src/pages.json @@ -1,5 +1,8 @@ { "pages": [ + { + "path": "pages/load-resources" + }, { "path": "pages/index" }, diff --git a/src/pages/load-resources.vue b/src/pages/load-resources.vue new file mode 100644 index 0000000..d69f220 --- /dev/null +++ b/src/pages/load-resources.vue @@ -0,0 +1,107 @@ + + + + +