美文网首页
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