zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    openstack 使用cloud init 和 console-log, nbd或者libguestfs 获取VM中的硬件信息。
    Unity doesn't load, no Launcher, no Dash appears
    ssh 应用
    设计感悟——产品的3个属性
    别让用户发呆—设计中的防呆的6个策略
    用户流失原因调研4步经
    5种方法提高你网站的登录体验
    浅谈当下7个网页设计趋势(转)
    适应各浏览器图片裁剪无刷新上传jQuery插件(转)
    C#操作Excel数据增删改查(转)
  • 原文地址:https://www.cnblogs.com/a-cat/p/11353316.html
Copyright © 2011-2022 走看看