mpvue开发音频类小程序踩坑和建议详解

mpvue开发音频类小程序踩坑和建议详解

1. 前言

mpvue 是一个基于 Vue.js 核心的高性能小程序开发框架。它传承了 Vue.js 的语法风格和开发习惯,在小程序开发中尽可能的减少了学习成本和上手难度。同时,mpvue 利用 Webpack 和 Vue.js 的自身特性,将组件和业务逻辑代码进行分离抽离,维护更加方便易用。

在开发小程序中,音频类小程序是非常常见的,但是这类小程序存在很多坑点,需要我们在开发过程中多加注意。本文将针对开发音频类小程序时常见的几个问题进行详解,并在文章末尾提出一些建议希望对开发者有所帮助。

2. 可避免的问题

2.1 问题一:背景音乐依旧播放

当小程序页面切换或者关闭后,背景音乐依旧播放,影响用户体验。造成此问题的原因是背景音乐没有被正确关闭。

解决方案:

在页面 onUnload 事件中调用 wx.stopBackgroundAudio() 关闭背景音乐。

示例代码:

<template>
  <div>
    <button @click="playMusic()">播放音乐</button>
  </div>
</template>

<script>
export default {
  methods: {
    playMusic() {
      wx.playBackgroundAudio({
        dataUrl: 'yourMusicUrl',
        title: 'title',
        coverImgUrl: 'yourMusicCoverUrl'
      })
    }
  },
  onUnload() {
    wx.stopBackgroundAudio()
  }
}
</script>

2.2 问题二:两个音频同时播放

当两个页面同时播放音乐时,两个音频流会堵塞导致播放不正常。例如两页面同时播放背景音乐和音效等。

解决方案:

通过 wx.getBackgroundAudioPlayerState API 获取背景音乐状态,在前一个页面关闭背景音乐后,等待一段时间再播放下一个页面的背景音乐。

示例代码:

<template>
  <div>
    <button @click="playMusic()">播放音乐</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      musicState: {}
    }
  },
  methods: {
    // 播放音乐时判断背景音乐状态
    async playMusic() {
      this.musicState = await this.getMusicState()
      if (!this.musicState.paused) {
        // 若当前正在播放背景音乐,则先暂停当前音乐
        wx.stopBackgroundAudio()
        // 等待一段时间再播放,确保上一个背景音乐已关闭
        await new Promise(resolve => setTimeout(resolve, 1000))
      }
      wx.playBackgroundAudio({
        dataUrl: "yourMusicUrl",
        title: "title",
        coverImgUrl: "yourMusicCoverUrl"
      })
    },
    // 获取背景音乐状态
    getMusicState() {
      return new Promise((resolve, reject) => {
        wx.getBackgroundAudioPlayerState({
          success(res) {
            resolve(res)
          },
          fail(err) {
            reject(err)
          }
        })
      })
    }
  }
}
</script>

3. 一些小技巧

3.1 使用 @touchmove.prevent 强制停止音乐

在小程序使用原生的下拉刷新功能时,下拉过程中需强制停止背景音乐。这种情况下,可以使用 @touchmove.prevent 阻止事件的默认行为,强制停止背景音乐的播放。

示例代码:

<template>
  <div>
    <div @touchmove.prevent>
      <!-- content -->
    </div>
  </div>
</template>

<script>
export default {
  // 页面下拉刷新时,停止背景音乐
  onPullDownRefresh() {
    wx.stopBackgroundAudio()
    // TODO 下拉刷新操作
  }
}
</script>

3.2 在组件销毁前关闭音乐

在小程序中,组件跟页面的生命周期不一致,因此需要在组件销毁时关闭音乐。可以使用 keep-alive 缓存组件,避免频繁的组件销毁和创建。

示例代码:

<template>
  <div>
    <button @click="playMusic()">播放音乐</button>
  </div>
</template>

<script>
export default {
  activated() {
    wx.playBackgroundAudio({
      dataUrl: 'yourMusicUrl',
      title: 'title',
      coverImgUrl: 'yourMusicCoverUrl'
    })
  },
  deactivated() {
    wx.stopBackgroundAudio()
  }
}
</script>

4. 总结

在开发音频类小程序时,需要避免一些常见问题,例如背景音乐没有被正确关闭、两个音频同时播放等。除此之外,还可以使用小技巧来进一步提高用户体验,例如使用 @touchmove.prevent 强制停止音乐、在组件销毁前关闭音乐等。

希望本文能对开发者在使用 mpvue 开发音频类小程序时有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mpvue开发音频类小程序踩坑和建议详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue实现zip文件下载

    下面是使用 Vue 实现下载 Zip 文件的完整攻略。 准备工作 首先,我们需要安装 JSZip 和 FileSaver.js 这两个库。它们的作用分别是: JSZip:用于创建和操作 Zip 文件。 FileSaver.js:用于将 Blob 对象保存为文件。 在 Vue 项目中,可以使用 npm 进行安装: npm install jszip file-…

    Vue 2023年5月28日
    00
  • ant design vue 表格table 默认勾选几项的操作

    Ant Design Vue 表格(Table)默认勾选几项的操作,可以通过在表格数据中为需要默认勾选的行数据添加一个 selected 属性,并且在表格操作栏添加一个全选按钮,并将其与表格的 rowSelection 属性绑定起来即可实现。 以下是完整的实现步骤: 设置表格数据源 首先,需要设置表格的数据源,可以使用一个数组对象来模拟,示例代码如下: da…

    Vue 2023年5月28日
    00
  • vue 如何添加全局函数或全局变量以及单页面的title设置总结

    根据您的需求,我会详细讲解“Vue 如何添加全局函数或全局变量以及单页面的 title 设置总结”的完整攻略,包含两个示例用于进一步说明。 一、Vue 如何添加全局函数或全局变量 在 Vue 中,我们可以方便地在全局使用自定义函数和变量,这样可以简化业务逻辑,提高开发效率。以下是实现此功能的方法: 1.1 添加全局函数 在 Vue 中添加全局函数的方式是通过…

    Vue 2023年5月28日
    00
  • Vue插件从封装到发布的完整步骤记录

    当想要向其他开发者分享自己开发的 Vue 插件时,把它发布成独立的插件包是一种非常好的方式。下面是 Vue 插件从封装到发布的完整步骤记录: 步骤一:创建插件 创建一个项目文件夹,并在这个文件夹里利用 npm init 命令创建一个包描述文件(package.json)。 npm init 安装 Vue 及编写插件代码:在项目文件夹内,使用 npm inst…

    Vue 2023年5月28日
    00
  • vue实现自定义H5视频播放器的方法步骤

    下面我将详细讲解如何使用Vue实现自定义H5视频播放器。 1. 安装视频播放器组件库 首先,需要安装Vue的视频播放器组件库,常用的有video.js和vue-video-player。这里以vue-video-player为例进行讲解,可在Vue项目中通过以下命令进行安装: npm install vue-video-player –save 2. 导入…

    Vue 2023年5月28日
    00
  • 稍微学一下Vue的数据响应式(Vue2及Vue3区别)

    下面我将详细讲解“稍微学一下Vue的数据响应式(Vue2及Vue3区别)”的完整攻略,分别介绍Vue2和Vue3的数据响应式机制。 Vue2数据响应式 响应式的原理 Vue2使用的是“响应式系统”的概念来实现数据的双向绑定。即将数据对象传递给Vue实例后,Vue会监视数据的变化,在数据变化时通知视图进行更新。 数据的监测基于Object.defineProp…

    Vue 2023年5月27日
    00
  • Vue+webpack项目基础配置教程

    下面是针对“Vue+webpack项目基础配置教程”的完整攻略,包括以下几个部分的内容: 前置条件 安装Vue和webpack 创建Vue项目 配置webpack 示例说明 参考资料 1. 前置条件 在学习“Vue+webpack项目基础配置教程”前,需要您已经熟悉Vue框架的基本语法和开发流程,同时了解webpack打包工具的基本概念和使用方法。 2. 安…

    Vue 2023年5月28日
    00
  • vue.js移动数组位置,同时更新视图的方法

    要移动 Vue 中的数组位置并更新视图,常用的方法是: 使用 splice 方法直接修改数组,再触发更新操作; 使用 Vue.set 或 this.$set 方法,更新数组指定索引值的数据并触发更新操作。 下面分别介绍这两种方法的使用。 1. 使用 splice 方法直接修改数组 最常见的移动数组位置操作就是将某个元素往前或往后移动,以 arr[i] 为例,…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部