当前位置: 首页 > Web前端 > HTML5

-audio-在vue中自定义样式(页面包含多个音频)

时间:2023-04-05 23:54:09 HTML5

.page-container{.pgs{背景颜色:#D8D4D1;文本对齐:居中;位置:相对;高度:2px;底部边距:10px;:绝对;顶部:-2.5px;左:0;宽度:7px;高度:7px;边界半径:50%;背景色:#B03F28;z-索引:1;}.play-icon{宽度:45px;高度:45px;右边距:15px;}音频{显示:块;高度:0;}.audio-box{背景:#F5F5F5;边框:1px实心#D8D4D1;边界半径:5px;宽度:100%;填充:15px12px;框大小:边框框;}.audio-name{字体大小:15px;颜色:#252120;底部边距:15px;溢出:隐藏;//超出的文本隐藏text-overflow:ellipsis;//使用省略号显示溢出空白:nowrap;//溢出时不换行}.control-row{display:flex;对齐项目:flex-end;}.row-right{flex-grow:100;}.time-row{位置:相对;颜色:#B0AFAD;字体大小:12px;底部边距:3px;}.audio-time{位置:绝对;右:0;}}前言刚开始看到UI设计稿的时候,内心是很抗拒的。我觉得用原来的音频风格就够了,也不是特别难看。毕竟给的时间不多,自定义样式在逻辑上需要改。我在网上搜索了合适的插件,但没有看到令人兴奋的插件。终于硬着头皮自己写了。参考了一篇博客,非常感谢这位博主,逻辑可以用。但是原博客用的jquery,我自己用的是vue,而且我的页面可能不止一个音频,而且设计稿和原博客有很大的不同,所以花了不少心思改了代码。参考链接:Audio(音频)自定义样式及控制操作面板vue版本:2.6.12这里是按照我的设计稿做的。如果你的设计稿和我的不一样,只需要改一下css部分和html,js还是可以直接套用的。着急的话,可以直接跳到最后阅读完整代码,复制后不出意外就可以使用了。你只需要将播放按钮的图片换成你自己的图片,然后添加可用的音频链接即可。HTML代码:{{item.audio_name}}

{{audioArr[index].currentTime}}{{audioArr[index].duration}}
js代码:exportdefault{data(){return{audioNodes:[],//用于存储所有音频DOM节点audioArr:[],//一个数组,用于维护音频的总时长和当前播放时间content:[//存储音频的地址信息,一般接口返回{"audio_name":"20210112_1056.m4a","audio_url":"https://xxx.com/android1610420451567524.m4a"},{"audio_name":"20210112_1056.m4a","audio_url":"https://xxx.com/android1610420451567524.m4a"},]}},mounted(){this.audioNodes=document.getElementsByClassName('list-box')this.content.forEach((item,index)=>{this.$set(this.audioArr,index,{duration:'',currentTime:'00:00'})})},methods:{//切换播放,暂停按钮事件playAudio(index){letaudio=this.audioNodes[index].firstChildif(音频。暂停){音频。玩()}else{audio.pause()}},//获取音频的总时长fillTime(event,index){this.audioArr[index].duration=this.transTime(event.target.duration)},//设置秒将数字转换成(分:秒)格式transTime(time){letduration=parseInt(time)letminute=parseInt(duration/60).toString().padStart(2,'0')letsec=(duration%60).toString().padStart(2,'0')return`${minute}:${sec}`},//进度条播放事件updateProgress(index){letaudio=this.audioNodes[指数]。firstChildletvalue=Math.round((Math.floor(audio.currentTime)/Math.floor(audio.duration))*100,0)this.audioArr[index].currentTime=this.transTime(audio.currentTime)让progressTag=this.audioNodes[index].getElementsByClassName('pgs-play')[0]progressTag.style.left=`${value}%`},//播放结束的处理动作audioEnded(index){letaudio=this.audioNodes[索引].firstChildaudio.currentTime=0audio.pause()},}}css代码:.pgs{背景色:#D8D4D1;文本对齐:居中;位置:相对;高度:2px;底部边距:10px;}.pgs-play{位置:绝对;顶部:-2.5px;左:0;宽度:7px;高度:7px;边界半径:50%;背景色:#B03F28;z-索引:1;{宽度:45px;高度:45px;右边距:15px;}音频{显示:块;高度:0;}.audio-box{背景:#F5F5F5;边框:1px实心#D8D4D1;宽度:100%;填充:15px12px;框大小:边框框;}.audio-name{字体大小:15px;颜色:#252120;底部边距:15px;溢出:隐藏;//超出文本隐藏text-overflow:ellipsis;//使用省略号显示white-space:nowrap;//溢出不换行}.control-row{display:flex;对齐项目:flex-end;}.row-right{flex-grow:100;}.time-row{位置:相对;颜色:#B0AFAD;字体大小:12px;底部边距:3px;}.audio-time{位置:绝对;右:0;}完整代码(audio.vue)可以直接应用,只需要更改control-row中的图片地址,这个就是播放按钮的图片.page-container{.pgs{背景颜色:#D8D4D1;文本对齐:居中;位置:相对;高度:2px;底部边距:10px;:绝对;顶部:-2.5px;左:0;宽度:7px;高度:7px;边界半径:50%;背景色:#B03F28;z-索引:1;}.play-icon{宽度:45px;高度:45px;右边距:15px;}音频{显示:块;高度:0;}.audio-box{背景:#F5F5F5;边框:1px实心#D8D4D1;边界半径:5px;宽度:100%;填充:15px12px;框大小:边框框;}.audio-name{字体大小:15px;颜色:#252120;底部边距:15px;溢出:隐藏;//超出的文本隐藏text-overflow:ellipsis;//使用省略号显示溢出空白:nowrap;//溢出时不换行}.control-row{display:flex;对齐项目:flex-end;}.row-right{flex-grow:100;}.time-row{位置:相对;颜色:#B0AFAD;字体大小:12px;底部边距:3px;}.audio-time{位置:绝对;右:0;}}文章到此结束,如果对你有帮助,请喜欢,收藏,谢谢~