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


Posted in Javascript onMay 18, 2019

前言

这个简单的麦克风demo的创意是来源于“包你说”中的录音效果,实现的方式其实也并不难,但对于小程序中的简易动画的使用的确很实用。

效果

先来看个demo,gif帧数比较低,实际效果和真机测试的流畅性还是很OK的

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

思路

通过setTimeout配合this.sedData来改变image中的src路径来生成动画。动画的播放以及隐藏则通过wx:if绑定一个自定义的参数来控制。下面就直接上代码。

代码

html

<view class='animation-talk'>
  <image src='../../image/receive{{receiveImg}}.png' wx:if="{{showTalk}}" mode='aspectFill'></image>
 </view>
 <view>
  <image src='../../image/voice{{voiceNum}}-btn.png' bindlongpress="longPress" bindtouchend="endTouch" ></image>
 </view>

javascript

var playTalk //录音动画定时器
 Page({
  data:{
   showTalk: false, //显示录音动画
   receiveImg: 3, //按压播放语音动画
   voiceNum: 2, //按压录音时效果图
   config: app.globalData.apiUrl,//demo接口
  },
  //长按读语音
  longPress() {
   var that = this;
   that.setData({
    voiceNum: 1,
    showTalk: true
   });
   that.animationTalk();
   var url = that.data.config;
   wx.startRecord({
    success(res) {
     const tempFilePath = res.tempFilePath; //录音成功后的文件
     wx.saveFile({
      tempFilePath: tempFilePath, //保存文件到本地并生成临时路径
      success(res) {
       wx.uploadFile({   //上传语音文件到服务器
        url: url,
        filePath: res.savedFilePath,
        name: 'file',
        formData: {
         token: that.data.token,
         name: 'file'
        },
        success(res) {
         that.setData({
          voiceUrl: JSON.parse(res.data).file_url
         })
         that.receivePage() //校验语音正确率,此步骤未贴出
        }
       })
      }
     })
    }
   })
  },
  // 播放录音动画
  animationTalk() {
   var that = this;
   if (!that.data.showTalk) {
    that.setData({
     receiveImg: 1
    });
    clearTimeout(playTalk)
   } else {
    switch (that.data.receiveImg) {
     case 1:
      that.setData({
       receiveImg: 2
      })
      break
     case 2:
      that.setData({
       receiveImg: 3
      })
      break
     case 3:
      that.setData({
       receiveImg: 1
      })
      break
    }
    setTimeout(function () {
     that.animationTalk()
    }, 500)
   }
  },
  // 录音结束
  endTouch() {
   var that = this;
   wx.stopRecord();
   that.setData({
    voiceNum: 2,
    showTalk: false,
   })
  },
 })

写在之后

通过this.setData来制造动画事件仅仅适合项目中的简单动画效果,如若要完成其他动画特效,如我们胡建的中秋博饼的动画,则需要使用更为强大的css3中的动画效果,这一点小程序的支持也是十分给力的。

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
返回页面顶部top按钮通过锚点实现(自写)
Aug 30 Javascript
TypeError document.getElementById(...) is null错误原因
May 18 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
May 29 Javascript
node-http-proxy修改响应结果实例代码
Jun 06 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
JS实现身份证输入框的输入效果
Aug 21 Javascript
新手vue构建单页面应用实例代码
Sep 18 Javascript
shiro授权的实现原理
Sep 21 Javascript
vue实现验证码输入框组件
Dec 14 Javascript
JavaScript实现求最大公共子串的方法
Feb 03 Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 jQuery
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 jQuery
vue+egg+jwt实现登录验证的示例代码
May 18 #Javascript
egg.js的基本使用和调用数据库的方法示例
May 18 #Javascript
inquirer.js一个用户与命令行交互的工具详解
May 18 #Javascript
webpack 代码分离优化快速指北
May 18 #Javascript
如何实现小程序tab栏下划线动画效果
May 18 #Javascript
微信小程序结合Storage实现搜索历史效果
May 18 #Javascript
Fetch超时设置与终止请求详解
May 18 #Javascript
You might like
建立文件交换功能的脚本(一)
2006/10/09 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
javascript中函数作为参数调用的方法
2015/02/09 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
物业经理自我鉴定
2014/03/03 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
司机岗位职责
2015/02/04 职场文书
离婚被告代理词
2015/05/23 职场文书
企业法律事务工作总结
2015/08/11 职场文书
团委副书记工作总结
2015/08/14 职场文书
python文件目录操作之os模块
2021/05/08 Python
MySQL 如何限制一张表的记录数
2021/09/14 MySQL