Browse Source

优化slide

pull/19/head
zyronon 3 years ago
parent
commit
75cddae8c4
  1. 84
      src/components/BVideo.vue
  2. 2
      src/components/slide/SlideRowList.vue
  3. 64
      src/pages/home/Index2.vue
  4. 152
      src/pages/slide/IndicatorHome.vue
  5. 14
      src/pages/slide/Slide-Horizontal.vue
  6. 5
      src/pages/slide/Slide-Vertical.vue
  7. 403
      src/pages/slide/Slide.vue
  8. 121
      src/pages/slide/slide.vue
  9. 2
      src/pages/test/TestSlide.vue

84
src/components/BVideo.vue

@ -11,7 +11,6 @@ @@ -11,7 +11,6 @@
</video>
<img src="../assets/img/icon/play-white.png" class="pause" v-if="!isPlaying">
<div class="float" @click="togglePlayVideo">
<!-- @click.stop="togglePlayVideo" -->
<div :style="{opacity:isMove ? 0:1}" class="normal">
<div class="toolbar mb1r">
<div class="avatar-ctn mb4r">
@ -142,6 +141,12 @@ export default { @@ -142,6 +141,12 @@ export default {
return -1
}
},
prefix: {
type: String,
default: () => {
return ''
}
},
//
isPlay: {
type: Boolean,
@ -171,7 +176,7 @@ export default { @@ -171,7 +176,7 @@ export default {
data() {
return {
loading: false,
name: `v-${this.index}-video`,
name: `v-${this.prefix}-${this.index}-video`,
globalMethods: globalMethods,
duration: 0,
step: 0,
@ -186,10 +191,7 @@ export default { @@ -186,10 +191,7 @@ export default {
isMove: false,
test: [1, 2],
lVideo: this.video,
lastClickTime: -1,
clickTimer: null,
dbClickTimer: null,
isDbClick: false,
videoPoster: `?vframe/jpg/offset/0/w/${document.body.clientWidth}`
}
},
@ -222,7 +224,6 @@ export default { @@ -222,7 +224,6 @@ export default {
}, false);
}
// eventTester("loadstart", ''); //
// eventTester("abort", ''); //
// eventTester("loadstart", ''); //
@ -252,58 +253,6 @@ export default { @@ -252,58 +253,6 @@ export default {
videoWrapper.on('stop', this.stop)
},
methods: {
dbClick(e) {
// console.log('dbclick')
let id = 'a' + Date.now()
let elWidth = 80
let rotate = this.randomNum(0, 1)
let template = `<img class="${rotate ? 'left love-dbclick' : 'right love-dbclick'}" id="${id}" src="${new URL('../assets/img/icon/loved.svg')}" alt="">`
let el = new Dom().create(template)
el.css({top: e.y - elWidth, left: e.x - elWidth / 2,})
new Dom('#home-index').append(el)
setTimeout(() => {
new Dom(`#${id}`).remove()
}, 1000)
},
randomNum(minNum, maxNum) {
switch (arguments.length) {
case 1:
return parseInt(Math.random() * minNum + 1, 10);
case 2:
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
default:
return 0;
}
},
checkDbClick(e) {
let checkTime = 400
if (this.isDbClick) {
this.dbClick(e)
// console.log('checkDbClick-dbclick1')
clearTimeout(this.dbClickTimer);
this.dbClickTimer = setTimeout(() => {
this.isDbClick = false
}, 400);
}
let nowTime = new Date().getTime();
if (nowTime - this.lastClickTime < checkTime) {
this.dbClick(e)
// console.log('checkDbClick-dbclick2')
this.lastClickTime = 0;
this.clickTimer && clearTimeout(this.clickTimer);
this.isDbClick = true
this.dbClickTimer = setTimeout(() => {
this.isDbClick = false
}, checkTime);
} else {
this.lastClickTime = nowTime;
this.clickTimer = setTimeout(() => {
// console.log('')
this.togglePlayVideo()
}, checkTime);
}
},
play() {
new Dom(`.${this.name}-marquee`).trigger('start')
new Dom(`.${this.name}-music`).trigger('start')
@ -330,6 +279,13 @@ export default { @@ -330,6 +279,13 @@ export default {
this.$refs.video.pause()
this.isPlaying = false
},
//
togglePlayVideo(e) {
console.log('togglePlayVideo')
if (!this.isPlaying) {
this.play()
}
},
$likeNum(v) {
return globalMethods.$likeNum(v)
},
@ -343,15 +299,7 @@ export default { @@ -343,15 +299,7 @@ export default {
this.isAttention = true
}, 1000)
},
//
togglePlayVideo(e) {
// console.log('togglePlayVideo')
if (this.isPlaying) {
this.pause()
} else {
this.play()
}
},
loved(e, index) {
this.lVideo.isLoved = !this.lVideo.isLoved
this.$emit('update:video', this.lVideo)

2
src/components/slide/SlideRowList.vue

@ -189,7 +189,7 @@ export default { @@ -189,7 +189,7 @@ export default {
this.tabIndicatorRelationActiveIndexLefts.push(
item.getBoundingClientRect().x - tabs.children[0].getBoundingClientRect().x + (this.isHome ? this.tabWidth * 0.15 : 0))
}
// console.log(this.tabIndicatorRelationActiveIndexLefts)
// console.log(this.indicatorRelateIndexLefts)
this.indicatorSpace = this.tabIndicatorRelationActiveIndexLefts[1] - this.tabIndicatorRelationActiveIndexLefts[0]
if (this.isHome) {
this.$setCss(this.indicatorRef, 'transition-duration', `300ms`)

64
src/pages/home/Index2.vue

@ -331,69 +331,5 @@ export default { @@ -331,69 +331,5 @@ export default {
width: 100%;
//z-index: 4;
position: relative;
.love-dbclick {
position: absolute;
@width: 8rem;
width: @width;
height: @width;
&.left {
animation: loveLeft 1.1s linear;
}
&.right {
animation: loveRight 1.1s linear;
}
@scale: scale(1.2);
@rotate: 10deg;
@keyframes loveLeft {
0% {
opacity: 0;
transform: scale(2) rotate(0-@rotate);
}
10% {
opacity: 1;
transform: scale(1) rotate(0-@rotate);
}
15% {
opacity: 1;
transform: @scale rotate(0-@rotate);
}
40% {
opacity: 1;
transform: @scale rotate(0-@rotate);
}
100% {
transform: translateY(-12rem) scale(2) rotate(0-@rotate);
opacity: 0;
}
}
@keyframes loveRight {
0% {
opacity: 0;
transform: scale(2) rotate(0+@rotate);
}
10% {
opacity: 1;
transform: scale(1) rotate(0+@rotate);
}
15% {
opacity: 1;
transform: @scale rotate(0+@rotate);
}
40% {
opacity: 1;
transform: @scale rotate(0+@rotate);
}
100% {
transform: translateY(-12rem) scale(2) rotate(0+@rotate);
opacity: 0;
}
}
}
}
</style>

152
src/pages/slide/IndicatorHome.vue

@ -0,0 +1,152 @@ @@ -0,0 +1,152 @@
<template>
<div class="indicator-home">
<div class="notice"><span>下拉刷新内容</span></div>
<div class="toolbar" ref="toolbar">
<div class="left" @click="$nav('/home/live')">直播</div>
<div class="tab-ctn">
<div class="tabs" ref="tabs">
<div class="tab"
@click="changeIndex(false,0)">
<span>同城</span>
</div>
<div class="tab"
@click="changeIndex(false,0)">
<span>关注</span>
</div>
<div class="tab"
@click="changeIndex(false,1)"><span>推荐</span>
</div>
</div>
<div class="indicator" ref="indicator"></div>
</div>
<img src="../../assets/img/icon/search-gray.png" alt=""
@click="$nav('/home/search')"
style="margin-top: .5rem;">
</div>
<Loading class="loading" style="width: 4rem;" :is-full-screen="false"/>
</div>
</template>
<script>
import Loading from "../../components/Loading";
export default {
name: "IndicatorHome",
components: {
Loading,
},
props: {
modelValue: false
},
data() {
return {
tabWidth: 0,
indicatorRef: null,
indicatorRelateIndexLefts: [],
indicatorSpace: 0
}
},
computed: {},
watch: {},
created() {
},
mounted() {
let tabs = this.$refs.tabs
this.indicatorRef = this.$refs.indicator
for (let i = 0; i < tabs.children.length; i++) {
let item = tabs.children[i]
this.tabWidth = this.$getCss(item, 'width')
//TODO IndicatorLight.vue
this.indicatorRelateIndexLefts.push(
item.getBoundingClientRect().x - tabs.children[0].getBoundingClientRect().x + this.tabWidth * 0.15)
}
this.indicatorSpace = this.indicatorRelateIndexLefts[1] - this.indicatorRelateIndexLefts[0]
this.$setCss(this.indicatorRef, 'transition-duration', `300ms`)
this.$setCss(this.indicatorRef, 'left', this.indicatorRelateIndexLefts[0] + 'px')
},
methods: {
changeIndex() {
}
}
}
</script>
<style scoped lang="less">
@import "@/assets/less/index";
.indicator-home {
position: fixed;
font-size: 1.6rem;
top: 0;
left: 0;
height: 60px;
z-index: 2;
width: 100%;
color: white;
.notice {
opacity: 0;
top: 0;
position: absolute;
width: 100vw;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.loading {
opacity: 0;
top: 1.3rem;
right: 1.5rem;
position: absolute;
}
.toolbar {
z-index: 2;
position: relative;
color: white;
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 0 1.5rem;
display: flex;
justify-content: space-between;
align-items: center;
.tab-ctn {
width: 45%;
position: relative;
.tabs {
display: flex;
justify-content: space-between;
font-weight: bold;
.tab {
transition: color .3s;
color: gray;
&.active {
color: white;
}
}
}
.indicator {
//transition: left .3s;
position: absolute;
bottom: -0.8rem;
height: .3rem;
width: 2rem;
background: #fff;
border-radius: .5rem;
}
}
}
}
</style>

14
src/pages/slide/slide-horizontal.vue → src/pages/slide/Slide-Horizontal.vue

@ -21,7 +21,6 @@ export default { @@ -21,7 +21,6 @@ export default {
this.total = this.wrapper.children.length
this.wrapperWidth = this.$getCss(this.wrapper, 'width')
this.wrapperHeight = this.$getCss(this.wrapper, 'height')
},
methods: {
touchStart(e) {
@ -35,11 +34,11 @@ export default { @@ -35,11 +34,11 @@ export default {
let isRight = this.moveX < 0
if ((this.index === 0 && !isRight) || (this.index === this.total - 1 && isRight)) return
this.$stopPropagation(e)
this.checkDirection(e)
if (this.next) {
this.$stopPropagation(e)
this.$setCss(this.wrapper, 'transform',
`translate3d(${this.getDistance()
+ this.moveX
@ -48,11 +47,7 @@ export default { @@ -48,11 +47,7 @@ export default {
}
},
checkDirection(e) {
if (this.needCheck) {
// this.$stopPropagation(e)
} else {
return
}
if (!this.needCheck) return
if (Math.abs(this.moveX) > this.judgeValue || Math.abs(this.moveY) > this.judgeValue) {
let angle = (Math.abs(this.moveX) * 10) / (Math.abs(this.moveY) * 10)
if (angle > 1) {
@ -84,6 +79,7 @@ export default { @@ -84,6 +79,7 @@ export default {
this.reset()
},
reset() {
this.moveX = 0
this.next = false
this.needCheck = true
},
@ -94,8 +90,8 @@ export default { @@ -94,8 +90,8 @@ export default {
render(createElement, context) {
return (
<div className="slide-column">
<div className="column-wrapper"
<div className="slide">
<div className="slide-wrapper"
ref="wrapper"
ontouchstart={this.touchStart.bind(this)}
ontouchmove={this.touchMove.bind(this)}

5
src/pages/slide/slide-vertical.vue → src/pages/slide/Slide-Vertical.vue

@ -84,6 +84,7 @@ export default { @@ -84,6 +84,7 @@ export default {
this.reset()
},
reset() {
this.moveX = 0
this.next = false
this.needCheck = true
},
@ -94,8 +95,8 @@ export default { @@ -94,8 +95,8 @@ export default {
render(createElement, context) {
return (
<div className="slide-row">
<div className="column-wrapper"
<div className="slide">
<div className="slide-wrapper"
style="flex-direction: column;"
ref="wrapper"
ontouchstart={this.touchStart.bind(this)}

403
src/pages/slide/Slide.vue

@ -0,0 +1,403 @@ @@ -0,0 +1,403 @@
<template>
<div id="Slide" @click="checkDbClick">
<slide-horizontal>
<div class="item">
<IndicatorHome/>
<slide-horizontal
style="height: calc(100% - 5rem);"
>
<div class="item">
<div class="nav-one" :class="{close:closeOne}">
<div class="nav-item">
<img src="../../assets/img/icon/msg-icon9.webp" alt="">
<span>美食</span>
</div>
<div class="nav-item">
<img src="../../assets/img/icon/msg-icon9.webp" alt="">
<span>休闲娱乐</span>
</div>
<div class="nav-item">
<img src="../../assets/img/icon/msg-icon9.webp" alt="">
<span>游玩</span>
</div>
<div class="nav-item">
<img src="../../assets/img/icon/msg-icon9.webp" alt="">
<span>丽人/美发</span>
</div>
<div class="nav-item">
<img src="../../assets/img/icon/msg-icon9.webp" alt="">
<span>住宿</span>
</div>
</div>
<SlideVertical>
<div class="item" style="background: tan">
<p style="padding: 1rem;" v-for="i in 50">
r2222222222222222222222222222222222222222222222222222222
</p>
</div>
<div class="item">r333333333333333333333333333333333333333333333333333333</div>
</SlideVertical>
</div>
<div class="item">
<div class="nav-two" :class="{close:closeOne}">
<div class="title">
<span>正在直播</span>
<div class="right">
<div>全部关注</div>
<back mode="gray" direction="right"/>
</div>
</div>
<div class="users">
<div class="user" v-for="item in friends.all">
<img :style="item.select?'opacity: .5;':''" class="avatar" :src="$imgPreview(item.avatar)" alt="">
<span>{{ item.name }}</span>
<div class="tag">直播中</div>
</div>
</div>
</div>
<SlideVertical>
<div class="item">r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1</div>
<div class="item">r2222222222222222222222222222222222222222222222222222222</div>
<div class="item">r333333333333333333333333333333333333333333333333333333</div>
</SlideVertical>
</div>
<div class="item">
<SlideVertical>
<div class="item">r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1</div>
<div class="item">r2222222222222222222222222222222222222222222222222222222</div>
<div class="item">r333333333333333333333333333333333333333333333333333333</div>
</SlideVertical>
</div>
</slide-horizontal>
<Footer v-bind:init-tab="1"/>
</div>
<div class="item">
<p v-for="i in 100">2</p>
</div>
</slide-horizontal>
</div>
</template>
<script>
import SlideHorizontal from './slide-horizontal'
import SlideVertical from './slide-vertical'
import BVideo from "../../components/BVideo";
import resource from "../../assets/data/resource";
import Dom from "../../utils/dom";
import Footer from "../../components/Footer";
import Loading from "../../components/Loading";
import {mapState} from "vuex";
import IndicatorHome from "./IndicatorHome";
export default {
name: "slide",
components: {
SlideHorizontal,
SlideVertical,
BVideo,
Footer,
IndicatorHome
},
data() {
return {
closeOne: true,
videos: [],
totalSize: 52,
pageSize: 10,
pageNo: 0,
lastClickTime: -1,
clickTimer: null,
dbClickTimer: null,
isDbClick: false,
}
},
computed: {
...mapState(['friends']),
},
created() {
this.getData()
},
mounted() {
},
methods: {
changeIndex() {
this.closeOne = !this.closeOne
},
dbClick(e) {
console.log('dbclick')
let id = 'a' + Date.now()
let elWidth = 80
let rotate = this.randomNum(0, 1)
let template = `<img class="${rotate ? 'left love-dbclick' : 'right love-dbclick'}" id="${id}" src="${new URL('../../assets/img/icon/loved.svg', import.meta.url).href}">`
let el = new Dom().create(template)
el.css({top: e.y - elWidth, left: e.x - elWidth / 2,})
new Dom('#Slide').append(el)
setTimeout(() => {
new Dom(`#${id}`).remove()
}, 1000)
},
randomNum(minNum, maxNum) {
switch (arguments.length) {
case 1:
return parseInt(Math.random() * minNum + 1, 10);
case 2:
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
default:
return 0;
}
},
checkDbClick(e) {
let checkTime = 400
if (this.isDbClick) {
this.dbClick(e)
// console.log('checkDbClick-dbclick1')
clearTimeout(this.dbClickTimer);
this.dbClickTimer = setTimeout(() => {
this.isDbClick = false
}, 400);
return
}
let nowTime = new Date().getTime();
if (nowTime - this.lastClickTime < checkTime) {
this.dbClick(e)
// console.log('checkDbClick-dbclick2')
this.lastClickTime = 0;
this.clickTimer && clearTimeout(this.clickTimer);
this.isDbClick = true
this.dbClickTimer = setTimeout(() => {
this.isDbClick = false
}, checkTime);
} else {
this.lastClickTime = nowTime;
this.clickTimer = setTimeout(() => {
console.log('单击')
// this.togglePlayVideo()
}, checkTime);
}
},
async getData() {
if (process.env.NODE_ENV !== 'development') {
this.totalSize = 11
// return this.videos = this.$clone(this.localVideos)
// await this.$sleep(200)
// return this.videos = this.$clone(this.webVideos)
return this.videos = this.$clone(resource.videos)
}
this.loading = true
let res = await this.$api.videos.recommended({pageNo: this.pageNo, pageSize: this.pageSize})
console.log(res)
this.loading = false
if (res.code === this.SUCCESS) {
this.totalSize = res.data.total
this.videos = this.videos.concat(res.data.list)
// this.videos = this.$clone(this.localVideos)
} else {
this.pageNo--
}
},
}
}
</script>
<style lang="less">
#Slide {
height: 100vh;
width: 100vw;
color: white;
}
.slide {
height: 100%;
width: 100%;
overflow: hidden;
.slide-wrapper {
height: 100%;
width: 100%;
display: flex;
//transform: translateX(1rem);
}
.item {
width: 100%;
min-width: 100%;
height: 100%;
min-height: 100%;
overflow: hidden;
}
}
.love-dbclick {
position: absolute;
@width: 8rem;
width: @width;
height: @width;
&.left {
animation: loveLeft 1.1s linear;
}
&.right {
animation: loveRight 1.1s linear;
}
@scale: scale(1.2);
@rotate: 10deg;
@keyframes loveLeft {
0% {
opacity: 0;
transform: scale(2) rotate(0-@rotate);
}
10% {
opacity: 1;
transform: scale(1) rotate(0-@rotate);
}
15% {
opacity: 1;
transform: @scale rotate(0-@rotate);
}
40% {
opacity: 1;
transform: @scale rotate(0-@rotate);
}
100% {
transform: translateY(-12rem) scale(2) rotate(0-@rotate);
opacity: 0;
}
}
@keyframes loveRight {
0% {
opacity: 0;
transform: scale(2) rotate(0+@rotate);
}
10% {
opacity: 1;
transform: scale(1) rotate(0+@rotate);
}
15% {
opacity: 1;
transform: @scale rotate(0+@rotate);
}
40% {
opacity: 1;
transform: @scale rotate(0+@rotate);
}
100% {
transform: translateY(-12rem) scale(2) rotate(0+@rotate);
opacity: 0;
}
}
}
.nav-one {
height: 14rem;
box-sizing: border-box;
background: linear-gradient(to right, rgb(36, 34, 84), rgb(7, 5, 16));
transition: all .3s;
padding: 2rem;
display: flex;
align-items: flex-end;
justify-content: space-between;
.nav-item {
@width: 3.5rem;
display: flex;
align-items: center;
flex-direction: column;
img {
width: @width;
height: @width;
margin-bottom: .5rem;
}
}
&.close {
margin-top: -14rem;
}
}
@space-width: 1.5rem;
@icon-width: 5.2rem;
.nav-two {
height: 18rem;
display: flex;
flex-direction: column;
justify-content: flex-end;
box-sizing: border-box;
padding: @space-width;
transition: .3s;
.title {
width: 100%;
display: flex;
justify-content: space-between;
box-sizing: border-box;
margin-bottom: 1.5rem;
.right {
color: gray;
display: flex;
align-items: center;
}
img {
width: 1rem;
height: 1rem;
margin-left: .4rem;
}
}
.users {
display: flex;
width: 100%;
overflow: hidden;
.user {
width: @icon-width;
position: relative;
margin-right: @space-width;
font-size: 1rem;
display: flex;
flex-direction: column;
align-items: center;
.avatar {
width: @icon-width;
height: @icon-width;
border-radius: 50%;
}
span {
margin-top: .8rem;
text-align: center;
width: @icon-width;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tag {
background: rgb(239, 46, 137);
border-radius: .2rem;
padding: 0 .2rem;
bottom: 1.8rem;
position: absolute;
font-size: 1rem;
}
}
}
&.close {
margin-top: -18rem;
}
}
</style>

121
src/pages/slide/slide.vue

@ -1,121 +0,0 @@ @@ -1,121 +0,0 @@
<template>
<div class="Slide" @click.capture="c">
<slide-horizontal>
<div class="item">
<slide-horizontal>
<div class="item">
<SlideVertical>
<div class="item" v-for="i in videos">
<BVideo :video="i"></BVideo>
</div>
<div class="item">r2222222222222222222222222222222222222222222222222222222</div>
<div class="item">r333333333333333333333333333333333333333333333333333333</div>
</SlideVertical>
</div>
<div class="item">
<SlideVertical>
<div class="item">r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1</div>
<div class="item">r2222222222222222222222222222222222222222222222222222222</div>
<div class="item">r333333333333333333333333333333333333333333333333333333</div>
</SlideVertical>
</div>
<div class="item">
<SlideVertical>
<div class="item">r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1</div>
<div class="item">r2222222222222222222222222222222222222222222222222222222</div>
<div class="item">r333333333333333333333333333333333333333333333333333333</div>
</SlideVertical>
</div>
</slide-horizontal>
</div>
<div class="item">
<p v-for="i in 100">2</p>
</div>
</slide-horizontal>
</div>
</template>
<script>
import SlideHorizontal from './slide-horizontal'
import SlideVertical from './slide-vertical'
import BVideo from "../../components/BVideo";
import resource from "../../assets/data/resource";
export default {
name: "slide",
components: {
SlideHorizontal,
SlideVertical,
BVideo
},
data() {
return {
videos: [],
totalSize: 52,
pageSize: 10,
pageNo: 0,
}
},
created() {
this.getData()
},
mounted() {
},
methods: {
c() {
console.log('console.log()')
return true
},
async getData() {
if (process.env.NODE_ENV !== 'development') {
this.totalSize = 11
// return this.videos = this.$clone(this.localVideos)
// await this.$sleep(200)
// return this.videos = this.$clone(this.webVideos)
return this.videos = this.$clone(resource.videos)
}
this.loading = true
let res = await this.$api.videos.recommended({pageNo: this.pageNo, pageSize: this.pageSize})
console.log(res)
this.loading = false
if (res.code === this.SUCCESS) {
this.totalSize = res.data.total
this.videos = this.videos.concat(res.data.list)
// this.videos = this.$clone(this.localVideos)
} else {
this.pageNo--
}
},
}
}
</script>
<style lang="less">
.Slide {
height: 90vh;
width: 100vw;
color: white;
}
.slide-column, .slide-row {
height: 100%;
width: 100%;
overflow: hidden;
.column-wrapper {
height: 100%;
width: 100%;
display: flex;
//transform: translateX(1rem);
}
.item {
width: 100%;
min-width: 100%;
height: 100%;
min-height: 100%;
}
}
</style>

2
src/pages/test/TestSlide.vue

@ -361,7 +361,7 @@ export default { @@ -361,7 +361,7 @@ export default {
if (import.meta.hot) {
}
</script>
<style>
<style scoped>
.slide-wrapper {
width: 100%;
height: 100%;

Loading…
Cancel
Save