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

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日

相关文章

  • java NIO 详解

    Java NIO 详解 Java NIO(New IO)是一种基于缓冲区、非阻塞IO的API集,主要用于替代传统的Java IO API。它可以更高效地处理IO数据,具有更好的扩展性和灵活性,尤其适用于处理大量连接和请求的场景。 在本文中,我们将从以下几个方面对Java NIO进行详细讲解: 缓冲区(Buffer)及其操作 通道(Channel)及其操作 选…

    JavaScript 2023年5月28日
    00
  • JS中数组Array的用法示例介绍

    下面是JS中数组Array的用法示例介绍的完整攻略。 数组定义与初始化 数组定义了一系列变量,可以通过一个变量名获取其中任意一个变量的值。在 JavaScript 中,可以使用以下方式来定义和初始化一个数组: let array = [1, 2, 3, 4, 5]; // 数组里有5个数字 let emptyArray = []; // 定义空数组 数组的基…

    JavaScript 2023年5月27日
    00
  • javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)

    JavaScript中类的定义及其方式 什么是类 类是面向对象编程中的基本概念之一,它是一个抽象的概念,用来描述一个共性的概念或一些具有相同属性和方法的对象的集合。 在ES6之前,JavaScript中并没有类的概念,但是通过函数和构造函数的方式,可以模拟出类的定义和使用。 定义类的方式 1. 使用函数 通过创建一个函数,来模拟出一个类,然后可以使用new关…

    JavaScript 2023年5月27日
    00
  • JS实现的Object数组去重功能示例【数组成员为Object对象】

    下面是讲解“JS实现的Object数组去重功能示例【数组成员为Object对象】”的完整攻略。 一、背景介绍 在实际的开发过程中,我们经常会操作Object数组。而有时候,我们需要对一个Object数组进行去重操作,以避免出现重复数据。接下来,我们将会介绍针对这种情况下的JS实现的Object数组去重功能示例。 二、数组去重算法 去重算法是数组去重的核心,根…

    JavaScript 2023年5月27日
    00
  • javascript 24小时弹出一次的代码(利用cookies)

    针对“javascript 24小时弹出一次的代码(利用cookies)”这个问题,我可以给你讲解一下完整的攻略。 什么是Cookie? 在开始讲解代码前,我们先简要介绍一下Cookie。Cookie是指浏览器保存在用户电脑上的一小段文本信息,一般用来记录用户在访问网站时的一些信息,例如用户名、购物车中的商品等。 Cookie主要有以下属性: 名称:一个唯一…

    JavaScript 2023年6月11日
    00
  • javascript 三种数组复制方法的性能对比

    首先,我们需要了解 Javascript 中有哪些常见的数组复制方法以及它们的性能对比。常见的数组复制方法包括: 使用 slice() 方法复制数组 使用展开运算符 … 进行复制 使用 Array.from() 方法进行复制 接下来,我们将分别介绍这三种方法的具体实现及性能测试。 使用 slice() 方法复制数组 slice() 方法可以从已有的数组中…

    JavaScript 2023年5月27日
    00
  • ES6新特性之解构、参数、模块和记号用法示例

    ES6新特性之解构、参数、模块和记号用法示例 解构 解构是从数组和对象中提取值并对变量进行赋值的语法。它可以让我们写出更简洁、更易读的代码。 数组解构 可以使用方括号和逗号来解构数组。下面是一个例子: const arr = [1, 2, 3, 4]; const [a, b, …rest] = arr; console.log(a); // 1 con…

    JavaScript 2023年6月10日
    00
  • JavaScript判断数组是否存在key的简单实例

    下面是详细讲解JavaScript判断数组是否存在key的简单实例的完整攻略。 问题背景 在JavaScript开发过程中,有时候需要判断一个数组中是否存在某个指定的key,那么该怎么做呢? 解决方案 我们可以采用JavaScript内置的Array对象的includes()方法或数组的indexOf()方法来判断数组中是否存在某个指定的key。 使用inc…

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