• Vue实现mp3音乐播放及动态进度条


    今天碰到一个Vue点击mp3播放及进度条动态走动的小功能,记录一下:

    首先是通过HTML5 audio标签引入音频:

    <template>
      <div class="x-footer">
        <div class="x-meida">
          <div class="x-meida-img">
            <img :src="footer.imgUrl" />
          </div>
          <div class="x-media-name">
            <h3>{{footer.title}}</h3>
            <h5>{{footer.subTitle}}</h5>
          </div>
        </div>
        <div class="x-media-btn" @click="changeStart">
          <audio :src="footer.songs" id="musicMp3" autoplay="" controls=""></audio>
          <img :src="isStore ? footer.startIcon : footer.stopIcon" />
        </div>
        <div class="x-media-menu">
          <img src="../assets/img/svg/menu.svg" />
        </div>
        <div class="x-mp3-progress">
          <div class="x-now-progress" :style="{ progress}"></div>
        </div>
      </div>
    </template>
    

    在data中静态定义我们需要的数据及定义调用点击方法,并获取当前mp3的时间长短,通过定时器转换成百分比实现进度条的播放走动:

    export default {
      props: ['link'],
      data () {
        return {
          isStore: true,
          progress: '0%',
          footer: {
            title: '一条狗的使命',
            subTitle: '俗事杂谈论坛直播',
            startIcon: './static/img/start.svg',
            stopIcon: './static/img/stop.svg',
            imgUrl: './static/img/header1.jpg',
            songs: './static/music/aixiangsui.mp3'
          }
        }
      },
      mounted: function () {
        document.getElementById('musicMp3').pause()
        this.changeProgress()
      },
      methods: {
        changeStart: function () {
          this.isStore = !this.isStore
          const musicMp3 = document.getElementById('musicMp3')
          if (!this.isStore) {
            musicMp3.play()
          } else {
            musicMp3.pause()
          }
        },
        changeProgress: function () {
          const musicMp3 = document.getElementById('musicMp3')
          const timer = setInterval(() => {
            const numbers = musicMp3.currentTime / musicMp3.duration
            let perNumber = (numbers * 100).toFixed(2)
            if (perNumber >= 100) {
              this.isStore = true
              this.progress = 0
              clearInterval(timer)
            }
            perNumber += '%'
            this.progress = perNumber
          }, 30)
        }
      }
    }
    

    给添加的结构定义样式(css调用有一些是定义的全局变量,需要注意):

    .x-footer{
      position: fixed;
      background-color: $primary;
       100%;
      display: flex;
      justify-content: space-between;
      bottom: 0;
      left: 0;
      padding: 20px;
      .x-meida{
        display: inline-flex;
        .x-meida-img{
           88px;
          height: 88px;
          overflow: hidden;
          @include border-radius(5px);
          > img{
            100%;
          }
        }
        .x-media-name{
          padding: 10px 20px;
          color: #ffffff;
          text-align: left;
          > h3{
    
          }
        }
      }
      .x-media-btn{
         56px;
        height: 56px;
        @include border-radius(50%);
        border: 3px solid #ffffff;
        padding: 10px;
        align-self: center;
        audio{
          display: none;
        }
        > img{
           100%;
        }
        }
        .x-media-menu{
          display: inline-flex;
           43px;
          height: 43px;
          align-self: center;
          > img{
             100%;
          }
        }
      }
      .x-mp3-progress{
         100%;
        position: absolute;
        height: 6px;
        overflow: hidden;
        bottom: 0;
        left: 0;
        .x-now-progress{
          position: relative;
          @extend %transition;
          height: 6px;
          background-color: $orange;
        }
      }
    

    这样媒体mp3播放就完成。下面是媒体播放的vue静态项目,如果您没太明白,可以用作参考: https://github.com/mralins/xinfeeFM

  • 相关阅读:
    Andriod ADT v22.6.2版本中在Mainactivity.java中使用fragment_main.xml中TextView控件对象的问题
    SQL学习:查询的用法(1)
    SQL学习:主键,外键,主键表,外键表,数据库的表与表之间的关系;
    HTML基础(2) 格式标签 文本标签
    2013年10月15日数据库学习:约束
    HTML基础(1) 全局架构标签,特殊字符
    2013年10月13日学习:SQL通过命令语句来创建表
    2013年10月13日学习:SQL通过图形化界面创建表
    Tomcat和Nutch的安装
    sqlserver 处理连接池问题
  • 原文地址:https://www.cnblogs.com/a-cat/p/11353316.html
Copyright © 2020-2023  润新知