小程序中实现录音功能(按住录制上滑取消)

1.template文本,提供一个按住录制的按钮

<view class="tip-touchmove" wx:if="{{showCancelType==2}}">    上滑取消</view><view class="tip-touchmove" wx:if="{{showCancelType==3}}">    松开手指,取消录音</view>
<view class="voice-tool" catch:touchend="onTouchEnd" bind:touchstart="onTouchStart"
                  bind:longpress="onLongpress" catch:touchmove="onTouchMove">
                <view class="tool-text">按住说话录音</view>
            </view>

2.script文本,

recordInit---录音权限是否开启
duration---录音的有效时长
onTouchStart(e) {
                this.$apply();
                if (!this.recordInit) {
                    this.judgeRecord();
                    return false;
                }
            },
            onLongpress(e) {
                if (!this.recordInit) {
                    return false;
                }          //在这里处理录音开始之后页面上的显示效果
                this.$apply();
                const RecorderManager = wx.getRecorderManager();
                RecorderManager.onStart((res) => {
                    console.log(‘开始录音了‘)
                    this.recording = true;
                    this.startTime = new Date().getTime();
                    this.vInterval = setInterval(()=>{
                        let duration = (new Date().getTime() - this.startTime)/1000;//秒
                        this.duration = parseInt(duration) + ‘′‘ + parseInt((parseFloat(duration) -
                            parseInt(duration)) * 100) + "″";
                        this.widthPersent = ((duration/60)*100) + ‘%‘;
                        this.$apply();
                    }, 60);
                    this.$apply();
                })
                RecorderManager.onStop((res) => {
                    console.log(‘结束录音了‘, res);
                   //这里处理录音结束之后的显示效果this.$apply();
                    if (this.showCancelType == 3) {
                        this.duration= ‘00′00″‘;
                        this.startTime= ‘‘;
                        this.widthPersent= ‘0%‘;
                        this.showCancelType = 1;
                        clearInterval(this.vInterval)
                        this.$apply();
                    }else {
                        this.tempFilePath = res.tempFilePath;
                        this.recording = false;
                        clearInterval(this.vInterval)
                        this.$apply();
                        let duration = Math.ceil(res.duration/1000);
                        //这里进行录音结束之后的下一步操作this.showCancelType = 1;
                        this.$apply();
                    }

                });
                RecorderManager.start({
                    duration: 60000,
                    format: ‘mp3‘
                });
                this.startPageY = e.touches[0].clientY;
                this.showCancelType = 2;
                this.$apply();
            },
            onTouchMove(e) {
                this.recording = true;
                if (this.startPageY - e.touches[0].clientY > 50) {
                    //松开手指
                    this.showCancelType = 3;
                } else {
                    //上划取消
                    this.showCancelType = 2;
                }
                this.$apply();
                console.log(‘onTouchMove‘);
            },
            onTouchEnd() {
                console.log(‘onTouchEnd‘);
                const RecorderManager = wx.getRecorderManager();
                RecorderManager.stop();

            },

原文地址:https://www.cnblogs.com/fairy62/p/12612176.html

时间: 2024-11-12 19:53:39

小程序中实现录音功能(按住录制上滑取消)的相关文章

WePY 在手机充值小程序中的应用与实践

wepyjs 发布了两个月了,中间经历了很多版本更新,也慢慢开始有一些用户选择 wepyjs 作为开发框架来开发小程序,比如一些线上小程序. 以及一些来自网上的 wepyjs 的相关资源: demo源码: one,图书管理系统 组件:图表控件 因此我也将手机充值小程序在开发过程中 wepyjs 的应用心得分享出来,可以参照对比与传统小程序开发上的差异. 说明:本文不涉及到 wepyjs 的使用与说明,如果需要请参看我的另一篇文章 "打造小程序组件化开发框架" 或直接参看wepyjs 项

微信小程序中target与currentTarget

如有错误,请纠出,大家一起进步!!! target在事件流的目标阶段:currentTarget在事件流的捕获,目标及冒泡阶段.但事件流处于目标阶段,target与currentTarget指向一样, 而当处于捕获和冒泡阶段的时候,target指向被单击的对象而currentTarget指向当前事件活动的对象.在微信小程序中也可总结为:target指向发生事件的组件,currentTarget指向绑定事件的组件. 下面请看例子: text.wxml: <view class="view1&

微信小程序中的 hover-class

微信小程序中,可以用 hover-class 属性来指定元素的点击态效果.但是在在使用中要注意,大部分组件是不支持该属性的. 目前支持 hover-class 属性的组件有三个:view.button.navigator. 不支持 hover-class 属性的组件,同时也不支持 hover-stop-propagation.hover-start-time.hover-stay-time 这三个属性. 使用方法: <view hover-class="bg_red">这是

微信小程序中的单位

vw:viewpoint width,视窗宽度,1vw等于视窗宽度的1%. vh:viewpoint height,视窗高度,1vh等于视窗高度的1%. rpx:rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应.规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素. 微信小程序也支持rem尺寸单位,rem和rpx的换算关系:rem: 规

在微信小程序中使用redux

本文主要讲述,在微信小程序中如何使用redux DEMO 需要解决的问题 如何在小程序中引入redux状态管理库,及它相关的插件? 微信小程序没有清晰的异步api,便于thunkMiddleware处理异步请求(异步操作),如何解决? 如何正确使用store的三大核心方法(getStore dispatch subscribe)? redux并不是react专属,所以他可以在任何地方使用,小程序也不例外.解决上面三个问题就可以了. 问题一: 如何在小程序中引入redux状态管理库,及它相关的插件

小程序中require分装问题

在pages同层文件夹中建一个service的文件夹,再建立一个http.js的文件,以下是http.js代码 // 项目请求中业务域名 var rootDocment = 'http://devwx.golfgreenshow.com/'; // http头部文件,可以根据个人需要进行修改  var header = { 'Accept': 'application/json', 'content-type': 'application/json', 'Authorization': null

在微信小程序中使用LeanCloud(一)

之前学习了微信小程序前端,使用到LeanCloud线上数据库 [传送门].作为一个前端开发人员,了解后端及数据库是学习工作的需要. LeanCloud直接登录,未注册直接创建账户.它是一款免费的线上数据库(开发版免费).适用于一些想自己写微信小程序前端但不太会后端的开发者学习用.本篇文章涉及数据存储服务(增删查改). 首先,下载一个JavaScript-sdk :av-weapp-min.js[下载链接],它是在微信小程序中使用此数据库的关键文件.下载之后,保存至项目路径,这里以'/libs/a

浅谈高大上的微信小程序中渲染html内容—技术分享

大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxParse 小程序刚上线那会儿,是无法直接渲染HTML内容的,于是就诞生了一个叫做「 wxParse 」的库.它的原理就是把HTML代码解析成树结构的数据,再通过小程序的模板把该数据渲染出来. rich-text 前端精品教程:百度网盘下载 后来,小程序增加了「rich-text」组件用于展示富文本内

微信小程序中转义字符的处理

在微信小程序开发过程中,有时候会用到常用的一些特殊字符如:'<'.'>'.'&'.'空格'等,微信小程序同样支持对转义字符的处理,下面提供两种方法用来处理微信小程序中转义字符的处理. 1.官方API调用这种方式,我们直接在wxml布局文件中,直接调用相关特殊符号的转义字符会无效,原因是小程序的text文本控件的decode属性没有打开导致的,看下文档说明: 从文档中,我们可以发现,decode属性默认为false,不会解析我们的特殊字符,我们通过设置decode属性为true,并且调用