修复首句歌词被提前播放的问题
This commit is contained in:
@@ -68,7 +68,7 @@ export default class Lyric {
|
||||
_handleLinePlayerOnPlay = (num, text, curTime) => {
|
||||
if (this.isLineMode) {
|
||||
if (num < this.playingLineNum + 1) {
|
||||
for (let i = this.playingLineNum; i > num - 1; i--) {
|
||||
for (let i = this.playingLineNum, minNum = Math.max(num, 0); i > minNum - 1; i--) {
|
||||
const font = this._lineFonts[i]
|
||||
font.reset()
|
||||
font.lineContent.classList.remove(this.activeLineClassName)
|
||||
@@ -86,7 +86,7 @@ export default class Lyric {
|
||||
}
|
||||
} else {
|
||||
if (num < this.playingLineNum + 1) {
|
||||
for (let i = this.playingLineNum; i > num - 1; i--) {
|
||||
for (let i = this.playingLineNum, minNum = Math.max(num, 0); i > minNum - 1; i--) {
|
||||
const font = this._lineFonts[i]
|
||||
font.lineContent.classList.remove(this.activeLineClassName)
|
||||
font.reset()
|
||||
@@ -103,10 +103,12 @@ export default class Lyric {
|
||||
}
|
||||
}
|
||||
this.playingLineNum = num
|
||||
const font = this._lineFonts[num]
|
||||
font.lineContent.classList.add(this.activeLineClassName)
|
||||
font.play(curTime - this._lines[num].time)
|
||||
this.onPlay(num, this._lines[num].text)
|
||||
if (num > -1) {
|
||||
const font = this._lineFonts[num]
|
||||
font.lineContent.classList.add(this.activeLineClassName)
|
||||
font.play(curTime - this._lines[num].time)
|
||||
}
|
||||
this.onPlay(num, this._lines[num]?.text ?? '')
|
||||
}
|
||||
|
||||
_initLines = (lyricLines, offset, isUpdate) => {
|
||||
|
||||
@@ -148,7 +148,7 @@ export default class LinePlayer {
|
||||
const currentTime = this._currentTime()
|
||||
const driftTime = currentTime - curLine.time
|
||||
|
||||
if (driftTime >= 0 || this.curLineNum === 0) {
|
||||
if (driftTime >= 0) {
|
||||
let nextLine = this.lines[this.curLineNum + 1]
|
||||
const delay = (nextLine.time - curLine.time - driftTime) / this._rate
|
||||
|
||||
@@ -167,6 +167,17 @@ export default class LinePlayer {
|
||||
this._refresh()
|
||||
return
|
||||
}
|
||||
} else if (this.curLineNum == 0) {
|
||||
let firstLine = this.lines[0]
|
||||
const delay = (firstLine.time - currentTime) / this._rate
|
||||
if (this.isPlay) {
|
||||
timeoutTools.start(() => {
|
||||
if (!this.isPlay) return
|
||||
this._refresh()
|
||||
}, delay)
|
||||
}
|
||||
this.onPlay(-1, '', currentTime)
|
||||
return
|
||||
}
|
||||
|
||||
this.curLineNum = this._findCurLineNum(currentTime, this.curLineNum) - 1
|
||||
|
||||
Reference in New Issue
Block a user