热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序-wx.createInnerAudioContext的方法执行多次问题

微信小程序-wx.createInnerAudioContext的方法执行多次问题在项目中用wx.createInnerAudioContext做语音播放这一块,测试的时候发现第一次播

微信小程序-wx.createInnerAudioContext的方法执行多次问题

在项目中用wx.createInnerAudioContext做语音播放这一块,测试的时候发现第一次播放的时候onPlayonEnd执行了一次,第二次播放时执行了两次,第三次执行三次,依次类推。

去开发文档里面看了一下它的示例,和它写的一样的,也是先创建一个innerAudioContext,然后在用户的事件里面调用onPlay,onEnd,onError等方法。

const innerAudioCOntext= wx.createInnerAudioContext()

innerAudioContext.autoplay = true

innerAudioContext.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46'

innerAudioContext.onPlay(() => {

    console.log('开始播放')

})

innerAudioContext.onError((res) => {

    console.log(res.errMsg)

    console.log(res.errCode)

})

 

后来在一篇博客(https://blog.csdn.net/Sourcemyx/article/details/79424004)看到了相关解答。

回调事件是每一次触发都会注册一次,也就是这个回调触发过一次。这个回调就一直存在了,所以不需要一直去创建。

解决方案一:

page

const innerAudioCOntext= wx.createInnerAudioContext()

把所有的回调都写在onLoad中,在页面加载及注册。不需要重复。

onLoad: function (options) {

innerAudioContext.onPlay(() => {

console.log('开始播放')

that.setData({ audioStatus: true })

})

 

innerAudioContext.onEnded(() => {

console.log('播放结束')

that.setData({ audioStatus: false })

})

innerAudioContext.onError((res) => {

console.log(res.errMsg)

console.log(res.errCode)

})

}


但是在我的实际项目中,一个页面有两种形式的语音播放,一个是播放语音列表里面的语音,一个是预听当前用户待提交的语音。这两种的onPlayonEnd回调内部执行的不一样,不可能在onLoad里面用同一个回调,下面就是第二个解决方案

解决方案二:

在点击事件里面创建innerAudioContext实例对象,在播放当前音频的自然播放结束onEnd的回调事件里面和音频播放错误onError回调事件,里面调用destory方法销毁该实例。

//列表播放录音

play: function (e) {

var that = this;

console.log(e)

 

const innerAudioCOntext= wx.createInnerAudioContext()

var comment = this.data.comment;

var index = e.currentTarget.dataset.id;

innerAudioContext.autoplay = true

innerAudioContext.src = comment[index].voiceUrl;

for (var i = 0; i

comment[i].audioStatus = false

}

comment[index].audioStatus = true;

 

innerAudioContext.onPlay(() => {

console.log('开始播放')

that.setData({

comment: comment,

})

})

 

innerAudioContext.onEnded(() => {

console.log('播放结束')

comment[index].audioStatus = false;

that.setData({

comment: comment,

})

//播放结束,销毁该实例

innerAudioContext.destroy()

})

 

innerAudioContext.onError((res) => {

console.log(res.errMsg)

console.log(res.errCode)

//播放错误,销毁该实例

innerAudioContext.destroy()

 

})

},

 

//预听录音

play2:function(e){

var that = this;

 

const innerAudioContext2 = wx.createInnerAudioContext()

innerAudioContext2.autoplay = true

innerAudioContext2.src = e.currentTarget.dataset.url;

innerAudioContext2.onPlay(() => {

console.log('play2开始播放')

that.setData({ audioStatus: true })

})

 

innerAudioContext2.onEnded(() => {

console.log('play2播放结束')

that.setData({ audioStatus: false })

//播放结束,销毁该实例

innerAudioContext2.destroy()

})

 

innerAudioContext2.onError((res) => {

console.log(res.errMsg)

console.log(res.errCode)

//播放错误,销毁该实例

innerAudioContext2.destroy()

 

})

},

 

 


推荐阅读
  • 微信小程序API音频-暂停播放是千自学中一篇关于微信小程序的文章简介:wx.pauseVoice(Objectobject)从基础库 1.6.0 开始,本接口停止维护,请使用 wx.createInnerAudioContext 代替暂停正在播放的语 ... [详细]
  • 小编给大家分享一下微信小程序中下拉刷新及上拉加载的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这 ... [详细]
  • 微信小程序中如何实现轮播图
    这篇文章主要介绍了微信小程序中如何实现轮播图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带 ... [详细]
  • 本文主要介绍关于微信小程序,小程序,今日头条,新闻,前端的知识点,对【仿今日头条实时新闻微信小程序项目源码】和【自己怎么弄微信小程序】有兴趣的朋友可以看下由【叶绿体不忘呼吸】投稿的技术文章,希望该技术 ... [详细]
  • 微信小程序地图实现展示线路的方法
    这篇文章将为大家详细讲解有关微信小程序地图实现展示线路的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所 ... [详细]
  • 微信小程序实现简易计算器功能_javascript技巧
    这篇文章主要为大家详细介绍了微信小程序实现简易计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的 ... [详细]
  • 微信小程序实现星级评分与展示
    这篇文章主要为大家详细介绍了微信小程序实现星级评分与展示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的 ... [详细]
  • 1.有事会出现小程序的页面超出屏幕,导致横向和纵向溢出,这时候在wxss文件中加入overflow:hidden来隐藏溢出屏幕的部分。.container{background:# ... [详细]
  • 微信小程序新手教程wx.request(object) API
    微信小程序新手教程wx.request(object)API,本篇默认已经成功安装微信小程序工具,来和小编一起看看吧wx.request(object)API这里通过干活集中营的A ... [详细]
  • 微信小程序实战之菜谱小程序
    最近突发奇想,想要自己搞个小程序玩儿玩儿,但是鉴于自己是搞后端服务器出身,对于偏前端的微信小程序开发实在是一知半解,尤其是对于css类样式相关,更是无从下手,于是乎,只能从晚上找了 ... [详细]
  • 微信小程序Demo导入的示例分析
    小编给大家分享一下微信小程序Demo导入的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • 微信小程序适合做什么?微信小程序详情介绍
    微信小程序是腾讯新开发的功能,目前备受关注的,还有很多用户不是很了解,不知道这个微信小程序适合什么,因此就让小编给大家讲讲吧。微信小程序详情介绍小程序也有很多功能,如果你按照之前的 ... [详细]
  • 小程序“自定义关键词”功能的常见问答
      我们知道小程序可以通过线下扫码、公众号、好友分享、长按小程序码、搜索小程序名称来找到,现在又多了一个新方式——小程序后台新增自定义关键词功能:已发布小程序的开发者,可提交最多10个与小程序业务相关 ... [详细]
  • 知晓推送正式上线!送你 13 亿条模板消息
    「知晓推送」能帮助小程序运营人员有效解决粉丝转化、消息推送、数据分析等多个层面的麻烦事,让小程序推广难、留存差的问题从此成为过去式。在服务上线的这个重要的日子里,贴心的小云专门向” ... [详细]
  • 小程序中如何实现弹出菜单功能
    这篇文章给大家分享的是有关小程序中如何实现弹出菜单功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。需求点击 ... [详细]
author-avatar
葉芯彤_613
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有