小程序-语音播放动画-animation

本文介绍了如何在小程序中实现语音播放时的动画效果,通过展示从静止到播放过程中的三张关键帧图片,详细讲解了动画的实现步骤和技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:

在这里插入图片描述三张图片分别:白底看不到-就用黑色代替,是反方向但效果一样

  • 1
    在这里插入图片描述
  • 2
    在这里插入图片描述
  • 3
    在这里插入图片描述
<view class="animat-audiobox {
    {msg.senderId==receiverId ? 'other' : 'me'}}">                
	<view class='animat-audio voice_view' bindtap='playTap' data-id='{
    {msg.id}}' data-time="{
    {msg.time}}" data-url="{
    {msg.body}}" style="width:{
      {
      msg.time*20}}rpx;">                    
		<!--没有播放时图片为 audio3.png-->                    
		<image src="/pages/images/index/item/{
    {msg.senderId==receiverId?'record-b-3':'record-w-3'}}.png" class="record_img
### 微信小程序中实现语音识别并添加动画效果 在微信小程序中,可以通过调用微信官方提供的 `wx.startSpeechRecognition` 和 `wx.stopSpeechRecognition` 接口来完成语音识别的功能[^1]。为了增强用户体验,可以在录音过程中加入动画效果,比如显示波形图或者动态图标。 #### 一、基础功能实现 以下是基于微信小程序 API 的简单代码示例: ```javascript Page({ data: { isRecording: false, resultText: '' }, startRecord() { this.setData({ isRecording: true }); wx.startSpeechRecognition({ lang: 'zh_CN', success(res) { console.log('语音识别成功', res); }, fail(err) { console.error('语音识别失败', err); } }); }, stopRecord() { this.setData({ isRecording: false }); wx.stopSpeechRecognition(); } }); ``` 上述代码实现了基本的语音录制和停止功能,并通过 `isRecording` 数据变量控制状态变化[^2]。 --- #### 二、动画效果设计 为了让用户感知到正在录音的状态,可以引入简单的 CSS 动画或 Canvas 绘制技术模拟音量波动的效果。 ##### 方法一:CSS 动画 使用 WXML 中定义一个圆形按钮作为触发器,并配合 CSS 定义旋转动画。 WXML 文件: ```xml <view class="recording-container"> <button bindtap="startRecord" class="{{isRecording ? 'recording' : ''}}"> {{isRecording ? '松开 结束' : '按住 说话'}} </button> </view> ``` WXSS 文件: ```css .recording-container button { width: 80px; height: 80px; border-radius: 50%; background-color: #ff4d4f; color: white; } /* 录音中的样式 */ .recording { animation: rotateAnimation 1s infinite linear; } @keyframes rotateAnimation { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } ``` 此方法利用了 CSS 的 `animation` 属性创建了一个持续旋转的视觉反馈[^3]。 --- ##### 方法二:Canvas 波形绘制 如果希望更复杂一些,则可借助 Canvas 来实时绘制声波曲线。虽然微信小程序本身不支持直接获取麦克风数据流,但仍然能够通过定时改变图形位置营造出类似效果。 WXML 文件: ```xml <canvas canvas-id="waveform"></canvas> <button bindtap="startRecord">开始录音</button> <button bindtap="stopRecord">结束录音</button> ``` JS 文件: ```javascript const ctx = wx.createCanvasContext('waveform'); function drawWave(isActive) { const wavePoints = []; let amplitude = isActive ? Math.random() * 20 + 10 : 0; for (let i = 0; i < 10; i++) { wavePoints.push(amplitude * Math.sin(i / 2)); } ctx.clearRect(0, 0, 300, 100); ctx.beginPath(); wavePoints.forEach((point, index) => { if (index === 0) { ctx.moveTo(index * 30, 50 - point); } else { ctx.lineTo(index * 30, 50 - point); } }); ctx.stroke(); setTimeout(() => drawWave(isActive), 100); } Page({ data: {}, startRecord() { this.drawInterval = setInterval(() => drawWave(true), 200); }, stopRecord() { clearInterval(this.drawInterval); drawWave(false); } }); ``` 以上代码片段展示了如何用 Canvas 创建一条随时间变化的假想波形线。 --- ### 总结 无论是采用轻便快捷的 CSS 动画还是更具表现力的 Canvas 技术,都可以显著提升用户的交互体验。开发者应根据实际需求权衡性能与展示效果之间的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值