基于jquery實現(xiàn)自定義的audio
預(yù)期效果
預(yù)期實現(xiàn)功能
- 自定義實現(xiàn)進度條及進度監(jiān)控
- 可以手動定位進度
- 播放(每次只能播放一個,不允許多個同時播放)
- 暫停
實現(xiàn)方案
1. 進度條
進度條使用<input type="range" />
根據(jù)需求,可使用的屬性如下:
<input onchange="playTime(${element.id}, this)" id="progress_${element.id}" value="0" type="range" min="0" max="100" step="0" />
但是原生的樣式不符合要求。但是調(diào)整樣式又需要兼容chrome和firefox。
最終的樣式代碼如下:
[type="range"] { -webkit-appearance: none; appearance: none; margin: 0; outline: 0; background-color: transparent; width: 22.125rem; } [type="range"]::-webkit-slider-runnable-track { height: 4px; background: #eee; } [type="range"]::-moz-range-track { height: 4px; background: #eee; } [type="range" i]::-webkit-slider-container { height: 10px; overflow: hidden; } [type="range" i]::-moz-range-progress { height: 10px; overflow: hidden; } input[type=range]::-moz-range-thumb { -webkit-appearance: none; appearance: none; width: 2px; height: 2px; border-radius: 50%; background-color: #B32B2B; border: 1px solid transparent; margin-top: -1px; } input[type="range"]::-moz-range-progress { background-color: #B32B2B; height: 4px; } [type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 4px; height: 4px; border-radius: 50%; background-color: #B32B2B; border: 1px solid transparent; border-image: linear-gradient(#B32B2B,#B32B2B) 0 fill / 0 2 0 0 / 0px 0px 0 2000px; }
2.播放
在多個播放器同時存在時,我們需要做到同一個頁面同時播放的只有一個
首先渲染頁面
function musicList(id, index) { let str = ""; musics?.slice(index, index + 10)?.forEach(element => { str += `<div> <div class="swiper-img-item"> <img src="./images/top.png" /> <div>${element.title}</div> <audio class="topAudio" id="top_audio_${element.id}" src=${element.url} /> <img onclick="topPlay(${element.id})" id="top_play_${element.id}" class="second" src="./images/top_play.svg" /> <img onclick="topPause(${element.id})" style="display: none;" id="top_pause_${element.id}" class="second" src="./images/top_off.svg" /> </div> </div>` }) $(`#${id}`).find(".wrapper").append(str); }
其次增加方法
function play(id) { $("audio").each(function() { var itemPlayId = $(this).attr("id")?.replace("audio", "play"); var itemPauseId = $(this).attr("id")?.replace("audio", "pause"); if ($(this).attr("id") != ("top_audio_"+id)) { $(this).get(0).pause(); $("#"+itemPauseId).hide(); $("#"+itemPlayId).show(); } else { $(this).get(0).play(); $("#"+itemPauseId).show(); $("#"+itemPlayId).hide(); } }) }
3. 播放進度監(jiān)控
通過audio的timeupdate事件監(jiān)聽播放進度,并通過duration獲取總的長度。currentTime獲取當前長度。
$(".musicAudio").each(function() { var that = $(this); var audio = that.get(0); audio.addEventListener("timeupdate", event => { var id = that.attr("id").split("_").reverse()[0]; var curTime = dayjs(audio.currentTime*1000).format("mm:ss"); var duration = dayjs(audio.duration*1000).format("mm:ss"); $(`#time_${id}`).html(`${curTime}/${duration}`) $(`#progress_${id}`).get(0).value = (audio.currentTime*1000/(audio.duration*1000))*100; }) })
監(jiān)聽事件圖省事挨個添加的。理論上應(yīng)該搞一個事件委托,在父級進行監(jiān)聽。
以上就是基于jquery實現(xiàn)自定義的audio的詳細內(nèi)容,更多關(guān)于jquery自定義的audio的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
jQuery的Ajax用戶認證和注冊技術(shù)實例教程(附demo源碼)
這篇文章主要介紹了jQuery的Ajax用戶認證和注冊技術(shù),結(jié)合完整實例較為詳細的分析講解了jQuery中ajax方法實現(xiàn)用戶驗證與注冊的相關(guān)技巧與注意事項,并附帶了demo源碼供讀者下載,需要的朋友可以參考下2015-12-12jQuery中attr()與prop()函數(shù)用法實例詳解(附用法區(qū)別)
這篇文章主要介紹了jQuery中attr()與prop()函數(shù)用法,結(jié)合實例形式詳細分析了attr()與prop()函數(shù)的使用技巧與相關(guān)注意事項,并附帶了attr()與prop()函數(shù)用法的區(qū)別,需要的朋友可以參考下2015-12-12jquery操作checkbox實現(xiàn)全選和取消全選
這篇文章主要介紹了jquery操作checkbox實現(xiàn)全選和取消全選,需要的朋友可以參考下2014-05-05jQuery Selectors(選擇器)的使用(四-五、內(nèi)容篇&可見性篇)
本系列文章主要講述jQuery框架的選擇器(Selectors)使用方法,我將以實例方式進行講述,以簡單,全面為基礎(chǔ),不會涉及很深,我的學習方法:先入門,后進階!2009-12-12基于Jquery的仿Windows Aero彈出窗(漂亮的關(guān)閉按鈕)
目前市面上已經(jīng)有很多成熟好用的jquery彈出窗插件,像模態(tài)窗口插件(Modal Dialog Plugins)以及數(shù)不勝數(shù)的燈箱插件(lightbox plugins)。2010-09-09jQuery插件FusionCharts實現(xiàn)的Marimekko圖效果示例【附demo源碼】
這篇文章主要介紹了jQuery插件FusionCharts實現(xiàn)的Marimekko圖效果,結(jié)合實例形式分析了jQuery使用FusionCharts插件結(jié)合xml數(shù)據(jù)繪制Marimekko圖的相關(guān)操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03利用jQuery實現(xiàn)CheckBox全選/全不選/反選的簡單代碼
下面小編就為大家?guī)硪黄胘Query實現(xiàn)CheckBox全選/全不選/反選的簡單代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05jQuery時間驗證和轉(zhuǎn)換為標準格式的時間格式
本篇文章主要介紹了jQuery時間驗證和轉(zhuǎn)換為標準格式的時間示例代碼,具有一定的參考價值,有興趣的可以了解一下。2017-03-03