php中文歌詞,html如何制作滾動歌詞

html制作滾動歌詞的方法:首先在標簽里面寫好編碼格式,引入css樣式和jQuery;然后放置播放器,代碼為【】。

19239ed110e7d83530b5a347274ce2c0.png

本教程操作環境:windows7系統、html5版,DELL G3電腦。

html制作滾動歌詞的方法:

首先我們創建一個html文件,名字隨便取,比如:index.html,這個簡單,不用多說。不著急開始寫代碼,我們在創建一個css文件,不妨就命名為musicplay.css,js的話我們直接寫道html文件里面方便閱讀和調整,就不創建新的js文件了,但是你要準備jQuery文件,如果沒有也沒關系,待會說解決方法。準備工作結束了,我們開始寫了,首先在標簽里面寫好編碼格式,順便也把我們之前創建的css樣式和jQuery引入,代碼如下:

代碼如下:

愛在西元前-周杰倫

head內容寫好后,我們開始寫body里面的了,首先我們用放置播放器,就是標簽,代碼如下:

去即可 -->接著寫一個盒子,代碼如下:

盒子的css代碼如下(功能見備注):

接下來就是js腳本事了,我們的設計思路是(分下面幾個函數完成):

函數1:parseLyric()分割歌詞,這一步主要是為了分行顯示歌詞

函數2:highLight()當前放到的歌詞高亮顯示,為了表示當前唱到那一句了

函數3:audio.addEventListener()實時渲染,因為是滾動的,所以要不停的渲染

函數4:getLineNo()獲取此時的行數,如果我們快進或快退的時候,歌詞也要跟著我們的調整而改變

函數5:audio.addEventListener()播放完回到開始,這個可以不做,沒有太意義,這是為了完善功能解釋好這幾個函數之后,我直接貼代碼。

function parseLyric(text) {

//按行分割歌詞

let lyricArr = text.split('\n'); //console.log(lyricArr)

//0: "[ti:愛在西元前]" "[ar:周杰倫]"...

let result = [];

//新建一個數組存放最后結果

//遍歷分割后的歌詞數組,將格式化后的時間節點,歌詞填充到result數組

for (i = 0; i < lyricArr.length; i++) { let playTimeArr = lyricArr[i].match(/\[\d{2}:\d{2}((\.|\:)\d{2})\]/g);

//正則匹配播放時間

let lineLyric = "";

if (lyricArr[i].split(playTimeArr).length > 0) {

lineLyric = lyricArr[i].split(playTimeArr); }

if (playTimeArr != null) { for (let j = 0; j < playTimeArr.length; j++) {

let time = playTimeArr[j].substring(1, playTimeArr[j].indexOf("]")).split(":"); //數組填充

result.push({ time: (parseInt(time[0]) * 60 + parseFloat(time[1])).toFixed(4), content: String(lineLyric).substr(1) });

}

}

}

return result;

}

// 這里請按照格式放入相應歌詞--開始

// 格式可能看著很復雜,其實是根據lrc歌詞文件換句前加入\n 換行符,然后刪除多余空行.即可!// 這里請按照格式放入相應歌詞--結束

let audio = document.querySelector('audio'); let result = parseLyric(text); //執行lyc解析 // 把生成的數據顯示到界面上去

let $ul = $("

");

for (let i = 0; i < result.length; i++) { let $li = $("

").text(result[i].content); $ul.append($li);

}

$(".bg").append($ul);

let lineNo = 0;

// 當前行歌詞

let preLine =1; // 當播放6行后開始滾動歌詞

let lineHeight = -30; // 每次滾動的距離 // 滾動播放 歌詞高亮 增加類名active

function highLight() {

let $li = $("li"); $li.eq(lineNo).addClass("active").siblings().removeClass("active");

if (lineNo > preLine) { $ul.stop(true, true).animate({ top: (lineNo - preLine) * lineHeight });

}

}

highLight();

// 播放的時候不斷渲染

audio.addEventListener("timeupdate", function() {

if (lineNo == result.length) return; if ($("li").eq(0).hasClass("active")) { $("ul").css("top", "0");

}

lineNo =getLineNo(audio.currentTime); highLight();

lineNo++; });

// 當快進或者倒退的時候,找到最近的后面那個

result[i].time

function getLineNo(currentTime) { if (currentTime >=parseFloat(result[lineNo].time)) { // 快進

for (let i = result.length - 1; i >= lineNo; i--) {

if (currentTime >= parseFloat(result[i].time)) { return i;

}

}

} else {

// 后退

for (let i = 0; i <= lineNo; i++) { if (currentTime <= parseFloat(result[i].time)) { return i - 1;

}

}

}

}

//播放結束自動回到開頭

audio.addEventListener("ended", function() { lineNo = 0;

highLight();

audio.play();

$("ul").css("top", "0");

});

});

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533893.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533893.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533893.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker run 服務名_在 WSL2.0 的 Ubuntu 18 里使用 Docker

近日&#xff0c;隨著Windows 10 2004版本的發布&#xff0c;WSL 2經過了近一年的insider測試&#xff0c;現在也正式上線了。Windows 10 2004中引入了一個真實的Linux kernel&#xff0c;使得系統全部的系統調用更加兼容。這也是首次&#xff0c;Linux kernel安裝在Windows系統…

vb.net如何查詢電腦麥克風收到聲音_EMUI 10.1 跨屏協同實測:這一次把你的手機「搬」進電腦...

智能手機發展到現在&#xff0c;我們越來越需要手機與其他設備進行互聯互通。電腦是我們辦公最常用的工具&#xff0c;手機則是生活必需設備&#xff0c;這兩者的協同需求&#xff0c;自然也就成為了大多數用戶的痛點。Apple 用隔空投送、接力、隨航等連續互通功能來打造系統生…

浮動導航欄php源碼,JQuery 浮動導航欄實現代碼

JQuery 浮動導航欄/* 浮動導航欄 Begin */#floatMenu{padding-top: 5px;background: url(http://img.jb51.net/images/quickmenu.gif) no-repeat;border: 1px solid #dcdcdc;position: absolute;top: 250px;left: 5px;margin-left: 0px;width: 86px;}#floatMenu ul{margin-left…

gerber文件怎么導貼片坐標_SMT貼片工序

貼片&#xff0c;也稱SMT&#xff0c;就是把元器件用貼片機設備貼裝在印刷好的PCB板上。貼片這一過程之所以用“貼”字&#xff0c;是因為錫膏內有助焊劑的成分&#xff0c;有一定的粘性&#xff0c;能夠在沒有熔化的時候&#xff0c;也能夠黏住元器件。SMT又稱貼片&#xff0c…

es內嵌文檔查詢_ElasticSearch 文檔的增刪改查都不會?

本文主要是介紹 ElasticSearch 的文檔增刪改查和批量操作&#xff0c;同時會介紹一些 REST API 返回狀態碼的具體含義。我們先來看下這個表&#xff1a;這個表包含了 Index、Create、Read、Update、Delete 這五種方法&#xff0c;我們先來看下 CRUD 操作的 HTTP 請求都長什么樣…

如何在ps添加箭頭_「PS精選案例教程」制作斑駁生銹字體

這個教程會教您如何設計發光斑駁的字體特效&#xff0c;會教您運用PS濾鏡和紋理圖片&#xff0c;同時也詮釋了如何運用筆刷和圖層樣式給最終的字體效果增添光感。來&#xff0c;先看看最終效果&#xff01;第一步&#xff1a;創建一個1024*768的新文檔。前景色#532118&#xff…

php 獲取系統環境變量,java讀取操作系統環境變量

java讀取操作系統環境變量import java.util.*;import java.io.*;class SysProb{//返回當前系統變量的函數&#xff0c;結果放在一個Properties里邊&#xff0c;這里只針對win2k以上的&#xff0c;其它系統可以自己改進public Properties getEnv() throws Exception{Properties …

查python答案的軟件-中國大學MOOC的APP慕課用Python玩轉數據答案查題公眾號

下面屬于歐盟成員對土耳其要求加入歐盟的顧慮的一項是&#xff1a;&#xff08;)A.土耳其地理位置特殊B.土耳其經濟發 某種雙面高密軟盤片格式化后&#xff0c;若每面有A個磁道&#xff0c;每個磁道有B個扇區&#xff0c;每個扇區有C個字節。則該種軟盤 通信工程施工中電源線與…

車輛調度 matlab,基于遺傳算法的車輛調度問題的matlab源程序

越界 發表于 2013-7-8 09:16 有償服務哦function chushis)K4; %最多4輛車inn100;%迭代次數上限citynum8;%需求點數量KMcitynumK1; %配送途徑種類%產生初始種群mzeros(1,inn);mm;szeros(inn,citynumK1);for i1:1:inns(i,:)randperm(KM); %隨機排列構成個體ends[m s];for i1:inn…

strtotime()加半個小時_椰子雞這樣做太好吃了,一滴水不用加,鮮香嫩滑,做法非常簡單...

轉眼就是6月了&#xff0c;時間真的好快啊&#xff0c;好似白駒過隙&#xff0c;一眼就過去了。剛剛還是桃花開的時候&#xff0c;轉眼五月桃都熟了。不得不說&#xff0c;李煜說得很對&#xff0c;“林花謝了春紅&#xff0c;太匆匆&#xff01;”6月了&#xff0c;6月有什么呢…

webpack 入口文件 php,如何實現webpack多入口文件打包配置

本篇文章主要介紹了webpack多入口文件頁面打包配置詳解&#xff0c;現在分享給大家&#xff0c;也給大家做個參考。大多數情況下&#xff0c;我們使用 webpack來打包單頁應用程序&#xff0c;這個時候只需要配置一個入口&#xff0c;一個模板文件&#xff0c;但也不盡是如此&am…

接口里面的方法都是抽象方法嗎_大家都在講高中學習的方法有哪些,那方法和技巧有什么異同的嗎?...

大家都在講高中學習的方法有哪些&#xff0c;那方法和技巧有什么異同嗎&#xff1f;高中怎樣學習&#xff0c;方法重要還是技巧更重要&#xff1f;老牛倒是覺得&#xff0c;二者密不可分&#xff0c;缺一不可。那么&#xff0c;我們一起來看看&#xff0c;高中怎樣學習才是最好…

python 筆試題 英方_4000字轉型數據分析師筆試面試經驗分享

大家好&#xff0c;我是戴師兄~在上一篇文章中我分享了快速自學數據分析的經驗。本篇文章&#xff0c;我將跟大家分享下我的筆試和面試心得。開頭先說說我轉型前的職業背景&#xff1a;想看筆試面試經驗的同學萌可以直接跳過這一段~2018年我從中國人民大學經濟管理學專業畢業&a…

android 抓取webview中的所有圖片_如何一鍵提取PDF文檔中的所有圖片?

原標題&#xff1a;如何一鍵提取PDF文檔中的所有圖片&#xff1f;目前PDF文檔被大家廣泛應用&#xff0c;主要是因為PDF文檔在傳輸和轉換的過程中比較穩定&#xff0c;所以PDF格式幾乎是辦公文件格式的首選。大家都知道PDF文檔轉換格式以及編輯都需要專門的PDF編輯器來實現。但…

php shell 交互,通過 Tinker 實現 Laravel 命令行交互式 Shell

通過 Tinker 實現 Laravel 命令行交互式 Shell由 學院君 創建于2年前, 最后更新于 1年前版本號 #19508 views4 likes0 collectsREPL 與 PsySHLaravel 自帶了一個功能強大的 REPL —— Tinker&#xff0c;所謂 REPL&#xff0c;是 Read–Eval–Print-Loop 的縮寫&#xff0c;這是…

python中垃圾回收機制_Python中的變量和垃圾回收機制

1、python中的變量python和java中的變量本質不一樣。java中聲明變量時要指定變量的數據類型&#xff0c;int、str或某一類&#xff0c;之后虛擬機就會在內存中申請一塊空間&#xff0c;空間的大小跟類型相關。通俗的理解就是把變量想象成一個盒子&#xff0c;盒子里能裝什么東西…

戴爾電腦好還是華為好_華碩和戴爾筆記本哪種好 華碩和戴爾優缺點分析【詳解】...

隨著時代快速的發展&#xff0c;筆記本電腦已經成了我們生活中的標配。如今&#xff0c;市面上筆記本電腦的款式眾多&#xff0c;相信大家對華碩和戴爾并不陌生吧&#xff01;那么&#xff0c;我們該怎么去選擇呢&#xff1f;今天小編就給大家介紹華碩和戴爾筆記本哪個好&#…

php檢查 session是否存在,檢查sessionid已知的PHP會話是否處于活動狀態

實際上,您可以將session_id和session_start用于此目的.$ids [135b29ef958a23418f2a804474787305, // active session135b29ef958a23418f2a804474787306, // inactive session135b29ef958a23418f2a804474787305, // active session];foreach($ids as $id){session_id($id);sess…

c++ python混合編程 restful_簡單上手nodejs調用c++(c++和js的混合編程)

因為項目的原因&#xff0c;最近經常使用node.js搭RESTful接口。性能還是很不錯啦&#xff0c;感覺比Spring Boot之類的要快。而且在不錯的性能之外&#xff0c;只要程序結構組織好&#xff0c;別讓太多的回調把程序結構搞亂&#xff0c;整體開發效率比Java快的就太多了。如果想…

電腦掃描二維碼_線上分享 | 網絡工作坊:平板電腦工作術

澳門生產力暨科技轉移中心將于9月29日下午3時&#xff0c;舉辦資訊科技工具應用線上工作坊&#xff0c;講解平板電腦辦公應用&#xff0c;歡迎有興趣人士報名&#xff0c;名額有限&#xff0c;先到先得。該中心早前已舉辦是次主題的應用工作坊&#xff0c;坊間反應積極&#xf…