现在有一个HTML文件,相关代码如下[HTML] 纯文本查看 复制代码 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LRC文件加载器</title>
<style>
body {
font-family: Arial, sans-serif;
padding: 20px;
}
pre {
white-space: pre-wrap;
word-wrap: break-word;
}
</style>
</head>
<body>
<h2>LRC文件加载器</h2>
<div id="lrcContent">
<!-- 这里将显示LRC文件的内容 -->
</div>
<script>
let lrcLines = []; // 用于存储解析后的LRC歌词数据
let currentIndex = 0; // 当前歌词行索引
// 获取URL中的LRC文件地址
const urlParams = new URLSearchParams(window.location.search);
const lrcFileUrl = urlParams.get('URL');
// 加载并解析LRC文件内容
if (lrcFileUrl) {
fetch(lrcFileUrl)
.then(response => response.text())
.then(data => {
parseLrc(data); // 解析LRC文件内容
setInterval(displayCurrentLine, 500); // 每隔500ms更新显示当前时间的歌词
})
.catch(error => {
console.error('Error fetching LRC file:', error);
document.getElementById('lrcContent').innerText = 'Failed to load LRC file.';
});
} else {
document.getElementById('lrcContent').innerText = 'No LRC file specified.';
}
// 解析LRC文件内容
function parseLrc(data) {
lrcLines = []; // 清空之前的歌词数据
const lines = data.split('\n');
lines.forEach(line => {
const match = line.match(/\[(\d{2}):(\d{2})\.(\d{2,3})\](.*)/);
if (match) {
const minutes = parseInt(match[1]);
const seconds = parseInt(match[2]);
const milliseconds = parseInt(match[3]);
const time = minutes * 60 + seconds + milliseconds / 1000;
const text = match[4].trim();
lrcLines.push({ time, text });
}
});
}
// 显示当前时间点的歌词内容
function displayCurrentLine() {
const audioElement = document.getElementById('audio'); // 如果有音频,可以获取当前播放时间
let currentTime = audioElement ? audioElement.currentTime : 0; // 获取当前时间
// 查找当前时间点对应的歌词行
for (let i = 0; i < lrcLines.length - 1; i++) {
if (currentTime >= lrcLines[i].time && currentTime < lrcLines[i + 1].time) {
currentIndex = i;
break;
}
}
// 更新显示的歌词内容
const lrcDiv = document.getElementById('lrcContent');
lrcDiv.innerHTML = '<pre>' + escapeHtml(lrcLines[currentIndex].text) + '</pre>';
}
// 函数用于转义HTML特殊字符,避免XSS攻击
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
</script>
</body>
</html>
在使用时出现无法加载响应数据的情况
这种情况应该如何解决
|