vue-music关于Player播放器组件详解

yizhihongxing

vue-music关于Player播放器组件详解

Vue-music是一款基于Vue.js的音乐WebApp,它的开源代码也被广泛使用于其他Vue项目中。其Player播放器组件是整个应用中最核心的组件之一,本文将对其进行详细的解析和介绍。

功能模块

Player播放器组件具有以下功能模块:

  1. 播放、暂停、上一曲、下一曲等基本音乐播放操作;
  2. 歌曲封面、歌词、进度条、音量控制、收藏等音乐播放器涉及到的主要UI展示元素;
  3. 播放列表的切换、添加、删除等操作;
  4. 微信分享和收藏功能。

组件结构

Player播放器组件的结构如下:

<template>
  <div class="player">
    <div class="header">
      <router-link tag="div" to="/search" class="icon search-icon"></router-link>
      <span class="title">{{ currentSong.name }}</span>
      <span class="subtitle">{{ currentSong.singer }}</span>
    </div>
    <div class="content">
      <div class="cd-wrapper">
        <div class="cd"
             :class="playing ? 'play' : 'pause'"
             ref="cd">
          <img class="image" :src="currentSong.image" alt="">
          <div class="playing-icon" :class="{'pause' : !playing}">
            <i class="icon-mini-mini-disc"></i>
          </div>
        </div>
      </div>
      <div class="lyric-wrapper">
        <div class="lyric">
          <div class="text-wrapper"
               ref="textWrapper">
            <div class="lines"
                 :style="{'transform' : `translateY(${translateY}px)`}"
                 ref="lines">
              <p class="text-line"
                 :class="{'current':lineNum === index}"
                 v-for="(item,index) in lyricArr">{{item.txt}}</p>
            </div>
          </div>
        </div>
      </div>
      <div class="player-panel">
        <div class="time">
          <span class="current-time">{{ formatTime(currentTime) }}</span>
          <span class="time-bar">
            <progress :value="currentTime" :max="duration"></progress>
          </span>
          <span class="total-time">{{ formatTime(duration) }}</span>
        </div>
        <div class="play-mode"
             @click="changeMode">
          <i class="icon-mode-{{mode}}"></i>
        </div>
        <div class="btn-wrapper">
          <div class="btn like"
               :class="{'active':likeList[currentSong.id]}"
               @click="toggleLike">
            <i class="icon-like"></i>
          </div>
          <div class="btn prev" @click="prev">
            <i class="icon-prev"></i>
          </div>
          <div class="btn play" @click="togglePlaying">
            <i class="icon-pause"
               v-if="playing"></i>
            <i class="icon-play"
               v-else></i>
          </div>
          <div class="btn next" @click="next">
            <i class="icon-next"></i>
          </div>
          <div class="btn list"
               @click="showList = true">
            <i class="icon-list"></i>
          </div>
        </div>
      </div>
    </div>
    <div class="list-mask"
         :class="{'hide': !showList}"
         @click="showList = false">
      <div class="list-wrapper">
        <div class="list-header">
          <h1>播放列表</h1>
          <div class="close" @click="showList = false">
            <i class="icon-cross"></i>
          </div>
        </div>
        <div class="list-content">
          <ul>
            <li :class="{'active': song.id === currentSong.id}" v-for="song in playList" :key="song.id" @click="selectSong(song)">
              <h2>{{ song.name }}</h2>
              <p>{{ song.singer }}</p>
            </li>
          </ul>
        </div>
      </div>
    </div>
  </div>
</template>

Player播放器组件由一个主要的div容器和多个子组件构成,主要展示了音乐播放器的UI界面,其中最重要的是cdlyric两个子组件。cd组件中展示了当前播放歌曲的封面图片,并按照播放状态进行旋转;lyric组件负责展示当前播放歌曲的歌词。

组件属性

Player播放器组件接受一些属性,例如currentSong表示当前播放的歌曲、playing表示当前是否正在播放、playList表示当前播放列表等等。

props: {
  currentSong: {
    type: Object,
    default() {
      return {}
    }
  },
  playing: {
    type: Boolean,
    default: true
  },
  playList: {
    type: Array,
    default() {
      return []
    }
  },
  mode: {
    type: Number,
    default: playMode.sequence
  }
}

组件方法

Player播放器组件包含许多方法,下面介绍其中几个。

togglePlaying

当用户点击播放按钮时,togglePlaying这个方法被调用,用于切换播放状态。当播放状态为playing时,点击效果为暂停;反之,点击效果为播放。

togglePlaying() {
  this.$emit('togglePlaying')
}

changeduration

该方法是当用户切换歌曲时,更新歌曲总时长的方法。

changeDuration(duration) {
  this.duration = duration
}

changeCurrentTime

该方法是当用户调整歌曲进度条时,更新当前播放时长的方法。

changeCurrentTime(currentTime) {
  this.currentTime = currentTime
}

changeMode

该方法是当用户点击播放模式按钮时,切换播放模式的方法。本App提供的播放模式有顺序播放、单曲循环、随机播放三种,每次点击播放模式按钮即可在三种播放模式之间循环切换。

changeMode() {
  let mode = (this.mode + 1) % 3
  this.$emit('changeMode', mode)
}

示例说明

示例1:设置当前播放歌曲的时长和总时长。

<player
  :current-song="currentSong"
  :playing="playing"
  :play-list="playList"
  :mode="mode"
  @togglePlaying="togglePlaying"
  @changeMode="changeMode"
  @changeDuration="changeDuration"
  @changeCurrentTime="changeCurrentTime"
></player>

示例2:切换播放模式。

changeMode(mode) {
  this.mode = mode
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue-music关于Player播放器组件详解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js+canvas实现网站背景鼠标吸附线条动画

    实现网站背景鼠标吸附线条动画可以使用js+canvas技术实现,具体过程如下: 设计思路 使用canvas创建一个全屏的画布。 监听鼠标移动事件,实时获取鼠标的坐标位置。 创建一个数组存储所有的点,每个点有一定的速度,通过一个定时器不断的移动这些点,形成连续的轨迹。 每一个点的位置在不停地变动,需要实时计算每个点与鼠标的距离,并在一定范围内绘制一条线条连接两…

    JavaScript 2023年6月11日
    00
  • element中el-form-item属性prop踩坑

    el-form-item 是 ElementUI 中用于包装表单元素的组件,通常用于和 el-form 配合实现表单功能。el-form-item 提供了一个 prop 属性,用于指定表单项对应数据对象中对应属性的名称。 但是在使用 prop 属性时,需要注意一些坑点: prop 值必须与表单数据对象中的属性名称保持一致,否则表单项将无法与数据对象进行双向绑…

    JavaScript 2023年6月10日
    00
  • 详解mvc使用JsonResult返回Json数据

    下面是详解mvc使用JsonResult返回Json数据的攻略: 步骤一:编写代码 在MVC的控制器中定义一个方法,例如: public JsonResult GetStudent() { var student = new Student { Name = "小明", Age = 18, Gender = "Male&quot…

    JavaScript 2023年5月27日
    00
  • JS实现数组/对象数组删除其中某一项

    如果要在JavaScript中删除数组或对象数组中的某一项,可以按照以下步骤进行。 删除数组中的某一项 1.找到要删除的项的索引 要删除数组中的某一项,首先需要找到该项的索引。可以使用indexOf()方法来查找该项在数组中的索引。例如,以下代码查找数字数组中的项 “3” 的索引: const arr = [1, 2, 3, 4]; const index …

    JavaScript 2023年5月27日
    00
  • 如何用JS/HTML将时间戳转换为“xx天前”的形式

    将时间戳转换为类似“xx天前”的形式是一个常见的需求。下面我来详细讲解如何用JS/HTML实现这个功能。 第一步:获取当前时间戳和目标时间戳 JavaScript内置了一个用于获取当前时间戳的方法,即: var now = Date.now(); 如果要将一个日期字符串转换为时间戳,可使用Date.parse方法,例如: var target = Date.…

    JavaScript 2023年5月27日
    00
  • js全选实现和判断是否有复选框选中的方法

    JS全选的实现可以分为两个部分:全选和全不选。下面是具体的实现方法和示例说明: 一、全选/全不选 1.1 HTML代码 在HTML代码中需要添加一个全选/全不选的复选框,和其他需要操作的复选框: <input type="checkbox" id="checkAll">全选/全不选 <input ty…

    JavaScript 2023年6月10日
    00
  • jQuery插件slicebox实现3D动画图片轮播切换特效

    针对“jQuery插件slicebox实现3D动画图片轮播切换特效”的攻略,我们可以按照以下步骤来进行: 一、引入slicebox插件 在实现3D动画图片轮播切换特效前,首先需要引入slicebox插件及其相关资源文件。可以通过在HTML中引入以下内容来实现: <link rel="stylesheet" href="pa…

    JavaScript 2023年6月11日
    00
  • 对javascript基本对象的属性以及方法的实例介绍

    当我们学习JavaScript时,基本对象(primitive data types)是学习的重点之一。JavaScript中的基本对象有六种:字符串、数值、布尔、null、undefined和Symbol。每种基本对象都有自己的属性和方法,了解它们可以加深我们对JavaScript的理解。下面,我们将详细介绍这六种基本对象的属性和方法。 1. 字符串 属性…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部