JavaScript 是一門廣泛應用于 Web 開發的腳本語言,具有良好的交互性和動態性。在 Web 應用中,實現歌詞同步是一個非常常見的需求。JavaScript 歌詞同步組件就是為了滿足這一需求而產生的。
下面我們來看一個簡單的歌詞同步組件的實現:
// 歌詞同步組件 (function() { var lyric = [ {"time": "0:00.00", "text": "Oh baby, baby"}, {"time": "0:04.20", "text": "How was I supposed to know"}, {"time": "0:08.60", "text": "That something wasn't right here"}, {"time": "0:12.20", "text": "Oh baby, baby"}, {"time": "0:16.00", "text": "I shouldn't have let you go"}, {"time": "0:19.10", "text": "And now you're out of sight, yeah"}, ]; var i = 0; var lrcHeight = $(".lyric").height() / 2; function showLyric() { var t = audio.currentTime; var min = Math.floor(t / 60); var sec = Math.floor(t % 60); var str = (min< 10 ? "0" + min : min) + ":" + (sec< 10 ? "0" + sec : sec) + "." + (t * 100 % 100).toFixed(0); for (var j = 0; j< lyric.length; j++) { if (lyric[j].time == str) { $(".lyric p").removeClass('active'); $(".lyric p").eq(j).addClass('active'); $('.lyric').animate({scrollTop: lrcHeight * (j - 2)}, 500); i = j; } } if (i< lyric.length - 1 && t >parseFloat(lyric[i + 1].time)) { $(".lyric p").removeClass('active'); $(".lyric p").eq(i + 1).addClass('active'); $('.lyric').animate({scrollTop: lrcHeight * (i - 1)}, 500); i++; } } setInterval(showLyric, 100); })();
上述代碼實現了一個簡單的歌詞同步效果。具體來說,歌詞數據以 JSON 形式存在,并通過時間軸進行匹配展示(核心代碼:if (lyric[j].time == str))。同時,若當前時間已經超過了對應歌詞的時間,組件會自動滾動到下一句歌詞(核心代碼:if (i < lyric.length - 1 && t > parseFloat(lyric[i + 1].time)))。這個實現雖然簡單,但已經足以滿足大多數 Web 應用中的歌詞同步需求。
當然,我們可以根據實際需求對該組件進行進一步的擴展與定制。例如,我們可以為歌詞同步組件加上暫停、播放等操作的控制面板;我們可以讓整個組件支持多語言,從而實現多語言歌詞的同步;我們還可以利用一些動畫庫,為歌詞滾動添加更為美觀的效果等等。總的來說,JavaScript 歌詞同步組件不僅能夠幫助我們更好地實現歌詞同步效果,也非常適合作為 Web 開發中的一個小型、復用性強的工具,減少開發成本、提高項目效率。
上一篇css在元素前插入