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

yizhihongxing

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中v-for的key唯一性

    当使用 Vue 的 v-for 指令循环渲染数据时,每个渲染的元素都需要拥有唯一的 key 属性。 为什么需要 key 属性? key 属性的作用是为了帮助 Vue 识别每个节点的标识,以便高效的更新虚拟 DOM。 假如我们有如下代码: <template> <div> <ul> <li v-for="it…

    Vue 2023年5月27日
    00
  • Vue3+Vite+TS实现二次封装element-plus业务组件sfasga

    下面是详细讲解 “Vue3 + Vite + TS 实现二次封装 element-plus 业务组件”的完整攻略。 一、前言 我们这里使用的框架是 Vue3,构建工具是 Vite,使用 TypeScript 对代码进行静态类型检查。我们将使用 element-plus 作为 UI 组件,同时对其进行二次封装。这样可以使我们的业务组件更加灵活、易用、容易扩展。…

    Vue 2023年5月27日
    00
  • vue实现文字横向无缝走马灯组件效果的实例代码

    下面是关于“vue实现文字横向无缝走马灯组件效果的实例代码”的完整攻略。 1. 概述 横向无缝走马灯是一种在web应用中经常使用的效果,可以用来展示滚动的新闻、广告等内容。本攻略将详细介绍如何使用Vue实现文字横向无缝走马灯组件效果。 2. 实现步骤 实现文字横向无缝走马灯组件效果的主要步骤如下: 2.1 确定需要展示的内容 在实现文字横向无缝走马灯组件效果…

    Vue 2023年5月27日
    00
  • vue+el-upload实现多文件动态上传

    要实现多文件动态上传,我们可以使用Vue.js提供的el-upload组件来实现。下面是实现此功能的具体步骤: 步骤1:安装el-upload npm install element-ui -S 步骤2:导入el-upload组件 在Vue组件中导入el-upload组件。在main.js文件中引入element-ui: import Vue from ‘v…

    Vue 2023年5月28日
    00
  • 手写实现Vue计算属性

    下面是手写实现Vue计算属性的完整攻略: 什么是计算属性 在Vue中,计算属性是一种声明式的数据计算方法。在模板中,我们可以使用计算属性来处理有逻辑的表达式和复杂的逻辑运算,计算属性是基于它们的依赖缓存,只有在相关依赖发生改变时才会重新进行计算,可以有效地提高性能。 手写实现计算属性 要手写实现计算属性的话,首先需要了解计算属性的原理。Vue中的计算属性实际…

    Vue 2023年5月28日
    00
  • vue中v-for循环给标签属性赋值的方法

    在Vue中使用v-for循环渲染元素时,经常需要根据数据动态地给标签属性赋值,例如给一个标签的src属性赋值等。下面是一个完整的攻略,包括示例说明: 1. 基本语法 在Vue中,可以使用v-bind指令绑定属性值,语法格式如下: <img v-bind:src="imageUrl"> <!– 或者简写成 –> …

    Vue 2023年5月27日
    00
  • 详解vue-cli 构建Vue项目遇到的坑

    详解vue-cli 构建Vue项目遇到的坑 简介 vue-cli是Vue.js官方提供的一款构建工具,可以快速创建单页应用或组件库,提供webpack打包、ES6转译、热更新等功能,可以大大减轻开发者的工作量。然而,使用vue-cli创建项目时,也会遇到各种坑,这里将对一些常见的问题进行详解。 坑1:vue-cli3无法预览组件库 使用vue-cli3创建组…

    Vue 2023年5月28日
    00
  • vue2之响应式双向绑定,在对象或数组新增属性页面无响应的情况

    在Vue2中,通过响应式绑定的方式,可以实现数据与页面的双向绑定,非常方便。但是,在使用过程中,如果对象或数组新增属性时,页面没有作出响应,可能会出现一些问题。 这种情况通常是因为Vue只会对已经存在的属性进行监控,而无法监控新增的属性。为了解决这个问题,我们需要通过一些方法,手动将新增的属性添加到Vue的监控列表中。 使用Vue.set()方法 Vue提供…

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