微信小程序实现类似微信点击语音播放效果


Posted in Javascript onMarch 30, 2020

本文实例为大家分享了微信小程序类似平常微信语音聊天的效果,不会互相干扰播放状态,供大家参考,具体内容如下

微信小程序实现类似微信点击语音播放效果

根据开发的需求,先理清一下思路,点击语音播放与暂停/停止,切换下一个语音等;
小程序对于audio的组件的一些api方法已经不支持了,详情可以参看:微信小程序audio组件文档

微信小程序实现类似微信点击语音播放效果

嗯嗯,这下子,该怎么办呢?

就如上面提到,小程序1.60版本后,给开发者提供了这个wx.createInnerAudioContext()api…具体使用可以看文档;

好的,现在该上代码了!

-wxml结构:

<block wx:for="{{audioArr}}" wx:key="content" wx:for-item="v" wx:for-index="key">
 <view class='output-audio'>

 <!-- 默认状态 -->
 <view class='audio' wx:if="{{v.bl==false}}" bindtap='audioPlay' data-key="{{key}}" data-id="{{v.id}}" data-bl="{{v.bl}}">
 <image class='ico' src='https://xcx.quan5fen.com/Public/xcx-hitui/image/imgs-jyh/yuyin-ico.png' />
 <label class='time'>{{v.time}}</label>
 </view>

 <!-- 当前正在播放状态 -->
 <view class='audio' wx:if="{{v.bl==true}}" bindtap='audioStop' data-key="{{key}}" data-id="{{v.id}}" data-bl="{{v.bl}}">
 <image class='ico' src='https://xcx.quan5fen.com/Public/xcx-hitui/image/imgs-jyh/yuyin-gif.gif' />
 <label class='time'>{{v.time}}</label>
 </view>

 </view>
</block>

-wxss样式:

page{ background: #f0f0f0;}
.output-audio{ width: 150rpx; margin: 30rpx; }
.output-audio .audio{ padding: 20rpx; border-radius: 10rpx;background-color: #fff;
border: 1px solid #f0f0f0; overflow: hidden; }
.output-audio .audio .ico{ width: 26rpx; height: 30rpx; float: left;}
.output-audio .audio .time{ float: right; font-size: 24rpx;}

-js方法:

// pages/audio/audio.js

//创建audio控件
const myaudio = wx.createInnerAudioContext(); 

Page({

 /**
 * 页面的初始数据
 */
 data: {

 //音频列表
 audioArr: [
 {
 id: '000',
 src: 'https://s320.xiami.net/928/19928/1882512413/1772277226_1513175794617.mp3?ccode=xiami_web_web&expire=86400&duration=182&psid=485902a766977ecaae347a4cc851e8da&ups_client_netip=113.70.219.174&ups_ts=1551680441&ups_userid=0&utid=ljH9FKf0Um0CAQ7fs+HVAPRw&vid=1772277226&fn=1772277226_1513175794617.mp3&vkey=Bac0e9fde3983f090cef0a37e1cb73ef7',
 time: '30s',
 bl: false
 },
 {
 id: '001',
 src: 'https://s128.xiami.net/764/33764/2104642547/1810384080_1551417116476_5598.mp3?ccode=xiami_web_web&expire=86400&duration=181&psid=6320a01db73a6fdb9632f5800fc93fe5&ups_client_netip=113.70.219.174&ups_ts=1551680537&ups_userid=0&utid=ljH9FKf0Um0CAQ7fs+HVAPRw&vid=1810384080&fn=1810384080_1551417116476_5598.mp3&vkey=B54b264178201f6737c9bb5ff4bbce3d0',
 time: '50s',
 bl: false
 },
 ]
 },


 //音频播放 
 audioPlay: function (e) {
 var that = this,
 id = e.currentTarget.dataset.id,
 key = e.currentTarget.dataset.key,
 audioArr = that.data.audioArr,
 vidSrc = audioArr[key].src;
 myaudio.src = vidSrc;
 myaudio.autoplay = true;

 //切换显示状态
 for (var i = 0; i < audioArr.length; i++) {
 audioArr[i].bl = false;
 }
 audioArr[key].bl = true;
 
 myaudio.play();
 
 //开始监听
 myaudio.onPlay(() => {
 that.setData({
 audioArr: audioArr
 })
 })

 //结束监听
 myaudio.onEnded(() => {
 audioArr[key].bl = false;
 that.setData({
 audioArr: audioArr,
 })
 })

 },

 // 音频停止
 audioStop: function (e) {
 var that = this,
 key = e.currentTarget.dataset.key,
 audioArr = that.data.audioArr;
 //切换显示状态
 for (var i = 0; i < audioArr.length; i++) {
 audioArr[i].bl = false;
 }
 audioArr[key].bl = false;

 myaudio.stop();
 //停止监听
 myaudio.onStop(() => {
 audioArr[key].bl = false;
 that.setData({
 audioArr: audioArr,
 })
 })
 //结束监听
 myaudio.onEnded(() => {
 audioArr[key].bl = false;
 that.setData({
 audioArr: audioArr,
 })
 })
 }, 

 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {

 },

 /**
 * 生命周期函数--监听页面初次渲染完成
 */
 onReady: function () {

 },

 /**
 * 生命周期函数--监听页面显示
 */
 onShow: function () {

 },

 /**
 * 生命周期函数--监听页面隐藏
 */
 onHide: function () {
 
 },

 /**
 * 生命周期函数--监听页面卸载
 */
 onUnload: function () {
 
 },

 /**
 * 页面相关事件处理函数--监听用户下拉动作
 */
 onPullDownRefresh: function () {
 
 },

 /**
 * 页面上拉触底事件的处理函数
 */
 onReachBottom: function () {
 
 },

 /**
 * 用户点击右上角分享
 */
 onShareAppMessage: function () {
 
 }
})

完整代码可访问本人github

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Array对象方法参考
Oct 03 Javascript
可实现多表单提交的javascript函数
Aug 01 Javascript
高亮显示web页表格行的javascript代码
Nov 19 Javascript
初学js 新节点的创建 删除 的步骤
Jul 04 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
May 13 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
js简单实现Select互换数据的方法
Aug 17 Javascript
理解Javascript文件动态加载
Jan 29 Javascript
响应式表格之固定表头的简单实现
Aug 26 Javascript
jQuery Masonry瀑布流插件使用方法详解
Jan 18 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
Jun 25 Javascript
详解a标签添加onclick事件的几种方式
Mar 29 Javascript
微信小程序如何访问公众号文章
Jul 08 #Javascript
JavaScript实现的开关灯泡点击切换特效示例
Jul 08 #Javascript
JavaScript实现的联动菜单特效示例
Jul 08 #Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
Jul 08 #Javascript
JavaScript定时器设置、使用与倒计时案例详解
Jul 08 #Javascript
Vue实现拖放排序功能的实例代码
Jul 08 #Javascript
JavaScript中Dom操作实例详解
Jul 08 #Javascript
You might like
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
node.js中的fs.existsSync方法使用说明
2014/12/17 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
详解Python的三种可变参数
2019/05/08 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
致跳高运动员加油稿
2014/02/12 职场文书
教师求职信范文
2014/05/24 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
2014年政协工作总结
2014/12/09 职场文书
建党伟业电影观后感
2015/06/01 职场文书
Windows server 2012搭建FTP服务器
2022/04/29 Servers
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技