</pre> </section> <!-- --> <div class="download-section"> <div class="download-buttons"> <button class="download-btn" onclick="downloadLyric('lrc')"> 📥 LRC </button> <button class="download-btn" style="background: linear-gradient(135deg, #81C784 0%, #66BB6A 100%);" onclick="downloadLyric('txt')"> 📄 TXT </button> </div> <p class="download-tip">ֿ֧OKͬʾü±༭</p> </div> </div> <!-- Ƶ --> <div class="audio-player" id="audioPlayer"> <div class="player-header"> <div class="player-info" id="playerInfo"> ڲ: Ȫˮ </div> <div class="player-actions"> <button class="player-action-btn" onclick="minimizePlayer()" title="С">➖</button> <button class="player-action-btn" onclick="togglePlayer()" title="رղ"></button> </div> </div> <div class="player-controls"> <button class="control-btn" onclick="togglePlay()" id="playPauseBtn">▶️</button> <div class="progress-bar" onclick="seekAudio(event)" id="progressBar"> <div class="progress" id="progress"></div> </div> <div class="time-display" id="timeDisplay">0:00 / 0:00</div> </div> <!-- ưť --> <div class="player-extra-controls"> <button class="extra-control-btn" onclick="toggleLoop()" id="loopBtn" title="ѭ"> 🔄 ѭ </button> <button class="extra-control-btn" onclick="toggleMute()" id="muteBtn" title=""> 🔊 </button> </div> <!-- ʾ --> <div class="lyrics-display" id="lyricsDisplay"> <div class="lyric-line">ظ...</div> </div> <audio id="audioElement" preload="metadata"> <!-- ƵԴͨJavaScript --> </audio> </div> <!-- 㲥 --> <div class="mini-player" id="miniPlayer"> <div class="mini-player-info"> <div class="mini-player-title">Ȫˮ</div> <div class="mini-player-artist">С</div> </div> <div class="mini-player-controls"> <button class="mini-player-btn" onclick="togglePlay()" id="miniPlayPauseBtn">▶️</button> <button class="mini-player-btn expand" onclick="expandPlayer()" title="չ">⛶</button> </div> </div> <!-- ̶ť --> <div class="fixed-buttons"> <button class="play-music-btn" onclick="togglePlayer()" id="playMusicBtn" title="">🎵</button> <button class="back-to-top" onclick="scrollToTop()" title="ض"></button> </div> <script> let a=null,p=!1,v=!1,l=[],c=-1,o=!1,m=!1,i=!1; function showLyric(e){document.querySelectorAll(".lyric-section").forEach(t=>{t.style.display="none"}),document.querySelectorAll(".switch-btn").forEach(t=>{t.classList.remove("active")});const t=document.getElementById(`${e}-lyric`);t&&(t.style.display="block",event.target.classList.add("active"))}async function copyLyric(e){const t=document.getElementById(e),n=t.querySelector(".lyric-content"),c=t.querySelector(".copy-btn"),l=c.innerHTML,r=n.innerText;try{await navigator.clipboard.writeText(r),c.innerHTML='<span>✅</span> Ѹ',c.classList.add("copied"),setTimeout(()=>{c.innerHTML=l,c.classList.remove("copied")},2e3)}catch(e){console.error("ʧ:",e);const t=document.createElement("textarea");t.value=r,document.body.appendChild(t),t.select();try{document.execCommand("copy"),c.innerHTML='<span>✅</span> Ѹ',c.classList.add("copied"),setTimeout(()=>{c.innerHTML=l,c.classList.remove("copied")},2e3)}catch(e){console.error("øƷҲʧ:",e),alert("ʧܣֶѡı")}document.body.removeChild(t)}}function downloadLyric(e){let t="",n="";const c='Ȫˮ',l='С';switch(e){case"lrc":t=document.querySelector("#lrc-lyric .lyric-content").innerText,n=`${c}-${l}.lrc`;break;case"txt":t=document.querySelector("#plain-lyric .lyric-content").innerText,n=`${c}-${l}.txt`;break;case"translated":t=document.querySelector("#translated-lyric .lyric-content").innerText,n=`${c}-${l}-.txt`;break;default:return}const r=new Blob([t],{type:"text/plain;charset=utf-8"}),d=URL.createObjectURL(r),s=document.createElement("a");s.href=d,s.download=n,document.body.appendChild(s),s.click(),setTimeout(()=>{document.body.removeChild(s),URL.revokeObjectURL(d)},100)}function scrollToTop(){window.scrollTo({top:0,behavior:"smooth"})}window.addEventListener("scroll",function(){const e=document.querySelector(".back-to-top");window.pageYOffset>300?e.classList.add("show"):e.classList.remove("show")});function togglePlayer(){const e=document.getElementById("audioPlayer"),t=document.getElementById("miniPlayer");v?(e.classList.remove("show"),t.classList.remove("show"),v=!1,i=!1,a&&!a.paused&&togglePlay()):(e.classList.add("show"),v=!0,i=!1,initAudio())}function minimizePlayer(){const e=document.getElementById("audioPlayer"),t=document.getElementById("miniPlayer");e.classList.add("minimized"),t.classList.add("show"),i=!0,setTimeout(()=>{e.classList.remove("show")},300)}function expandPlayer(){const e=document.getElementById("audioPlayer"),t=document.getElementById("miniPlayer");t.classList.remove("show"),e.classList.remove("minimized"),e.classList.add("show"),i=!1}function toggleLoop(){a&&(o=!o,a.loop=o,document.getElementById("loopBtn").classList.toggle("active"))}function toggleMute(){a&&(m=!m,a.muted=m,document.getElementById("muteBtn").classList.toggle("active"))}function parseLRC(e){const t=e.split("n"),n=[];n.push({time:0,text:""});for(const e of t){const r=e.match(/[(d+):(d+)(?:.|:)(d+)]/g);if(r){const t=e.replace(/[.*?]/g,"").trim();if(t)for(const e of r){const r=e.match(/[(d+):(d+)(?:.|:)(d+)]/);if(r){let e=parseInt(r[1]),s=parseInt(r[2]),d=parseInt(r[3]);2===r[3].length&&(d*=10),n.push({time:60*e+s+d/1e3,text:t})}}}}return n.sort(((e,t)=>e.time-t.time)),n}function displayLyrics(){const e=document.querySelector("#lrc-lyric .lyric-content");if(e){const t=e.innerText;l=parseLRC(t);const n=document.getElementById("lyricsDisplay");n.innerHTML="",l.length>0?l.forEach((e,t)=>{const r=document.createElement("div");r.className="lyric-line",r.textContent=e.text||"♪",r.dataset.index=t,n.appendChild(r)}):n.innerHTML='<div class="lyric-line"></div>'}}function updateCurrentLyric(e){if(0!==l.length){let t=-1;for(let n=l.length-1;n>=0;n--)if(l[n].time<=e){t=n;break}if(t!==c){c=t,document.querySelectorAll(".lyric-line").forEach(e=>{e.classList.remove("active","past")}),document.querySelectorAll(".lyric-line").forEach((e,n)=>{n===c?(e.classList.add("active"),e.scrollIntoView({behavior:"smooth",block:"center"})):n<c&&e.classList.add("past")})}}}function seekAudio(e){if(a){const t=document.getElementById("progressBar"),n=t.getBoundingClientRect(),c=(e.clientX-n.left)/n.width;a.currentTime=c*a.duration}}function showPremiumNotice(){document.getElementById("playerInfo").textContent="Ѹ֧",document.getElementById("playPauseBtn").disabled=!0,document.getElementById("playPauseBtn").textContent="🚫",document.getElementById("miniPlayPauseBtn").disabled=!0,document.getElementById("miniPlayPauseBtn").textContent="🚫",document.getElementById("lyricsDisplay").innerHTML='<div class="premium-notice"><span class="icon">🎵</span><div>˸Ϊ</div><div>֧</div><div style="margin-top:10px;font-size:.8rem;color:var(--text-light)">רƽ̨</div></div>'}function initAudio(){if(!a){a=document.getElementById("audioElement");const e=1922561246;fetch(`/api/proxy.php?id=${e}`).then(e=>{if(!e.ok)throw new Error("Ӧ");return e.json()}).then(e=>{if(e.url){a.src=e.url,a.addEventListener("loadeddata",function(){console.log("Ƶسɹ"),displayLyrics()}),a.addEventListener("error",function(e){console.error("Ƶʧ:",e),showPremiumNotice()}),a.addEventListener("loadedmetadata",function(){updateTimeDisplay()}),a.addEventListener("timeupdate",function(){updateProgress(),updateTimeDisplay(),updateCurrentLyric(a.currentTime)}),a.addEventListener("ended",function(){a.loop||(p=!1,document.getElementById("playPauseBtn").textContent="▶️",document.getElementById("miniPlayPauseBtn").textContent="▶️",document.getElementById("playMusicBtn").classList.remove("playing"),c=-1,document.querySelectorAll(".lyric-line").forEach(e=>{e.classList.remove("active","past")}))}),a.load()}else showPremiumNotice()}).catch(e=>{console.error("ȡURLʧ:",e),showPremiumNotice()})}}function togglePlay(){if(a&&a.src)if(p)a.pause(),document.getElementById("playPauseBtn").textContent="▶️",document.getElementById("miniPlayPauseBtn").textContent="▶️",document.getElementById("playMusicBtn").classList.remove("playing");else{a.play().catch(e=>{console.error("ʧ:",e),showPremiumNotice()}),document.getElementById("playPauseBtn").textContent="⏸️",document.getElementById("miniPlayPauseBtn").textContent="⏸️",document.getElementById("playMusicBtn").classList.add("playing")}p=!p}function updateProgress(){a&&(document.getElementById("progress").style.width=a.currentTime/a.duration*100+"%")}function updateTimeDisplay(){if(a){const e=formatTime(a.currentTime),t=formatTime(a.duration);document.getElementById("timeDisplay").textContent=`${e} / ${t}`}}function formatTime(e){return isNaN(e)?"0:00":(Math.floor(e/60)+":"+(Math.floor(e%60)<10?"0":"")+Math.floor(e%60))}document.addEventListener("DOMContentLoaded",function(){showLyric("plain")}); </script> <script src="/static/js/connJs.js"></script> </body></html>
