使用JS的input框实现音频文件的上传与播放功能

 更新时间:2024年06月19日 10:08:33   作者:WebWarrior  
最近的系统加的功能是越来越多了,前两天老板又让实现一个录音上传的功能,可以点击播放按钮打开音频播放器,点击暂停按钮暂定播放,想了想决定使用input框的file类型加上接收的参数为audio来实现此功能,感兴趣的朋友可以参考下

序言:最近的系统加的功能是越来越多了,前两天老板又让实现一个录音上传的功能,可以点击播放按钮打开音频播放器,点击暂停按钮暂定播放。想了想决定使用input框的file类型加上接收的参数为audio来实现此功能。

1.考虑到input的原生界面不好看,在按照设计稿搭建好页面后,在添加录音或者音频的同一层写入input框,使用定位和透明度opacity为0加上z-index使其浮在你的设计稿添加录音上方,如图一及下方代码:

解释:

  • type="file" 带有 type="file" 的 元素允许用户可以从他们的设备中选择一个或多个文件。
  • accept="audio/" 定义了文件 input 应该接受的文件类型,字符串 audio/,表示“任何音频文件”。
  • @change="uploadAudio",表示点击上传文件确认键后执行的操作。

<div class="voice"  style:"position:relative">      
  <input type="file" accept="audio/*" id="audioUpload" class="audioUpload" @change="uploadAudio">
   <div class="add">
       <img src="png" alt="" >
       <span>添加音频</span>
   </div>
</div>
 
<style>
 
.audioUpload{
       position: absolute;
       right: ?px;
       top: ?px;
       height: 22px;
       z-index: 20;
       opacity: 0;
      }
 
</style>

2.这时input可以进行点击弹出上传界面之后,开始实现录音播放功能。使用的元素是audio,这里我也是把原生的样式给隐藏掉了,使用设计稿上面的点击播放和暂停的按钮去实现录音的播放和暂停。

<audio ref="audioPlay" :src="audioSrc"  style="opacity: 0;position: absolute;left: -999px;"@ended="onAudioEnded">

流程:

  • 如果是vue框架进行的开发,这里使用vue3进行演示,首先定义audio内的一些内容:
let audioSrc = ref('') //这里为你的音频文件路径
const audioPlay = ref(null)
  • 页面初始化时渲染dom:
onMounted(() => {
  audioPlay.value = document.querySelector('audio');
});
  • 在图标上使用点击事件实现音频播放和暂停(这里使用nextTick的原因是nextTick所指定的回调会在浏览器更新DOM完毕之后再执行):
//点击播放
function beginPlay(){
    nextTick(() => {
      audioPlay.value[0].play();
    })
}
//点击暂停
function stopPlay(){
  audioPlay.value[0].pause()
}

结语:到这里就可以点击图标实现音频的播放和暂停。

优化:

既然公司要求上传录音或者音频,那肯定会给你上传音频的接口和音频列表的接口,所以这时候,页面上就不止一个录音文件。

并且我们的播放和暂停图标肯定是通过接口传来的列表数据渲染出来的,那么就出现一个问题,点击播放的时候所有列表的播放图标全部都会切换到暂停图标,如何做到点击第一个音频文件只让第一个的播放图标改变其他的图标不改变呢?

代码实现:

注意:最好不要把audio也放进列表的渲染中,这样页面会有多个audio的文件,最后你需要forEach你的audio存的文件,解决办法是放在需要循环列表的同一级上。

1.在你渲染好音频列表接口后,你的页面可能会有这两个图标(播放图标和暂停图标。点击播放图标后音频开始播放,图标变为暂停):

<img src="../assets/images/voiceBegin.png" alt="" v-if="!isPlaying || activeId !== item.id" @click="beginPlay(item.voice,item.id)">

<img src="../assets/images/voicePause.png" alt="" v-if="isPlaying && activeId === item.id" @click="stopPlay(item.id)">

这里使用 isPlaying 和 activeId 两个变量控制图标的显隐。item.voice就是你的音频列表接口的音频路径, 如下代码和图二:

const isPlaying = ref(false)
let activeId =  ref(null)
 
//开始播放
function beginPlay(url,id){
    isPlaying.value = true
    activeId.value = id
    audioSrc.value  = url
    nextTick(() => {
      audioPlay.value[0].play();
    })
}
 
//暂停播放
function stopPlay(id){
  audioPlay.value[0].pause()
  isPlaying.value = false
  activeId.value = null
}
 
//录音播放结束后图标自动跳转到播放图标
function onAudioEnded(){
  isPlaying.value = false
  activeId.value = null
}

总结:以上就是使用input框实现音频文件的上传与播放实现的所有代码和逻辑,实现点击播放图标后音频开始播放,图标变为暂停等操作。

以上就是使用JS的input框实现音频文件的上传与播放功能的详细内容,更多关于JS input音频上传与传播的资料请关注脚本之家其它相关文章!

相关文章

  • js实现简易计数器功能

    js实现简易计数器功能

    这篇文章主要为大家详细介绍了js实现计数器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 利用Javascript裁剪图片并存储的简单实现

    利用Javascript裁剪图片并存储的简单实现

    裁剪图片对我们来说是再熟悉不过的了,最近工作中就又遇到了这个需求,所以想着干脆整理下来,方法大家和自己在需要的时候参考学习,所以这篇文章主要介绍了利用Javascript裁剪图片并存储的简单实现,后端PHP处理我用的是THINKPHP框架,需要的朋友可以参考下。
    2017-03-03
  • 基于JavaScript实现百度搜索框效果

    基于JavaScript实现百度搜索框效果

    这篇文章主要为大家详细介绍了基于JavaScript实现百度搜索框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • JavaScript判断空值、NULL、undefined的方法对比

    JavaScript判断空值、NULL、undefined的方法对比

    JavaScript五种原始类型(boolean、number、string、null、undefined)中的一种。在鉴别JavaScript原始类型的时候我们会用到typeof操作符。Typeof操作符可用于字符串、数字、布尔和未定义类型。
    2022-12-12
  • JS按钮闪烁功能的实现代码

    JS按钮闪烁功能的实现代码

    js按钮闪烁功能的实现代码分为html和js两部分代码,具体实现代码大家参考下本文
    2017-07-07
  • 一句话JavaScript表单验证代码

    一句话JavaScript表单验证代码

    纯属技术交流,在实际应用中不建议那么做。建议js加载比较好。
    2009-08-08
  • uniapp实现微信公众号支付的方法步骤

    uniapp实现微信公众号支付的方法步骤

    本文主要介绍了uniapp实现微信公众号支付的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • JavaScript判断变量是否为空的自定义函数分享

    JavaScript判断变量是否为空的自定义函数分享

    这篇文章主要介绍了JavaScript判断变量是否为空的自定义函数分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-01-01
  • 兼容FF和IE的动态table示例自写

    兼容FF和IE的动态table示例自写

    Js实现的动态增加表格的文章有很多,但大多数都不兼容FF和IE,于是手写了一个,经测试效果还不错,特此与大家分享,感兴趣的朋友不要错过
    2013-10-10
  • JavaScript实现的CRC32函数示例

    JavaScript实现的CRC32函数示例

    这篇文章主要介绍了JavaScript实现的CRC32函数,简单介绍了CRC32函数的概念和功能,并给出实例形式分析了CRC32函数的javascript实现与使用方法,需要的朋友可以参考下
    2016-11-11

最新评论