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


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 相关文章推荐
判断是否输入完毕再激活提交按钮
Jun 26 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
Mar 20 Javascript
框架页面高度自动刷新的Javascript脚本
Nov 01 Javascript
fullPage.js和CSS3实现全屏滚动效果
May 05 Javascript
Vue2.0 多 Tab切换组件的封装实例
Jul 28 Javascript
jQuery length 和 size()区别总结
Apr 26 jQuery
深入了解javascript 数组的sort方法
Jun 01 Javascript
webpack4.x下babel的安装、配置及使用详解
Mar 07 Javascript
JavaScript箭头函数中的this详解
Jun 19 Javascript
vue 自定义右键样式的实例代码
Nov 06 Javascript
vue简单封装axios插件和接口的统一管理操作示例
Feb 02 Javascript
解决vue一个页面中复用同一个echarts组件的问题
Jul 19 Javascript
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
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
自己的js工具 Cookie 封装
2009/08/21 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
Node.js + Redis Sorted Set实现任务队列
2016/09/19 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
Python 的内置字符串方法小结
2016/03/15 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Python通过文本和图片生成词云图
2020/05/21 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
企业精细化管理实施方案
2014/03/23 职场文书
合作意向协议书范本
2014/03/31 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
一年级学生评语
2014/04/23 职场文书
学习保证书100字
2015/02/26 职场文书
民事上诉状范文
2015/05/22 职场文书
2016年元旦致辞
2015/08/01 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
Python 如何安装Selenium
2021/05/06 Python
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
redis protocol通信协议及使用详解
2022/07/15 Redis