当前位置:首页 > 新闻动态 > 网站文章

微信小程序从入坑到放弃二十八:开发一款DIY音乐播放器(WXS优化版)

来源: 浏览:184 时间:2023-07-25
摘要:前天,我们初步开发了一款可控制播放进度的音乐播放器。但在真机上运行时会略显卡顿,为了解决性能问题,今天我们使用WXS来改进代码。主要思路是:WXS负责处理交互逻辑并格式转换,组件用来与页面实现数据双向通信......

书接上回,在前天的文章中,我们初步开发了一款自定义音乐播放器,但存在性能问题,详情阅读原文《微信小程序从入坑到放弃二十七:可控制播放进度的音乐播放器(初级版)》。今天,我们就来优化下代码,以提高性能。

一、卡顿原因分析

1.1、格式转换

pxpx

1.2、diyAudioPlayer.js中包含了大量的交互

diyAudioPlayer.js

二、解决方案:WXS辅助

WXSWXS

2.1、了解WXS

WXSWXSComponentDescriptorclassstyleclass
WXS

2.2、逐步分析,取舍有度

currentTimedurationValueprogressWidthValuexcurrentTime
currentTimeevent.changedTouches[0].startXtouchMoveins.callMethod('touchMove', { currentTime: currentTime })currentTime
  1. /* 监听拖拽 */
  2. function touchMove(event, ins) {
  3.   var touch = event.touches[0] || event.changedTouches[0]
  4.   var pageX = touch.pageX
  5.   left = pageX - startX + lastLeft
  6.   /* 滑块运动的最小范围 */
  7.   if (left >= 0) {
  8.     left = 0
  9.   }
  10.   /* 滑块运动的最大范围 */
  11.   if (left < progressWidthValue) {
  12.     left = progressWidthValue
  13.   }
  14.   startX = pageX
  15.   lastLeft = left
  16.   currentTime = getcurrentTime() /* 计算出音频的播放位置(虽然此处能计算出,但不能直接跟页面通信,所以必须要靠下一行实现响应数据) */
  17.   ins.callMethod('touchMove', { currentTime: currentTime }) /* 向组件通信 */
  18. }
  1. /* 组件中监听拖拽 */
  2. touchMove(data) {
  3.   if (data && !data.target && data.currentTime !== undefined) {
  4.     this.setData({
  5.       currentTime: data.currentTime /* 接收wxs中计算出的值并利用setData实现数据响应 */
  6.     })
  7.   }
  8. }
wxml
  1.   
  2.     
  3.     
  4.     
  5.     
  6.       
  7.         
  8.            {{wxs.formatTime(currentTime)}}/{{wxs.formatTime(durationValue)}}
  9.             
  10.             {{wxs.formatTime(currentTime)}}/{{wxs.formatTime(durationValue)}}
  11.             
  12.           
  13.         
  14.         
  15.         
  16.         
  17.       
  18.     
  19.   
  

2.3、源码讲解

注意上面代码中黄色高亮的部分,是本次修改的。

2.2progresscurrentTimetotaldurationValuexwxs.changeX(currentTime,durationValue,progressWidthValue)12touchMove、touchEndwxs.touchMoveWXS
12
  1. change:progresswidth="{{wxs.propProgressWidth}}" progresswidth="{{progressWidthValue}}"
progresswidth="{{progressWidthValue}}"index.jsprogressWidthValueprogressWidthchange:progresswidthprogressWidthprogressWidthValue{{wxs.propProgressWidth}}

2.4、总结

setDataWXS

三、demo源码

github

四、如何在项目中使用封装好的组件?

若看官想把此款音乐播放器使用到实际项目中,可以先通过上面的链接从github仓库上拉取代码到本地,然后在需要使用的页面中引用组件即可。啥也不说了,还是直接上代码给看官演示一下吧,此处以在小程序首页中调用为例。

4.1、修改index.json配置

  1. {
  2. "usingComponents": {
  3.   "wxs-diyAudioPlayer": "/components/wxs-diyAudioPlayer/index"
  4. },
  5. "navigationBarTitleText": "开发一款DIY音乐播放器(WXS优化版)"
  6. }
index.jsonindex.wxml

4.2、在index.wxml页面中调用

index.js

4.3、在index.js中添加音频地址

  1. var app = getApp();
  2. Page({
  3.   data: {
  4.     audioSrc: 'https://card-cdn-test.5ifengdu.com/ali/audio/202002/11/1581416977486_8929949054.mp3' /* 网络音频地址 */
  5.   },
  6.   /* 以下是原项目代码 */
  7.   ......
  8. });

现在,保存代码即可在微信小程序首页中看到音乐播放器了。最终效果如下:开发一款DIY音乐播放器(WXS优化版)最终效果.mp4(友情提醒:点击上方图片即可播放视频)

五、最后

源码及如何在项目中使用这款音乐播放器的步骤已经很详细了,由于文章篇幅有限,所以文章中的js代码就没有完全展示。源码中会有完整代码及必要注释,若看官在拉完代码后有疑问,可与艺灵联系,方式见下方二维码或右侧。

/xwzj/2020-05-12/weixin-wxs-diyAudioPlayer.html

地址 · ADDRESS

地址:建邺区新城科技园嘉陵江东街18号2层

邮箱:309474043@qq.Com

点击查看更多案例

联系 · CALL TEL

400-8793-956

售后专线:025-65016872

业务QQ:309474043    售后QQ:1850555641

©南京安优网络科技有限公司 版权所有   苏ICP备12071769号-4  网站地图