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

自己写一个音乐播放器

时间:2023-04-02 18:52:23 HTML

前言在web开发过程中,使用音频元素audio的场景有很多,比如音乐播放,语音播放等功能,但是原生组件有以下缺点:原生UIstyle丑陋,追求美感的页面需要重写元素样式,支持重写的样式不多。浏览器兼容性问题,不同的浏览器显示不同的音频元素。由于以上两个问题,我们很难修改原始音频。对于大部分的音频需求,我们可以选择符合我们要求的第三方组件库,比如:西瓜播放器MediaElement。对于UI需求,比如音乐播放器需求,我们必须遵循整个页面的UI主题,这时我们需要自定义编写一个音频组件。在本文中,我们将学习:如何修改音频元素的默认样式如何覆盖音频自定义样式如何修改音频元素的默认样式默认情况下,音频元素是不可见的。需要添加控件属性以使其控件可见。audio元素在CSS中有如下伪元素选择器:audio::-webkit-media-controls-panelaudio::-webkit-media-控件-静音按钮音频::-webkit-media-controls-play-buttonaudio::-webkit-media-controls-timeline-containeraudio::-webkit-media-controls-current-time-displayaudio::-webkit-media-控件-剩余时间-displayaudio::-webkit-media-controls-timelineaudio::-webkit-media-controls-volume-slider-containeraudio::-webkit-media-controls-volume-slideraudio::-webkit-media-控件-搜索后退按钮音频::-webkit-media-controls-seek-forward-buttonaudio::-webkit-media-controls-fullscreen-buttonaudio::-webkit-media-controls-rewind-buttonaudio::-webkit-media-controls-return-to-realtime-buttonaudio::-webkit-media-controls-toggle-closed-captions-button这个伪类选择器可以改变音频元素的基本样式,但是只在Chrome下有效浏览器。我给所有的伪类设置了不同的背景色,最终效果如下图:audio::-webkit-media-controls-xxx{background-color:randomcolor;}即只有一部分可以修改样式,没有提供更精细的修改。如果要设置进度条的颜色,基本上只能自定义和重写播放器。自定义音频播放器接下来,也是我们文章的重点,我们将创建我们自己的自定义音频播放器。我们的自定义播放器,它使用不同的元素来实现控件的UI。然后借助Javascript将音频元素的功能绑定到这些元素。首先我们写一个简单的布局音乐播放器

我们首先创建了一个audio元素,但是我们不需要它来显示,我们只需要它的音频功能,我们不需要它的UI。然后我们自定义UI元素,例如播放器的封面图像和控件。样式可以自己调整,不用css。我调整后,显示的结果大概是这样的。那么我们如何将我们定义的元素控件应用到这个音频元素上呢?这就需要用到它的一些属性和方法,比如:属性currentTime-当前音频播放位置duration-音频播放总时长muted-是否静音方法play()-playpause()-Pauseended()-Playendedtimeupdate()-Audiopositionchange详情请参考MDN-audio和进度条的改变,可以简单的通过。这样就可以监听进度条的位置,改变音频的位置。反之,可以通过监听audio的timeupdate方法来改变进度条。这里主要用到的属性和方法有:属性值-当前进度方法变化-进度条变化说到这里大家应该明白了,我们是用原来的音频方法和属性来实现自己的UIControls,其实就是流行音频组件库的实践。直接看音频控件的javaScript代码:音频时间轴=文件。querySelector(".timeline"),//获取进度条soundButton=document.querySelector(".sound-button"),//过去的音量按钮(是否静音)//1.通过监听点击修改音频按钮播放、暂停状态的时间,并设置对应的图标。audio.pause();playerButton.innerHTML=playIcon;}});//2.通过监听音频播放progress设置输入进度条的值.audio.ontimeupdate=()=>{constpercentagePosition=(100*audio.currentTime)/audio.duration;timeline.style.backgroundSize=`${percentagePosition}%100%`;timeline.value=percentagePosition;}//3.如果播放结束,将播放按钮重置为暂停状态。audio.onended=audioEnded=()=>{playerButton.innerHTML=playIcon;}//4.监听进度条变化,设置音频位置。timeline.addEventListener("change",()=>{consttime=(timeline.value*audio.duration)/100;audio.currentTime=time;});//5.监听音频按钮的变化并设置相应的状态(静音或不静音)和图标代码片段结论使用伪元素选择编辑器,您可以对音频元素进行简单的设计更改。对于更复杂的设计更改,最好实现自定义音频播放器,然后使用Javascript将其绑定到音频元素以提供必要的功能。至此,我基本学会了自定义音频播放器,希望大家有所收获。