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


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 相关文章推荐
Javascript 刷新全集常用代码
Nov 22 Javascript
JavaScript 异步方法队列链实现代码分析
Jun 05 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
JSONObject使用方法详解
Dec 17 Javascript
bootstrap-treeview自定义双击事件实现方法
Jan 09 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
改变checkbox默认选中状态及取值的实现代码
May 26 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
Feb 15 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
前后端如何实现登录token拦截校验详解
Sep 03 Javascript
基于游标的分页接口实现代码示例
Nov 12 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
Nov 11 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验证码实现代码(3种)
2015/09/07 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python中的rjust()方法使用详解
2015/05/19 Python
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
《两只鸟蛋》教学反思
2014/02/10 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
2014年质量工作总结
2014/11/22 职场文书
旷工辞退通知书
2015/04/17 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
HAM-2000摩机图
2021/04/22 无线电
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers