1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/LenGxinLove-vue-music-webapp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 10 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 02:26 a9f7cc7

Vue全家桶 简易版 QQ音乐webApp

Проект: просмотр и запуск

  1. Клонировать проект и установить зависимости:
$ git clone https://gitee.com/LenGxinLove/vue-music-webapp.git
$ cd vue-music-webapp
$ npm install
  1. Запустить API интерфейс:
$ cd ./server

$ node app
  1. Предварительный просмотр проекта:
$ npm run serve

Функции:

  • Рекомендация:
    • Список альбомов и песен;
    • Детализация альбома.
  • Рейтинг:
    • Детальная информация о рейтинге.
  • Исполнитель:
    • Фильтр по алфавиту;
    • Информация об исполнителе.
  • Поиск:
    • Популярные поисковые запросы;
    • Пользовательский поиск.
  • Плеер:
    • Мини-плеер;
    • Список песен;
    • Режимы воспроизведения песен;
    • Предыдущая песня;
    • Следующая песня;
    • Пауза;
    • Индикатор прогресса.
  • Смена скина.

Демонстрация функций:

  1. Смена скина:

  2. Список исполнителей:

  3. Поиск:

Реализация функций:

1. Смена скина

Смена скина реализована на основе CSS пользовательских переменных.

CSS пользовательские переменные предоставляют возможность определять и использовать переменные аналогично тому, как это делается в Less или Sass. При определении переменной перед её именем необходимо поставить две черты (--). Для доступа к значению переменной используется функция var().

@import url('./variable.less');
body {
  --theme-color: @color-theme;
  --theme-bg-color: @color-theme;
  --bg-color: @background-color;
  --shortcut-color: @background-shortcut-color;
  --text-color: @text-color;
}

Для локального использования переменную можно определить внутри селектора элемента. Подробнее см. Использование CSS переменных.

Преимущество использования CSS пользовательских переменных заключается в том, что мы можем изменять эти переменные с помощью JavaScript:

  • document.body.style.setProperty('--primary', '#31C27C') — установка переменной;
  • document.body.style.getPropertyValue('--primary') — получение значения переменной;
  • document.body.style.removeProperty('--primary') — удаление переменной.
// Смена скина
document.body.style.setProperty('--theme-color', skin.name === '炫酷黑' ? '#B82525' : skin.color)
document.body.style.setProperty('--theme-bg-color', skin.color)
document.body.style.setProperty('--bg-color', skin.name === '炫酷黑' ? skin.color : '#fff')
document.body.style.setProperty('--shortcut-color', skin.name === '炫酵黑' ? '#333' : '#f2f3f4')
document.body.style.setProperty('--text-color', skin.name === '炫酵黑' ? '#FFF' : '#333')

2. Better-scroll — мобильный инструмент для прокрутки

<template>
  <div ref='scroll' class="scroll-view">
    <div>
      <Loading :show="downLoading" />
      <slot></slot>
      <Loading :show="upLoading" />
    </div>
  </div>
</template>
<script>
import BScroll from 'better-scroll'
import Loading from 'baseUI/Loading'
// import { debounce } from 'utils'

export default {
  name: 'Scroll',
  components: {
    Loading
  },
  props: {
    probeType: {
      type: Number,
      default: 1
    },
    click: {
      type: Boolean,
      default: true
    },
    listenScroll: { // Прослушивание событий прокрутки
      type: Boolean,
      default: false
    },
    pullUp: { // Включение события вытягивания вверх
      type: Boolean,
      default: false
    },
    pullDown: { // Включение события вытягивания вниз
      type: Boolean,
      default: false
    },
    bounceTop: { // Разрешение вытягивания вниз
      type: Boolean,
      default: true
    },
    bounceBottom: { // Разрешение вытягивания вверх
      type: Boolean,
      default: true
    },
    upLoading: { // Запуск загрузки при вытягивании вниз
      type: Boolean,
      default: false
    },
    downLoading: { // Запуск загрузки при вытягивании вверх
      type: Boolean,
      default: false
    },
    refreshDelay: {
      type: Number,
      default: 20
    }
  },
  mounted () {
    this._initScroll()
  },
  methods: {
    _initScroll () {
      // Options 参数
      const { probeType, click, bounceTop, bounceBottom } = this.$props
      // Events 事件
      const { listenScroll, pullUp, pullDown } = this.$props

      if (!this.$refs.scroll) return
      this.bScroll = new BScroll(this.$refs.scroll, {
        probeType: probeType,
        click: click,
        stopPropagation: true,
        // Включение эффектов вытягивания вверх и вниз
        bounce: {
          top: bounceTop,
          bottom: bounceBottom
        }
      })
      // Прослушивание событий прокрутки
      if (listenScroll) {
        this.bScroll.on('scroll', pos => {
          this.$emit('scroll', pos)
        })
      }
      // Событие вытягивания до конца
      if (pullUp) {
        this.bScroll.on('scrollEnd', () => {
          if (this.bScroll.y <= (this.bScroll.maxScrollY + 50)) {
            // debounce(() => {
            //   $emit('pullUp')
            // }, 200)
``` Данный текст представляет собой фрагмент программного кода на языке JavaScript с элементами HTML и LESS. 

В тексте описывается использование библиотеки animate.css для создания анимации в приложениях Vue.js, а также приводятся примеры кода для реализации различных анимаций.

**Перевод текста:**

### 3. Использование библиотеки анимации animate.css
```shell
 yarn add animate.css

Импортировать в main.js:

import animated from 'animate.css'

Vue.use(animated)

Пример использования на странице:

<template>
  <transition
    enter-active-class="animated fadeIn"
    leave-active-class="animated fadeOut"
  >
    <div class="loading" v-if="show">
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <span>{{title}}</span>
    </div>
  </transition>
</template>

Примечание: Не забудьте использовать v-if, иначе эффект не будет виден!

5. Анимация загрузки

<template>
  <transition
    enter-active-class="animated fadeIn"
    leave-active-class="animated fadeOut"
  >
    <div class="loading" v-if="show">
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <span>{{title}}</span>
    </div>
  </transition>
</template>
<script>
export default {
  name: 'Loading',
  props: {
    title: {
      type: String,
      default: 'Срочная загрузка...'
    },
    show: {
      type: Boolean,
      default: false
    }
  }
}
</script>

<style lang="less">
@import "~assets/style/variable";
.loading {
  height: 10px;
  width: 120px;
  margin: auto;
  text-align: center;
  font-size: 10px;
  padding: 10px 0;
  > div {
    display: inline-block;
    background-color: var(--theme-bg-color);
    height: 100%;
    width: 2px;
    margin-right: 4px;
    animation: Dance 1s infinite;
    &:nth-child(2) {
      animation-delay: -0.4s;
    }
    &:nth-child(3) {
      animation-delay: -0.6s;
    }
    &:nth-child(4) {
      animation-delay: -0.5s;
    }
    &:nth-child(5) {
      animation-delay: -0.2s;
    }
  }
}

@keyframes Dance {
  0%,
  40%,
  100% {
    transform: scaleY(0.4);
    transform-origin: center 100%;
  }
  20% {
    transform: scaleY(1.2);
  }
}
</style>

6. Анимация прокрутки текста песни

Используется плагин lyric-parser.

  • API плагина.
  • Методы плагина: play(), stop(), seek(startTime), togglePlay().
import Lyric from 'lyric-parser'
<script>
export default {
  data () {
    return {
      currentLyric: null, // Текст песни.
      currentLineNum: 0 // Номер строки.
    }
  },
  methods: {
    // Получение текста песни.
    getLyric () {
      api.getLyric().then(lyric => {
        ...
        this.currentLyric = new Lyric(lyric, this.handleLyric)
        ...
      })
    },
    // Обработчик плагина Lyric.
    handleLyric ({ lineNum, txt }) {
      console.log('Текст песни', lineNum, txt)
      this.currentLineNum = lineNum
      if (lineNum > 5) {
        let lineEl = this.$refs.lyricLine[lineNum - 5]
        this.$refs.lyricList.scrollToElement(lineEl, 1000) // Прокрутка к элементу.
      } else {
        this.$refs.lyricList.scrollTo(0, 0, 1000) // Прокрутка вверх.
      }
    }
  }
}
</script>

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/LenGxinLove-vue-music-webapp.git
git@api.gitlife.ru:oschina-mirror/LenGxinLove-vue-music-webapp.git
oschina-mirror
LenGxinLove-vue-music-webapp
LenGxinLove-vue-music-webapp
master