js仿微信语音播放实现思路
最近看到有一个叫做"轻客小伙伴"的微信服务号,运营得挺不错的。它是做英语线上培训的,由老师录制语音,配上图文,制作成课程。
花了不少时间写了大多数功能,但还没有优化成插件,直接发代码估计也看不懂,难应用。所以就主要说下实现的思路。我的超文本标记语言结构是这样的
div class=' app-voice-you ' voice src=' xx。MP3 ' img class=' app-voice-head img ' src=' http : xx。png '/div style=' width : 60%;'class=' app-语音-状态-BG ' div class=' app-语音-状态app-语音-暂停'/div/div class=' app-语音-时间app-语音-未读' 1 ' 6 '/div/div!-语音播放控件-audio id=' audio _ my ' src=' http : '您的浏览器不支持音频标记。/音频核心功能就是语音播放,主要包括了以下几个功能点:
红点表明未听语音,语音听过后,红点会消失;
将"未读"状态的样式独立出来,"已读"的时候,把样式删除就行。结合本地存储处理就搞定了。
//这个是点击的语音的文档var app _ voice _ time=this。getelementsbyclassname(' app-voice-time ')[0];if(app _ voice _ time。类名。indexof(' app-voice-未读')!=-1){ //存在红点时,把红点样式删除app _ voice _ time。类名=app _ voice _ time。类名。替换('应用程序-语音-未读',' ');}第一次听语音,会自动播放下一段语音;
这里主要是使用HTML5的声音的控件的"语音播放完"事件语音播放完,找到下一个语音,播放下一个语音
//语音播放完事件(PAGE.audio是声音的控件的文档)页面。音频。addeventlistener(' ended ',function () { //循环获取下一个节点佩奇。prevoice=page。当前语音;var当前语音=页面。当前语音;while(true){当前语音=当前语音。下一个可能的;//下一个兄弟节点//已经到达最底部if(!当前语音){ page。预演。getelementsbyclasname(' app-voice-state ')[0].app-语音-状态app-语音-暂停;返回false} var语音src=当前语音。GetAttribute(' voice src ');if(voiceSrc voiceSrc!=' '){ break;} } if(!佩奇。自动分机语音){页面。预演。getelementsbyclassname(' app-voice-state ')[0].app-语音-状态app-语音-暂停;返回false}页面。当前语音=当前语音;//获取得到下一个语音节点,播放佩奇。音频。src=语音src;佩奇。音频。play();第5页.event _ PlayVoice();},false);每段语音可以暂停、继续播放、重新播放;
这个比较简单,但是也是比较多逻辑。需要变换样式告诉用户,怎样是继续播放/重新播放。
播放中的语音有动画,不是播放中的语音则会停止动画。
这里主要是CSS3动画的应用。app-语音-暂停,app-voice-play { height : 18px;背景-重复:不重复;背景-图像:网址(./img/语音。巴布亚新几内亚);背景尺寸: 18px自动;opacity: 0.5 }。app-语音-你应用程序-语音-暂停{ /*从未播放*/背景-位置: 0px-39px;}.app-语音-你。应用-语音-播放{ /*播放中(不需要过渡动画)*/背景-位置: 0px-39px;-网络套件-动画:语音播放1s无限步-开始;-moz-animation: voiceplay 1s无限步-开始;-o-动画:语音播放1s无限步-开始;动画:语音播放1s无限步-开始;} @-网络工具包-关键帧voiceplay { 0%,100% {背景-位置: 0px-39px;} 33.333333% {背景-位置: 0px-0px;} 66.666666% {背景-位置: 0px-19.7 px;}}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:js仿微信语音播放实现思路是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。