您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“小程序如何實現(xiàn)長按錄音,上劃取消發(fā)送功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“小程序如何實現(xiàn)長按錄音,上劃取消發(fā)送功能”吧!
微信小程序事件接口:
//html部分 class部分只是控制樣式 與功能無關(guān)分析:長按錄音需要longpress事件,松開發(fā)送需要touchend事件,上滑取消發(fā)送需要touchmove事件。由此可有以下html代碼
<div class="input weui-grid" hover-class="weui-grid_active" :class="record.type" @longpress="handleRecordStart" @touchmove="handleTouchMove" @touchend="handleRecordStop"><image class="weui-grid__icon" :src="record.iconPath"/><div class="weui-grid__label">{{record.text}}</div> </div>
舊版的小程序錄音接口wx.startRecord和wx.stopRecord在1.6.0版本后不再維護(hù)了,所以使用其建議的wx.getRecordManager接口。
注意:使用wx.getRecordManager接口的話,應(yīng)調(diào)用相應(yīng)的音頻控制接口wx.createInnerAudioContext()來播放和控制錄音.
data(){ record: { text: "長按錄音", type: "record", iconPath: require("@/../static/icons/record.png"), handler: this.handleRecordStart }, //與錄音相關(guān)的數(shù)據(jù)結(jié)構(gòu) recorderManager: wx.getRecorderManager(), //錄音管理上下文 startPoint: {}, //記錄長按錄音開始點信息,用于后面計算滑動距離。 sendLock: true, //發(fā)送鎖,當(dāng)為true時上鎖,false時解鎖發(fā)送},
onLoad(){ this.recorderManager.onStop(res => { if (this.sendLock) { //上鎖不發(fā)送 } else {//解鎖發(fā)送,發(fā)送網(wǎng)絡(luò)請求 if (res.duration < 1000) wx.showToast({ title: "錄音時間太短", icon: "none", duration: 1000 }); else this.contents = [...this.contents,{ type: "record", content: res }];//contents是存儲錄音結(jié)束后的數(shù)據(jù)結(jié)構(gòu),用于渲染. } }); }
在這個方法中需要做的事:
記錄長按的點信息,用于后面計算手指滑動的距離,實現(xiàn)上滑取消發(fā)送.
做一些界面樣式的控制.
開始錄音
handleRecordStart(e) { //longpress時觸發(fā) this.startPoint = e.touches[0];//記錄長按時開始點信息,后面用于計算上劃取消時手指滑動的距離。 this.record = {//修改錄音數(shù)據(jù)結(jié)構(gòu),此時錄音按鈕樣式會發(fā)生變化。 text: "松開發(fā)送", type: "recording", iconPath: require("@/../static/icons/recording.png"), handler: this.handleRecordStart }; this.recorderManager.start();//開始錄音 wx.showToast({ title: "正在錄音,上劃取消發(fā)送", icon: "none", duration: 60000//先定義個60秒,后面可以手動調(diào)用wx.hideToast()隱藏 }); this.sendLock = false;//長按時是不上鎖的。 },
在這個方法中需要做的事:
做一些樣式的控制.
結(jié)束錄音.
handleRecordStop() { // touchend(手指松開)時觸發(fā) this.record = {//復(fù)原在start方法中修改的錄音的數(shù)據(jù)結(jié)構(gòu) text: "長按錄音", type: "record", iconPath: require("@/../static/icons/record.png"), handler: this.handleRecordStart }; wx.hideToast();//結(jié)束錄音、隱藏Toast提示框 this.recorderManager.stop();//結(jié)束錄音 }
在這個方法中需要做的事:
計算手指上滑的距離
根據(jù)距離判斷是否需要取消發(fā)送
如果取消發(fā)送,最重要的是this.sendLock = true,上鎖不發(fā)送
handleTouchMove(e) { //touchmove時觸發(fā) var moveLenght = e.touches[e.touches.length - 1].clientY - this.startPoint.clientY; //移動距離 if (Math.abs(moveLenght) > 50) { wx.showToast({ title: "松開手指,取消發(fā)送", icon: "none", duration: 60000 }); this.sendLock = true;//觸發(fā)了上滑取消發(fā)送,上鎖 } else { wx.showToast({ title: "正在錄音,上劃取消發(fā)送", icon: "none", duration: 60000 }); this.sendLock = false;//上劃距離不足,依然可以發(fā)送,不上鎖 } }, }
到此,相信大家對“小程序如何實現(xiàn)長按錄音,上劃取消發(fā)送功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。