* 处理歌词行激活 * @param {HTMLElement} line - 歌词行元素
(line)
| 427 | * @param {HTMLElement} line - 歌词行元素 |
| 428 | */ |
| 429 | handleLyricActivate(line) { |
| 430 | // 确保元素拥有必需的数据属性 |
| 431 | if (!line || !line.dataset || line.dataset.index === undefined || line.dataset.time === undefined) { |
| 432 | console.warn('Invalid lyric element: missing required data attributes', { element: line }); |
| 433 | return; |
| 434 | } |
| 435 | |
| 436 | const index = parseInt(line.dataset.index, 10); |
| 437 | const time = parseFloat(line.dataset.time); |
| 438 | |
| 439 | // 验证解析结果 |
| 440 | if (!Number.isFinite(index) || !Number.isFinite(time)) { |
| 441 | console.warn('Invalid lyric data:', { index, time, element: line, dataIndex: line.dataset.index, dataTime: line.dataset.time }); |
| 442 | return; |
| 443 | } |
| 444 | |
| 445 | this.playLyricAtIndex(index, time); |
| 446 | this.persistPlayTime(time); |
| 447 | } |
| 448 | |
| 449 | /** |
| 450 | * 从指定时间播放 |
no test coverage detected