微信小程序实现录音时的麦克风动画效果实例

yizhihongxing

微信小程序实现录音时的麦克风动画效果实例

录音时麦克风动画效果是一种常见的交互体验,在微信小程序中实现也非常简单。下面详细讲解如何实现。

1. 获取用户录音授权

首先,我们要先获取用户录音的授权。在小程序中,可以通过调用 wx.getSetting 方法获取用户是否授权录音的状态。如果用户未授权,则可以通过 wx.authorize 方法请求授权。

示例代码如下:

wx.getSetting({
  success(res) {
    if (!res.authSetting['scope.record']) {
      wx.authorize({
        scope: 'scope.record',
        success() {
          console.log('授权成功')
        },
        fail() {
          console.log('授权失败')
        }
      })
    }
  }
})

2. 调用录音接口实现录音

获取用户授权后,我们可以调用小程序提供的录音接口进行录音。调用录音接口时,可以传入一个回调函数,在录音过程中触发这个回调函数,对录音的状态进行处理。

下面是一个示例代码,记录了录音的开始、暂停和结束状态。

Page({
  data: {
    recordStatus: 'stop' // 记录录音状态
  },
  startRecord() {
    const recorderManager = wx.getRecorderManager();
    recorderManager.onStart(() => {
      console.log('开始录音')
      this.setData({
        recordStatus: 'recording'
      })
    });
    recorderManager.onResume(() => {
      console.log('恢复录音')
      this.setData({
        recordStatus: 'recording'
      })
    });
    recorderManager.onPause(() => {
      console.log('暂停录音')
      this.setData({
        recordStatus: 'paused'
      })
    });
    recorderManager.onStop((res) => {
      console.log('结束录音', res.tempFilePath)
      this.setData({
        recordStatus: 'stop'
      })
    });
    const options = {
      duration: 30000, // 最长录音时长,单位 ms,超过后自动停止录音,默认为 60000
      sampleRate: 44100, // 采样率,有效值 8000/16000/44100,默认为 44100
      numberOfChannels: 1, // 录音通道数,有效值 1/2,默认为 1
      encodeBitRate: 192000, // 编码码率,有效值见下表格,默认为 192000
      format: 'mp3', // 音频格式,有效值 aac/mp3,默认为 aac
      frameSize: 50, // 每一帧的采样数
    };
    recorderManager.start(options);
  },
  pauseRecord() {
    const recorderManager = wx.getRecorderManager();
    recorderManager.pause();
  },
  stopRecord() {
    const recorderManager = wx.getRecorderManager();
    recorderManager.stop();
  }
})

3. 实现麦克风动画效果

最后,我们来实现麦克风动画效果。我们可以利用小程序提供的 wx.createAnimation 方法和 setData 方法实现。

具体实现过程如下:

  1. 在 wxml 文件中添加一个图标用于表示麦克风:
<icon type="voice" class="icon" bindtap="startRecord"></icon>
  1. 在 wxss 文件中,定义麦克风图标的样式,并定义几个关键帧作为动画的效果。
.icon {
  color: #bcbcbc;
  font-size: 80rpx;
  animation: scale 1s linear infinite;
  transform-origin: center center;
}

@keyframes scale {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.2);
  }
  100% {
    transform: scale(1);
  }
}

.recording {
  color: #f00;
  animation-play-state: running;
}
  1. 在 js 文件中,使用 wx.createAnimation 创建麦克风动画,并在录音状态改变时触发动画。
Page({
  data: {
    recordStatus: 'stop', // 记录录音状态
    micAnimation: {}, // 存储麦克风动画
  },
  onLoad() {
    this.micAnimation = wx.createAnimation({
      duration: 1000,
      timingFunction: "ease-out",
      delay: 0,
      transformOrigin: "50% 50% 0",
    })
  },

  startRecord() {
    // 记录状态
    this.setData({
      recordStatus: 'recording'
    });

    // 开始动画
    this.micAnimation.scale(1.2).step();
    this.setData({
      micAnimation: this.micAnimation.export()
    });

    // 开始录音
    // ...
  },

  pauseRecord() {
    // 记录状态
    this.setData({
      recordStatus: 'paused'
    });

    // 暂停动画
    this.micAnimation.scale(1.0).step();
    this.setData({
      micAnimation: this.micAnimation.export()
    });

    // 暂停录音
    // ...
  },

  stopRecord() {
    // 记录状态
    this.setData({
      recordStatus: 'stop'
    });

    // 停止动画
    this.micAnimation.scale(1.0).step();
    this.setData({
      micAnimation: this.micAnimation.export()
    });

    // 停止录音
    // ...
  },
})

这样,我们就实现了一个录音时的麦克风动画效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序实现录音时的麦克风动画效果实例 - Python技术站

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

相关文章

  • JavaScript中的Proxy对象

    一、什么是Proxy对象 在JavaScript中,我们可以使用Proxy对象来代理某个对象,从而拦截对该对象的一些操作,例如读取属性、设置属性、函数调用等,以实现更加灵活的编程。 Proxy对象是ES6中新增的一个功能,它实现了一个代理器,可以通过这个代理器来拦截和修改对目标对象的操作。 例如,可以通过Proxy代理某个对象,在读取该对象属性时自动加上一个…

    JavaScript 2023年5月27日
    00
  • javascript数组元素删除方法delete和splice解析

    JavaScript数组元素删除方法delete和splice解析 对于JavaScript数组,删除操作是常见的一种操作,但是我们可以使用不同的方法进行删除操作,其中最常用的有删除元素的方法delete和splice。 delete方法 delete方法会将对应下标的元素删除,但是会保留这个位置,也就是说对于这个数组来说,这个位置还是存在的,只是该位置的值…

    JavaScript 2023年5月27日
    00
  • JS实现导出Excel和CSV文件操作

    JS实现导出Excel和CSV文件是前端开发中经常遇到的需求之一。在这里,我将给出完整的操作步骤和两个示例。 准备工作 在实现导出Excel和CSV文件前,需要先引入相关的依赖库。常用的依赖库有FileSaver.js和xlsx.js。 <!– 导入FileSaver.js –> <script src="https://cd…

    JavaScript 2023年5月27日
    00
  • js事件冒泡、事件捕获和阻止默认事件详解

    JS事件冒泡、事件捕获和阻止默认事件 事件冒泡 事件冒泡是指当一个元素触发了某个事件时,该事件会从子元素一直冒泡到祖先元素。例如,当一个按钮被点击时,点击事件会首先被触发,然后该事件会向外冒泡,一直到文档根节点才停止。 事件捕获 事件捕获是指当一个元素触发了某个事件时,该事件会从祖先元素一直捕获到子元素。例如,当一个按钮被点击时,点击事件会从文档根节点开始捕…

    JavaScript 2023年6月10日
    00
  • JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性

    ECMAScript 5 (也称为ES5) 是 JavaScript 的第五个版本,具有多项新特性,为Web应用程序开发增加了更多的功能和灵活性。下面是ECMAScript5的一些主要特性: 1. 严格模式 ECMAScript 5 引入了严格模式,它是一种在代码单元或整个脚本中启用更严格解析和错误处理的方式。严格模式不允许给未声明的变量赋值,不允许删除变量…

    JavaScript 2023年5月18日
    00
  • JQuery记住用户名密码实现下次自动登录功能

    JQuery记住用户名密码实现下次自动登录功能 在一些需要登录的网站中,用户可能需要输入用户名和密码登录。如果用户勾选了“记住我”的功能,下次再登录时就可以实现自动登录的功能。本文将介绍如何使用 JQuery 实现这一功能。 1. 使用cookie记录用户名密码 要实现自动登录的功能,需要记录用户的用户名和密码。可以使用 cookie 来保存这些信息。 //…

    JavaScript 2023年6月11日
    00
  • JS实现快速的导航下拉菜单动画效果附源码下载

    下面是 JS 实现快速的导航下拉菜单动画效果的完整攻略: 一、思路 首先,我们需要给下拉菜单添加一个点击事件,并在点击后显示子菜单; 接着,使用 CSS 中的 transition 属性实现下拉菜单的动画效果; 最后,用 JS 控制下拉菜单的显示和隐藏。 二、实现步骤 2.1 HTML 结构 首先,我们需要在 HTML 中添加一个导航栏和下拉菜单。 <…

    JavaScript 2023年6月11日
    00
  • JavaScript实现获取img的原始尺寸的方法详解

    我来详细讲解“JavaScript实现获取img的原始尺寸的方法详解”的完整攻略。 一、背景说明 在开发网页中,经常需要获取 img 标签的原始尺寸,以便进行响应式布局或者图片的合理展示。对于这种需求,我们可以使用 JavaScript 来获取 img 标签的原始尺寸,本文将介绍几种实现方式。 二、addEventListener 方法 addEventLi…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部