bugfix1001.2

欢迎来到Star Engine 星引擎 WIKI!
Wiki交流QQ群:1090018247
点击成为魔法少女! 点击成为星趴高手!

由于游戏更新,Wiki正在更新页面,当前内容可能并非最新版本,欢迎进群督促!

全站通知:

Widget:Audioplayer

来自吉星派对WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

<script> // 存储当前正在播放的音频实例(全局唯一) let currentAudio = null; // 操作锁,防止快速连击造成状态混乱 let isLocked = false;

document.addEventListener('click', function(e) {

   const audioPlayer = e.target.closest('.audio-player');
   if (!audioPlayer) return;
   const audioSrc = audioPlayer.getAttribute('data-src');
   if (!audioSrc) {
       console.error('播放失败:音频地址不存在');
       alert('音频地址无效,无法播放~');
       return;
   }
   // 如果正在处理上一个操作,忽略本次点击
   if (isLocked) return;
   isLocked = true;
   // 辅助:解锁
   const unlock = () => { isLocked = false; };
   // 如果当前有音频实例
   if (currentAudio) {
       // 同一个音频 → 从头重播
       if (currentAudio.src === audioSrc) {
           // 先暂停,重置时间,再播放
           currentAudio.pause();
           currentAudio.currentTime = 0;
           currentAudio.play().catch(handlePlayError).finally(unlock);
       } else {
           // 不同音频 → 停止旧音频,创建新音频
           // 先彻底停止旧音频(移除事件等,避免后续干扰)
           currentAudio.pause();
           currentAudio.src = ;   // 释放资源
           currentAudio = null;
           // 创建新音频
           currentAudio = new Audio(audioSrc);
           currentAudio.play().catch(handlePlayError).finally(unlock);
       }
   } else {
       // 无正在播放的音频:创建新实例并播放
       currentAudio = new Audio(audioSrc);
       currentAudio.play().catch(handlePlayError).finally(unlock);
   }
   function handlePlayError(error) {
       // AbortError 是由快速操作(如暂停后立即播放)引起的,属于正常情况,不需提示
       if (error.name === 'AbortError') {
           console.log('播放被正常中断');
           return;
       }
       console.error('播放失败:', error);
       const errorMsg = error.name === 'NotAllowedError'
           ? '浏览器禁止自动播放,请先与页面交互后再尝试~'
           : '音频播放失败,请检查地址是否有效或网络状态';
       alert(errorMsg);
       currentAudio = null;  // 重置当前音频实例
   }

}); </script>