日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

原生JS實現音樂播放器的示例代碼

瀏覽:254日期:2024-04-04 17:10:48

本文主要介紹了原生JS實現音樂播放器的示例代碼,分享給大家,具體如下:

效果圖

原生JS實現音樂播放器的示例代碼

音樂播放器 播放控制 播放進度條控制 歌詞顯示及高亮 播放模式設置播放器屬性歸類

按照播放器的功能劃分,對播放器的屬性和DOM元素歸類,實現同一功能的元素和屬性保存在同一對象中,便于管理和操作

const control = { //存放播放器控制 play: document.querySelector(’#myplay’), ... index: 2,//當前播放歌曲序號 ...}const audioFile = { //存放歌曲文件及相關信息 file: document.getElementsByTagName(’audio’)[0], currentTime: 0, duration: 0,}const lyric = { // 歌詞顯示欄配置 ele: null, totalLyricRows: 0, currentRows: 0, rowsHeight: 0,}const modeControl = { //播放模式 mode: [’順序’, ’隨機’, ’單曲’], index: 0}const songInfo = { // 存放歌曲信息的DOM容器 name: document.querySelector(’.song-name’), ...}播放控制

功能:控制音樂的播放和暫停,上一首,下一首,播放完成及相應圖標修改audio所用API:audio.play() 和 audio.pause()和audio ended事件

// 音樂的播放和暫停,上一首,下一首控制control.play.addEventListener(’click’,()=>{ control.isPlay = !control.isPlay; playerHandle();} );control.prev.addEventListener(’click’, prevHandle);control.next.addEventListener(’click’, nextHandle);audioFile.file.addEventListener(’ended’, nextHandle);function playerHandle() { const play = control.play; control.isPlay ? audioFile.file.play() : audioFile.file.pause(); if (control.isPlay) { //音樂播放,更改圖標及開啟播放動畫 play.classList.remove(’songStop’); play.classList.add(’songStart’); control.albumCover.classList.add(’albumRotate’); control.albumCover.style.animationPlayState = ’running’; } else { //音樂暫停,更改圖標及暫停播放動畫 ... }}function prevHandle() { // 根據播放模式重新加載歌曲 const modeIndex = modeControl.index; const songListLens = songList.length; if (modeIndex == 0) {//順序播放 let index = --control.index; index == -1 ? (index = songListLens - 1) : index; control.index = index % songListLens; } else if (modeIndex == 1) {//隨機播放 const randomNum = Math.random() * (songListLens - 1); control.index = Math.round(randomNum); } else if (modeIndex == 2) {//單曲 } reload(songList);}function nextHandle() { const modeIndex = modeControl.index; const songListLens = songList.length; if (modeIndex == 0) {//順序播放 control.index = ++control.index % songListLens; } else if (modeIndex == 1) {//隨機播放 const randomNum = Math.random() * (songListLens - 1); control.index = Math.round(randomNum); } else if (modeIndex == 2) {//單曲 } reload(songList);}播放進度條控制

功能:實時更新播放進度,點擊進度條調整歌曲播放進度audio所用API:audio timeupdate事件,audio.currentTime

// 播放進度實時更新audioFile.file.addEventListener(’timeupdate’, lyricAndProgressMove);// 通過拖拽調整進度control.progressDot.addEventListener(’click’, adjustProgressByDrag);// 通過點擊調整進度control.progressWrap.addEventListener(’click’, adjustProgressByClick);

播放進度實時更新:通過修改相應DOM元素的位置或者寬度進行修改

function lyricAndProgressMove() { const audio = audioFile.file; const controlIndex = control.index; // 歌曲信息初始化 const songLyricItem = document.getElementsByClassName(’song-lyric-item’); if (songLyricItem.length == 0) return; let currentTime = audioFile.currentTime = Math.round(audio.currentTime); let duration = audioFile.duration = Math.round(audio.duration); //進度條移動 const progressWrapWidth = control.progressWrap.offsetWidth; const currentBarPOS = currentTime / duration * 100; control.progressBar.style.width = `${currentBarPOS.toFixed(2)}%`; const currentDotPOS = Math.round(currentTime / duration * progressWrapWidth); control.progressDot.style.left = `${currentDotPOS}px`; songInfo.currentTimeSpan.innerText = formatTime(currentTime);}

拖拽調整進度:通過拖拽移動進度條,并且同步更新歌曲播放進度

function adjustProgressByDrag() { const fragBox = control.progressDot; const progressWrap = control.progressWrap drag(fragBox, progressWrap)}function drag(fragBox, wrap) { const wrapWidth = wrap.offsetWidth; const wrapLeft = getOffsetLeft(wrap); function dragMove(e) { let disX = e.pageX - wrapLeft; changeProgressBarPos(disX, wrapWidth) } fragBox.addEventListener(’mousedown’, () => { //拖拽操作 //點擊放大方便操作 fragBox.style.width = `14px`;fragBox.style.height = `14px`;fragBox.style.top = `-7px`; document.addEventListener(’mousemove’, dragMove); document.addEventListener(’mouseup’, () => { document.removeEventListener(’mousemove’, dragMove); fragBox.style.width = `10px`;fragBox.style.height = `10px`;fragBox.style.top = `-4px`; }) });}function changeProgressBarPos(disX, wrapWidth) { //進度條狀態更新 const audio = audioFile.file const duration = audioFile.duration let dotPos let barPos if (disX < 0) { dotPos = -4 barPos = 0 audio.currentTime = 0 } else if (disX > 0 && disX < wrapWidth) { dotPos = disX barPos = 100 * (disX / wrapWidth) audio.currentTime = duration * (disX / wrapWidth) } else { dotPos = wrapWidth - 4 barPos = 100 audio.currentTime = duration } control.progressDot.style.left = `${dotPos}px` control.progressBar.style.width = `${barPos}%`}

點擊進度條調整:通過點擊進度條,并且同步更新歌曲播放進度

function adjustProgressByClick(e) { const wrap = control.progressWrap; const wrapWidth = wrap.offsetWidth; const wrapLeft = getOffsetLeft(wrap); const disX = e.pageX - wrapLeft; changeProgressBarPos(disX, wrapWidth)}歌詞顯示及高亮

功能:根據播放進度,實時更新歌詞顯示,并高亮當前歌詞(通過添加樣式)audio所用API:audio timeupdate事件,audio.currentTime

// 歌詞顯示實時更新audioFile.file.addEventListener(’timeupdate’, lyricAndProgressMove);function lyricAndProgressMove() { const audio = audioFile.file; const controlIndex = control.index; const songLyricItem = document.getElementsByClassName(’song-lyric-item’); if (songLyricItem.length == 0) return; let currentTime = audioFile.currentTime = Math.round(audio.currentTime); let duration = audioFile.duration = Math.round(audio.duration); let totalLyricRows = lyric.totalLyricRows = songLyricItem.length; let LyricEle = lyric.ele = songLyricItem[0]; let rowsHeight = lyric.rowsHeight = LyricEle && LyricEle.offsetHeight; //歌詞移動 lrcs[controlIndex].lyric.forEach((item, index) => { if (currentTime === item.time) { lyric.currentRows = index; songLyricItem[index].classList.add(’song-lyric-item-active’); index > 0 && songLyricItem[index - 1].classList.remove(’song-lyric-item-active’); if (index > 5 && index < totalLyricRows - 5) {songInfo.lyricWrap.scrollTo(0, `${rowsHeight * (index - 5)}`) } } })}播放模式設置

功能:點擊跳轉播放模式,并修改相應圖標audio所用API:無

// 播放模式設置control.mode.addEventListener(’click’, changePlayMode);function changePlayMode() { modeControl.index = ++modeControl.index % 3; const mode = control.mode; modeControl.index === 0 ? mode.setAttribute('class', 'playerIcon songCycleOrder') : modeControl.index === 1 ? mode.setAttribute('class', 'playerIcon songCycleRandom ') : mode.setAttribute('class', 'playerIcon songCycleOnly')}

項目預覽

代碼地址:https://github.com/hcm083214/audio-player

到此這篇關于原生JS實現音樂播放器的示例代碼的文章就介紹到這了,更多相關JS 音樂播放器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91一区二区三区四区| 亚洲精品一区二区在线播放∴| 精品一区二区三区视频在线播放| 丝袜诱惑一区二区| 日韩国产在线一| 99视频一区| 成人羞羞视频播放网站| 中文字幕一区日韩精品| 视频在线不卡免费观看| 91福利精品在线观看| 黄色亚洲在线| 美女精品一区二区| 日韩高清在线不卡| 爽好久久久欧美精品| 日韩欧美一区二区三区免费观看| 日韩欧乱色一区二区三区在线| 久久久蜜桃一区二区人| sm捆绑调教国产免费网站在线观看| 日韩av影院| 日韩精品中文字幕一区二区| 99亚洲视频| 亚洲国产一区二区三区在线播放| 国产精品xx| 国产91在线播放精品| 精品国内亚洲2022精品成人| 欧美一区二区三区免费看| 欧美成人午夜| 久久精品国内一区二区三区水蜜桃| 国产成年精品| 亚洲精品视频一二三区| 久久久久久黄| 欧美另类专区| 爽好久久久欧美精品| 亚洲v天堂v手机在线| 蜜臀久久99精品久久久久宅男| 亚洲欧美日本日韩| 亚洲精选av| 免费精品一区| 日本精品影院| 男人的天堂亚洲一区| 亚洲精品国产日韩| 久久国产电影| 日韩精品不卡一区二区| 日韩中文欧美| 视频一区二区国产| 国产三级一区| 久久精品午夜| 国产精品美女久久久浪潮软件| 另类av一区二区| 久久国产视频网| 自拍日韩欧美| 日韩av不卡一区二区| 国产欧美另类| 欧美日韩视频| 在线天堂中文资源最新版| 麻豆国产在线| 色网在线免费观看| 在线视频精品| 国产欧美亚洲精品a| 日韩精品欧美| 欧美专区一区| 久久久夜夜夜| 国产精品亚洲人成在99www| 蜜桃成人av| 国产精品s色| 99香蕉国产精品偷在线观看| 国产精品久久久久久模特| 久久在线电影| 国产精品亲子伦av一区二区三区| 久久一区二区三区电影| 国产免费久久| 欧美手机在线| 久久中文字幕一区二区三区| 欧美资源在线| 日韩大片免费观看| 欧美一区激情| 亚洲激情av| 91亚洲国产成人久久精品| 日本成人在线不卡视频| 激情综合激情| 国产aⅴ精品一区二区三区久久 | 日本欧美在线| 亚洲性色视频| 精品视频高潮| 日韩一区二区三区四区五区| 久久麻豆精品| av资源中文在线| 你懂的国产精品| **爰片久久毛片| 中文字幕日韩高清在线 | 久久久久国产| 久久亚洲资源中文字| 日本中文字幕不卡| 亚洲在线免费| 激情综合在线| 久久久噜噜噜| 国产激情综合| 久久国产精品免费精品3p| 亚洲一级淫片| 亚洲制服少妇| 欧美日韩精品一本二本三本| 欧美aa在线观看| 国产日韩电影| 日本在线高清| 97精品国产福利一区二区三区| 蜜桃精品视频| 国产亚洲久久| 日韩和欧美的一区| 三级久久三级久久久| 一区二区电影在线观看| 蜜臀久久99精品久久久久宅男 | 免费精品视频| 香蕉久久国产| 国产视频欧美| 影音国产精品| 黄色欧美日韩| 好看的av在线不卡观看| 亚洲激情中文| 午夜在线精品| 亚洲一区二区三区在线免费| 亚洲一区二区日韩| 亚洲精品国产日韩| 欧美日韩午夜电影网| 日韩欧美另类中文字幕| 日韩黄色av| 国产福利一区二区三区在线播放| 国产欧美日韩精品一区二区三区| 欧美日韩a区| 国产亚洲欧美日韩在线观看一区二区 | 香蕉久久夜色精品国产| 久久一级电影| 欧美va亚洲va日韩∨a综合色| 色婷婷久久久| 欧美综合另类| 亚洲深爱激情| 黄色免费成人| 丝袜美腿亚洲色图| 日韩综合一区二区三区| 欧美日韩91| 欧美1区二区| 国产一区丝袜| 欧美亚洲国产激情| 性欧美长视频| 日韩国产在线观看| 国产精品宾馆| 桃色av一区二区| 国产精品88久久久久久| 丝袜脚交一区二区| 久久国产日韩欧美精品| 国产精品啊v在线| 国产一区二区三区久久久久久久久| 日韩国产欧美| 亚洲激情二区| 青青草国产成人99久久| 久久gogo国模啪啪裸体| 国产精品亚洲一区二区三区在线观看| 免费av一区| 首页亚洲欧美制服丝腿| 91精品国产自产在线丝袜啪| 久久中文在线| 久久婷婷av| 亚洲视频电影在线| 国产精品天天看天天狠| 日韩中文在线电影| 蜜臀久久久久久久| 7777精品| 色爱av综合网| 日韩欧美久久| 91日韩免费| 噜噜噜躁狠狠躁狠狠精品视频| 青草综合视频| 91看片一区| 亚洲不卡视频| 日韩久久精品网| 免费美女久久99| 久久精品三级| 亚洲一区亚洲| 国产精品白丝av嫩草影院| av免费不卡国产观看| 久久xxxx| 国产精品欧美三级在线观看| 亚洲一级网站| 国产日韩中文在线中文字幕| 91精品综合| 日韩精品导航| 91精品国产乱码久久久久久久 | 日韩精品1区2区3区| 国产va在线视频| 视频一区二区欧美| 国产在线观看91一区二区三区| 首页国产欧美久久| 给我免费播放日韩视频| 综合一区在线| 精品少妇av| 午夜亚洲福利| 亚洲成人一区在线观看| 国产精品天天看天天狠| 亚洲电影在线一区二区三区| 国产精品66| 久久99伊人|