vue 音频组件

一、概述

因项目要求,需要做一个音频播放器。

二、demo

test.vue

<template>
  <div>
    <img src="../assets/audio-bg.png" alt="">
    <br>
    <!-- 此处的ref属性,可以很方便的在vue组件中通过 this.$refs.audio获取该dom元素 -->
    <audio ref="audio"
           @pause="onPause"
           @play="onPlay"
           @timeupdate="onTimeupdate"
           @loadedmetadata="onLoadedmetadata"
           src="https://wdd.js.org/element-audio/static/falling-star.mp3"
           controls="controls">

    </audio>

    <!-- 音频播放控件 -->
<!--    <div>-->
<!--      <el-button type="text" @click="startPlayOrPause">{{audio.playing | transPlayPause}}</el-button>-->

<!--      <el-tag type="info">{{ audio.currentTime | formatSecond}}</el-tag>-->

<!--      <el-tag type="info">{{ audio.maxTime | formatSecond}}</el-tag>-->
<!--    </div>-->
  </div>
</template>

<script>

  // 将整数转换成 时:分:秒的格式
  function realFormatSecond(second) {
    var secondType = typeof second

    if (secondType === 'number' || secondType === 'string') {
      second = parseInt(second)

      var hours = Math.floor(second / 3600)
      second = second - hours * 3600
      var mimute = Math.floor(second / 60)
      second = second - mimute * 60

      return hours + ':' + ('0' + mimute).slice(-2) + ':' + ('0' + second).slice(-2)
    } else {
      return '0:00:00'
    }
  }

  export default {
    data () {
      return {
        audio: {
          // 该字段是音频是否处于播放状态的属性
          playing: false,
          // 音频当前播放时长
          currentTime: 0,
          // 音频最大播放时长
          maxTime: 0
        }
      }
    },
    methods: {
      // 控制音频的播放与暂停
      startPlayOrPause () {
        return this.audio.playing ? this.pause() : this.play()
      },
      // 播放音频
      play () {
        this.$refs.audio.play()
      },
      // 暂停音频
      pause () {
        this.$refs.audio.pause()
      },
      // 当音频播放
      onPlay () {
        this.audio.playing = true
      },
      // 当音频暂停
      onPause () {
        this.audio.playing = false
      },
      // 当timeupdate事件大概每秒一次,用来更新音频流的当前播放时间
      onTimeupdate(res) {
        console.log('timeupdate')
        console.log(res)
        this.audio.currentTime = res.target.currentTime
      },
      // 当加载语音流元数据完成后,会触发该事件的回调函数
      // 语音元数据主要是语音的长度之类的数据
      onLoadedmetadata(res) {
        console.log('loadedmetadata')
        console.log(res)
        this.audio.maxTime = parseInt(res.target.duration)
      }
    },
    filters: {
      // 使用组件过滤器来动态改变按钮的显示
      transPlayPause(value) {
        return value ? '暂停' : '播放'
      },
      // 将整数转化成时分秒
      formatSecond(second = 0) {
        return realFormatSecond(second)
      }
    }
  }
</script>

<style>

</style>
View Code

注意:这里有一张背景图片,大家可以从百度中下载。

效果如下:

这里的功能有几个:开始/暂停,显示音频时长,设置音量大小,设置播放倍数。

关于更多代码的解释,请查看下面的参考链接,里面有详细的描述,这里就不在叙述了。

本文参考链接:

https://segmentfault.com/a/1190000012453975

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3可以通过使用`<audio>`标签来实现音频组件。在Vue3中,可以使用`ref`来获取`<audio>`标签的DOM元素,然后通过JavaScript来控制音频的播放、暂停、进度条等功能。 以下是一个简单的Vue3音频组件的示例代码: ```html <template> <div> <audio ref="audio" :src="audioSrc"></audio> <button @click="play">播放</button> <button @click="pause">暂停</button> <div> <span>{{ currentTime }}</span> <input type="range" :value="currentTime" :max="duration" @input="seek"> <span>{{ duration }}</span> </div> </div> </template> <script> import { ref, computed, onMounted } from 'vue'; export default { setup() { const audioRef = ref(null); const audioSrc = 'audio.mp3'; const currentTime = ref(0); const duration = computed(() => { return audioRef.value ? audioRef.value.duration : 0; }); const play = () => { audioRef.value.play(); }; const pause = () => { audioRef.value.pause(); }; const seek = (event) => { audioRef.value.currentTime = event.target.value; }; const updateTime = () => { currentTime.value = audioRef.value.currentTime; }; onMounted(() => { audioRef.value.addEventListener('timeupdate', updateTime); }); return { audioRef, audioSrc, currentTime, duration, play, pause, seek, }; }, }; </script> ``` 在上面的代码中,我们使用了Vue3的`ref`、`computed`和`onMounted`等API来实现音频组件。其中,`audioRef`是通过`ref`获取`<audio>`标签的DOM元素,`audioSrc`是音频文件的路径,`currentTime`是当前播放时间,`duration`是音频总时长。`play`、`pause`和`seek`分别是播放、暂停和拖动进度条的方法。`updateTime`是用来更新当前播放时间的方法,它会在音频播放时自动调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值