欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-01-07 21:47:52
前言 这个简单的麦克风demo的创意是来源于“包你说”中的录音效果,实现的方式其实也并不难,但对于小程序中的简易动画的使用的确很实用。 效果 先来看个de...

前言

这个简单的麦克风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中的动画效果,这一点小程序的支持也是十分给力的。

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

总结

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