赞
踩
关键代码
- <uni-popup ref="popup" type="bottom" background-color="#fff" @change="change">
- <view class="popup-content">
- <view class="audioBox">00:00</view>
- <view class="audios">
- {{audios}}
- </view>
- <view class="models">
- <view class="delAudio">
- 取消
- </view>
- <view class="abtnBox">
- <button class="startBtn" @tap="startRecord" v-if="!audioStatus"></button>
- <button class="stopBtn" @tap="endRecord" v-if="audioStatus">
- <image src="../../static/stop.png" mode="widthFix"></image>
- </button>
- </view>
- <view class="delAudios">
- 取消
- </view>
- </view>
- <!-- <button @tap="files">上传</button> -->
- </view>
- </uni-popup>
部分css(时间久了css没加注释QAQ):
- <style>
- .popup-content {
- padding: 20px;
- }
-
- .audioBox {
- width: 100%;
- padding: 30px 0;
- display: flex;
- justify-content: center;
- align-items: center;
- font-size: 14px;
- color: #505050;
- }
-
- .audios {
- width: 100%;
- font-size: 14px;
- padding: 10px 0;
- color: #505050;
- display: flex;
- justify-content: center;
- align-items: center;
- }
-
- .startBtn {
- width: 46px;
- height: 46px;
- border-radius: 50%;
- background-color: #FF6D4D;
- }
-
- .stopBtn {
- width: 46px;
- height: 46px;
- border-radius: 50%;
- background-color: #fff;
- display: flex;
- justify-content: center;
- align-items: center;
- }
-
- .stopBtn>image {
- width: 100%;
- }
-
- .abtnBox {
- width: 50px;
- height: 50px;
- border-radius: 50%;
- border: 1px solid #FF6D4D;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- </style>
关键实现代码
- const imgInfo = reactive({
- imgs: ''
- })
- innerAudioContext.autoplay = true;
- const audios = ref('点击开始录音')
- const player = ref(false)
- const audioShow = ref(false)
-
- const startRecord = () => {
- console.log('开始录音');
- audios.value = '正在录音'
- audioStatus.value = true
- player.value = false
- recorderManager.start({format:'mp3'});
- console.log(voicePath.value);
- }
- const endRecord = () => {
- console.log('录音结束');
- audios.value = '点击开始录音'
- audioStatus.value = false
- player.value = true
- recorderManager.stop();
- console.log(voicePath.value);
-
- recorderManager.onStop(function(res) {
- console.log('recorder stop' + JSON.stringify(res));
- voicePath.value = res.tempFilePath;
- files()
- });
- console.log(voicePath.value);
-
- }
- const playVoice = () => {
- console.log('播放录音');
- if (voicePath.value) {
- innerAudioContext.src = voicePath.value;
- innerAudioContext.play();
- }
- console.log(voicePath.value);
- }
-
-
- const files = () => {
- console.log('上传');
- console.log(voicePath.value);
- uni.uploadFile({
- url: 'https://xxxxx/Fileimg/file', //仅为示例,并非真实接口地址。
- filePath: voicePath.value,
- name: 'file',
- formData: {
- 'user': 'test',
- },
- success: function(res) {
- console.log(res.data);
- if(res.data.code == 1){
- console.log(res.data);
- imgInfo.imgs = JSON.parse(res.data)
- console.log(imgInfo.imgs.data.url);
- wx.showToast({
- title: '上传中',
- icon: 'loading',
- duration: 700
- })
- setTimeout(()=>{
- wx.showToast({
- title: '上传成功',
- icon: 'success',
- duration: 700
- })
- audioShow.value = true
- popup.value?.close()
- },700)
- }else{
- wx.showToast({
- title: '网络错误',
- icon: 'error',
- duration: 100
- })
- audioShow.value = true
- popup.value?.close()
- }
-
- }
- });
- }
总结一下:主要实现靠官方提供的api,在官网查就有,本篇仅为本人日常所用技术的总结,不做教学(狗头)
ヾ( ̄▽ ̄)Bye~Bye~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。