Vue全家桶 简易版 QQ音乐webApp
$ git clone https://gitee.com/LenGxinLove/vue-music-webapp.git
$ cd vue-music-webapp
$ npm install
$ cd ./server
$ node app
$ npm run serve
Смена скина:
Список исполнителей:
Поиск:
Смена скина реализована на основе 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')
<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
, иначе эффект не будет виден!
<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>
Используется плагин lyric-parser
.
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 )