|
|
@ -106,9 +106,9 @@ const playNextAudio = () => { |
|
|
|
|
|
|
|
const audio = new Howl({ |
|
|
|
src: [audioInfo.url], |
|
|
|
html5: true, |
|
|
|
html5: false, |
|
|
|
format: ["mp3", "acc"], |
|
|
|
rate: 1.2, |
|
|
|
// rate: 1.2, |
|
|
|
retryCount: 0, |
|
|
|
onplay: () => { |
|
|
|
audioStore.isPlaying = true; |
|
|
@ -4350,6 +4350,32 @@ function renderAllKlineCharts() { |
|
|
|
|
|
|
|
// 初始化随机GIF |
|
|
|
onMounted(() => { |
|
|
|
// 检测移动设备 |
|
|
|
const isMobile = |
|
|
|
/Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( |
|
|
|
navigator.userAgent |
|
|
|
); |
|
|
|
|
|
|
|
if (isMobile) { |
|
|
|
// 强制移动设备使用 Web Audio API |
|
|
|
Howler.html5PoolSize = 1; // 限制HTML5音频池大小 |
|
|
|
Howler.autoSuspend = false; // 禁用自动挂起 |
|
|
|
Howler.usingWebAudio = true; // 强制使用Web Audio API |
|
|
|
|
|
|
|
// 激活音频上下文 |
|
|
|
const activateAudioContext = () => { |
|
|
|
if (Howler.ctx && Howler.ctx.state === "suspended") { |
|
|
|
Howler.ctx.resume(); |
|
|
|
console.log("音频上下文已激活"); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// 监听用户交互以激活音频上下文 |
|
|
|
document.addEventListener("touchstart", activateAudioContext, { |
|
|
|
once: true, |
|
|
|
}); |
|
|
|
document.addEventListener("click", activateAudioContext, { once: true }); |
|
|
|
} |
|
|
|
// 初始化marked组件 |
|
|
|
marked.setOptions({ |
|
|
|
breaks: true, // 支持换行符转换为 <br> |
|
|
|