美文网首页
vue 语音播放

vue 语音播放

作者: 八妹sss | 来源:发表于2019-12-16 14:10 被阅读0次

    应用场景:

    vue开发微信公众号,打卡任务(可发文字、语音、图片),任务详情页,有宝宝的打卡详情信息,存在多条语音的情况。

    思路:

    1、页面上只有一个audio标签,点击不同的语音,动态改变audio 的src即可
    2、页面上的audio标签根据语音数量一致,点击不同的语音播放不同的audio标签(第一条正在播放,点击第二条,那么就需要根据索引或者别的条件关闭第一条,播放第二条)

    实现:

    我这里用的是思路1。
    代码如下:

    html

     <div v-if="info.audios && info.audios.length > 0" class="voice">
       <div class="voice-box">
         <p @click="play(info.audios[0])" class="progress-bar"><span class="schedule"></span></p>
         <p class="time">{{info.audios[0].duration | duration}}</p>
       </div>
     </div>
     <audio id="audio" src="/static/audios/Away.mp3"></audio>
    

    js

    export default {
      props: {
        info: Object,
        imgItemSize: {
          type: String,
          default: '2.06rem'
        }
      } ,
      data () {
        return {
          // 语音播放相关
          currentAudioId: '', // 当前语音的id
          isPlaying: false
        }
      },
      methods: {
        play (info) {
          var audio = document.querySelector('#audio')
          //用于区分点击事件是用来停止播放还是用来播放新的语音
          if (info.id === this.currentAudioId) {
            if (!this.isPlaying) {
              audio.play()
              this.isPlaying = true
            } else {
              audio.pause()
              this.isPlaying = false
            }
          } else {
            this.currentAudioId = info.id
            audio.src = info.url
            audio.play()
            this.isPlaying = true
          }
        }
      },
      filters: {
        duration (val) {
          let time = val / 1000
          let minute = parseInt(time / 60)
          let second = Math.round(time % 60)
          let str = minute > 0 ? `${minute}′${second}′′` : `${second}′′`
          return str
        }
      }
    }
    

    相关文章

      网友评论

          本文标题:vue 语音播放

          本文链接:https://www.haomeiwen.com/subject/gkxdnctx.html