Browse Source

优化分享icon

pull/19/head
zyronon 4 years ago
parent
commit
d1eb1594ee
  1. BIN
      src/assets/img/icon/components/video/d5i.webp
  2. BIN
      src/assets/img/icon/components/video/fol.webp
  3. BIN
      src/assets/img/icon/components/video/foq.webp
  4. BIN
      src/assets/img/icon/components/video/for.webp
  5. BIN
      src/assets/img/icon/components/video/gx-.webp
  6. BIN
      src/assets/img/icon/components/video/gx5.webp
  7. BIN
      src/assets/img/icon/components/video/gxj.webp
  8. BIN
      src/assets/img/icon/components/video/gyq.webp
  9. BIN
      src/assets/img/icon/components/video/hq0.webp
  10. BIN
      src/assets/img/icon/components/video/hq1.webp
  11. BIN
      src/assets/img/icon/components/video/hq2.webp
  12. BIN
      src/assets/img/icon/components/video/hqy.webp
  13. 1
      src/assets/img/icon/举报.svg
  14. 84
      src/components/Share.vue
  15. 13
      src/components/Video.vue
  16. 308
      src/components/slide/SlideColumnVirtualList.vue
  17. 22
      src/pages/Test.vue
  18. 30
      src/pages/home/Index2.vue
  19. 2
      src/utils/mixin.js

BIN
src/assets/img/icon/components/video/d5i.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 753 B

BIN
src/assets/img/icon/components/video/fol.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

BIN
src/assets/img/icon/components/video/foq.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/assets/img/icon/components/video/for.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/assets/img/icon/components/video/gx-.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/assets/img/icon/components/video/gx5.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/assets/img/icon/components/video/gxj.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/assets/img/icon/components/video/gyq.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1006 B

BIN
src/assets/img/icon/components/video/hq0.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

BIN
src/assets/img/icon/components/video/hq1.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

BIN
src/assets/img/icon/components/video/hq2.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/assets/img/icon/components/video/hqy.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

1
src/assets/img/icon/举报.svg

@ -1 +0,0 @@ @@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1539702074319" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4164" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 358.555826c-12.288 0-22.26087 9.97287-22.26087 22.26087l0 268.221217c0 12.288 9.97287 22.26087 22.26087 22.26087s22.26087-9.97287 22.26087-22.26087L534.26087 380.816696C534.26087 368.528696 524.288 358.555826 512 358.555826zM512 716.176696c-12.288 0-22.26087 9.97287-22.26087 22.26087l0 44.699826c0 12.288 9.97287 22.26087 22.26087 22.26087s22.26087-9.97287 22.26087-22.26087l0-44.699826C534.26087 726.149565 524.288 716.176696 512 716.176696zM998.912 867.394783 575.688348 131.33913C559.972174 104.025043 536.754087 88.33113 512 88.33113S464.027826 104.025043 448.311652 131.33913L25.088 867.394783c-8.859826 15.426783-13.356522 30.675478-13.356522 45.345391 0 32.456348 23.908174 65.224348 77.312 65.224348l845.913043 0c53.381565 0 77.289739-32.768 77.312-65.224348C1012.268522 898.070261 1007.771826 882.821565 998.912 867.394783zM934.956522 933.420522 89.043478 933.420522c-9.861565 0-32.790261-2.025739-32.790261-20.702609 0-6.678261 2.56-14.669913 7.41287-23.129043L486.912 153.533217c15.137391-26.290087 35.06087-26.290087 50.198261 0l423.223652 736.033391c4.85287 8.45913 7.41287 16.450783 7.41287 23.129043C967.746783 931.394783 944.818087 933.420522 934.956522 933.420522z" p-id="4165"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

84
src/components/Share.vue

@ -15,71 +15,78 @@ @@ -15,71 +15,78 @@
<span>更多</span>
</div>
</div>
<div class="line"></div>
<div class="shares pl1r pb2r">
<div class="share-to pr1r pl1r"
v-for="item in 5"
>
<img src="../assets/img/icon/friend_circle.svg" alt="">
<div class="share-to pr1r pl1r">
<img src="../assets/img/icon/components/video/tofriend.webp" alt="">
<span>分享到日常</span>
</div>
<div class="share-to pr1r pl1r">
<img src="../assets/img/icon/components/video/towechat.webp" alt="">
<span>朋友圈</span>
</div>
<div class="share-to pr1r pl1r">
<img src="../assets/img/icon/wechat.svg" alt="">
<span>微信</span>
<img src="../assets/img/icon/components/video/towechatchat.webp" alt="">
<span>微信好友</span>
</div>
<div class="share-to pr1r pl1r">
<img src="../assets/img/icon/sq-share-qqzone-01.svg">
<img src="../assets/img/icon/components/video/tozone.webp" alt="">
<span>QQ空间</span>
</div>
<div class="share-to pr1r pl1r">
<img src="../assets/img/icon/QQ.svg">
<span>QQ</span>
<img src="../assets/img/icon/components/video/toqq.webp" alt="">
<span>QQ好友</span>
</div>
<div class="share-to pr1r pl1r">
<img src="../assets/img/icon/sina.svg">
<span>微博</span>
<img src="../assets/img/icon/components/video/totoutiao.webp" alt="">
<span>今日头条</span>
</div>
<div class="share-to pr1r pl1r">
<img src="../assets/img/icon/more.svg">
<span>更多</span>
<img src="../assets/img/icon/components/video/toweibo.webp" alt="">
<span>微博</span>
</div>
</div>
<div class="toolbar pl1r pb2r">
<div class="tool pr1r pl1r ">
<img src="../assets/img/icon/举报.svg" alt="">
<img src="../assets/img/icon/components/video/comeonlook.webp" alt="">
<span>一起看视频</span>
</div>
<div class="tool pr1r pl1r ">
<img src="../assets/img/icon/components/video/warring.png" alt="">
<span>举报</span>
</div>
<div class="tool pr1r pl1r ">
<img src="../assets/img/icon/download.svg" alt="">
<img src="../assets/img/icon/components/video/download.png" alt="">
<span>保存本地</span>
</div>
<div class="tool pr1r pl1r ">
<img src="../assets/img/icon/collect.svg" alt="">
<img src="../assets/img/icon/components/video/star.png" alt="">
<span>收藏</span>
</div>
<div class="tool pr1r pl1r ">
<img src="../assets/img/icon/qiangjing.svg" alt="">
<span>抢镜</span>
<img src="../assets/img/icon/components/video/comeonplay.webp" alt="">
<span>合拍</span>
</div>
<div class="tool pr1r pl1r">
<img src="../assets/img/icon/qr_code.svg" alt="">
<span>二维码</span>
<img src="../assets/img/icon/components/video/bizhi.webp" alt="">
<span>动态壁纸</span>
</div>
<div class="tool pr1r pl1r">
<img src="../assets/img/icon/dongtaibizhi.svg" alt="">
<span>动态壁纸</span>
<img src="../assets/img/icon/components/video/dislike.png" alt="">
<span>不感兴趣</span>
</div>
<div class="tool pr1r pl1r">
<img src="../assets/img/icon/hepai.svg" alt="">
<span>合拍</span>
<img src="../assets/img/icon/components/video/link.png" alt="">
<span>复制链接</span>
</div>
<div class="tool pr1r pl1r">
<img src="../assets/img/icon/dislike.svg" alt="">
<span>不感兴趣</span>
<img src="../assets/img/icon/components/video/qrcode.png" alt="">
<span>二维码</span>
</div>
<div class="tool pr1r pl1r">
<img src="../assets/img/icon/href.svg" alt="">
<span>复制链接</span>
<img src="../assets/img/icon/hepai.svg" alt="">
<span>合拍</span>
</div>
</div>
</div>
@ -100,6 +107,8 @@ export default { @@ -100,6 +107,8 @@ export default {
</script>
<style lang="less" scoped>
@import "../assets/scss/index";
.share {
position: fixed;
/*top: 200px;*/
@ -158,17 +167,16 @@ export default { @@ -158,17 +167,16 @@ export default {
display: flex;
.share-to {
width: 50px;
img {
width: 30px;
height: 30px;
padding: 10px;
width: 5rem;
height: 5rem;
border-radius: 50%;
background: #1ace04;
}
span {
color: @second-text-color;
font-size: 1rem;
display: block;
text-align: center;
}
@ -184,14 +192,16 @@ export default { @@ -184,14 +192,16 @@ export default {
float: left;
img {
width: 30px;
height: 30px;
padding: 10px;
width: 3rem;
height: 3rem;
padding: 1rem;
border-radius: 50%;
background: #eaeaea;
background: @second-btn-color;
}
span {
color: @second-text-color;
font-size: 1rem;
display: block;
text-align: center;
}

13
src/components/Video.vue

@ -5,7 +5,14 @@ @@ -5,7 +5,14 @@
<!--</template>-->
<template>
<div class="bg-video" v-bind:style="{'height':height+'px'}">
<video :src="video.videoUrl" poster="../assets/img/poster/1.jpg" ref="video" muted :autoplay="play" loop>
<!-- <video :src="video.videoUrl" poster="../assets/img/icon/components/video/loading.gif" ref="video" muted :autoplay="play" loop>-->
<!-- poster="../assets/img/poster/1.jpg"-->
<video :src="video.videoUrl"
ref="video"
muted
preload
:autoplay="play" loop>
<p> 您的浏览器不支持 video 标签</p>
</video>
<div class="float-container" v-if="true" @click.stop="togglePlayVideo">
@ -172,13 +179,11 @@ export default { @@ -172,13 +179,11 @@ export default {
this.currentTime = Math.ceil(e.target.currentTime)
this.pageX = this.currentTime * this.step
}
video.addEventListener('timeupdate', fun)
video.addEventListener('loadedmetadata', e => {
this.duration = video.duration
if (this.duration > 60) {
this.step = this.width / Math.floor(this.duration)
} else {
video.removeEventListener('timeupdate', fun)
video.addEventListener('timeupdate', fun)
}
})
video.addEventListener('play', e => {

308
src/components/slide/SlideColumnVirtualList.vue

@ -0,0 +1,308 @@ @@ -0,0 +1,308 @@
<template>
<div id="base-slide-wrapper">
<div id="base-slide-list" ref="slideList"
:style="{'flex-direction':'column'}"
@touchstart="touchStart($event)"
@touchmove="touchMove($event)"
@touchend="touchEnd($event)">
<slot></slot>
</div>
</div>
</template>
<script>
import * as Vue from 'vue'
export default {
name: "SlideColumnVirtualList",
props: {
renderSlide: {
type: Function,
default: () => {
return null
}
},
list: {
type: Array,
default: () => {
return []
}
},
defaultVirtualItemTotal: {
type: Number,
default: () => 5
},
activeIndex: {
type: Number,
default: () => 0
},
},
data() {
return {
wrapperHeight: 0,
startLocationX: 0,
startLocationY: 0,
moveXDistance: 0,
moveYDistance: 0,
judgeValue: 10,
startTime: 0,
currentSlideItemIndex: 0,
isDrawDown: true,
isCanDownWiping: false,
isNeedCheck: true,
slideList: null,
slideItems: null,
slideItemsHeights: [],
appInsMap: new Map()
}
},
watch: {
watchList: {
handler(newVal, oldVal) {
let that = this
if (oldVal.length === 0) {
let startIndex = 0
if (this.currentSlideItemIndex >= this.defaultVirtualItemTotal) {
startIndex = this.currentSlideItemIndex - (this.defaultVirtualItemTotal - 1) / 2
}
this.list.slice(startIndex, startIndex + 5).map(
(item, index) => {
let el = null
//0jqtrigger play
if (startIndex + index === this.currentSlideItemIndex) {
el = this.getInsEl(item, startIndex + index, true)
} else {
el = this.getInsEl(item, startIndex + index)
}
this.slideList.appendChild(el)
})
if (that.currentSlideItemIndex > 2) {
this.$setCss(this.slideList, 'transform', `translate3d(0px,
${-this.currentSlideItemIndex * this.wrapperHeight}px, 0px)`)
$(".video-slide-item").each(function () {
$(this).css('top', (that.currentSlideItemIndex - 2) * that.wrapperHeight)
})
}
setTimeout(this.checkChildren, 100)
} else {
let endLength = oldVal.length + 3
newVal.slice(oldVal.length, endLength).map((item, index) => {
let el = this.getInsEl(item, oldVal.length + index)
//top
$(el).css('top', (that.currentSlideItemIndex - 2) * that.wrapperHeight)
this.slideList.appendChild(el)
})
this.checkChildren()
}
},
deep: true
}
},
computed: {
//watch
watchList() {
return [...this.list]
},
},
mounted: async function () {
this.checkChildren()
this.currentSlideItemIndex = this.activeIndex
this.list.slice(this.currentSlideItemIndex, (this.defaultVirtualItemTotal + 1) / 2).map((item, index) => {
this.slideList.appendChild(this.getInsEl(item, index))
})
this.checkChildren()
},
methods: {
getInsEl(item, index, play = false) {
let slideVNode = this.renderSlide(item, index, play)
const app = Vue.createApp({
render() {
return slideVNode
}
})
const parent = document.createElement('div')
const ins = app.mount(parent)
this.appInsMap.set(index, app)
// this.appInsMap.set(index, ins)
return ins.$el
},
checkChildren() {
this.slideList = this.$refs.slideList
this.slideItems = this.slideList.children
this.wrapperHeight = this.$getCss(this.slideList, 'height')
},
touchStart(e) {
this.$setCss(this.slideList, 'transition-duration', `0ms`)
this.showIndicator && this.$setCss(this.indicatorRef, 'transition-duration', `0ms`)
this.toolbarStyleTransitionDuration = 0
this.startLocationX = e.touches[0].pageX
this.startLocationY = e.touches[0].pageY
this.startTime = Date.now()
let that = this
let items = $(".video-slide-item")
if (items.length > this.defaultVirtualItemTotal) {
let middle = (this.defaultVirtualItemTotal - 1) / 2
let removeNum = 0
items.each(function (index) {
if ($(this).data('index') === that.currentSlideItemIndex) {
console.log('start-index', index)
if (index !== middle) {
removeNum = index - middle
}
}
})
items.each(function (index) {
$(this).css('top', (that.currentSlideItemIndex - 2) * that.wrapperHeight)
})
for (let i = 0; i < removeNum; i++) {
$(items[i]).remove()
}
}
},
touchMove(e) {
this.moveXDistance = e.touches[0].pageX - this.startLocationX
this.moveYDistance = e.touches[0].pageY - this.startLocationY
this.isDrawDown = this.moveYDistance < 0
this.checkDirection()
//me
if (!this.isDrawDown) {
this.$attrs['onFirst'] && this.$emit('first', this.moveYDistance)
}
//todo js
// this.$attrs['onMove'] && this.$emit('move', {
// x: {distance: this.moveXDistance, isDrawRight: this.isDrawRight},
// y: {distance: this.moveYDistance, isDrawDown: this.isDrawDown},
// })
if (this.isCanDownWiping) {
if (this.currentSlideItemIndex === 0 && !this.isDrawDown) return; //item
if (this.currentSlideItemIndex === this.list.length - 1 && this.isDrawDown) return
// console.log('this.isCanDownWiping')
this.$stopPropagation(e)
this.$setCss(this.slideList, 'transform', `translate3d(0px, ${-this.getHeight(this.currentSlideItemIndex) +
this.moveYDistance +
(this.isDrawDown ? this.judgeValue : -this.judgeValue)
}px, 0px)`)
}
},
touchEnd(e) {
if (this.isCanDownWiping) {
if (this.currentSlideItemIndex === 0 && !this.isDrawDown) return
if (this.currentSlideItemIndex === this.list.length - 1 && this.isDrawDown) return this.$attrs['onEnd'] && this.$emit('end')
this.$stopPropagation(e)
this.$setCss(this.slideList, 'transition-duration', `300ms`)
let endTime = Date.now()
let gapTime = endTime - this.startTime
if (Math.abs(this.moveYDistance) < 20) gapTime = 1000
if (Math.abs(this.moveYDistance) > (this.wrapperHeight / 3)) gapTime = 100
if (gapTime < 150) {
if (this.isDrawDown) {
this.currentSlideItemIndex += 1
} else {
this.currentSlideItemIndex -= 1
}
// console.log(this.slideItems.length)
let that = this
if (this.isDrawDown) {
let addItemIndex = this.currentSlideItemIndex + 2
if (this.slideItems.length < this.defaultVirtualItemTotal) {
let res = $(`#base-slide-list .video-slide-item[data-index=${addItemIndex}]`)
if (res.length === 0) {
this.slideList.appendChild(this.getInsEl(this.list[addItemIndex], addItemIndex))
}
}
if (this.slideItems.length === this.defaultVirtualItemTotal
&& this.currentSlideItemIndex >= (this.defaultVirtualItemTotal + 1) / 2
&& this.currentSlideItemIndex <= this.list.length - 3
) {
let res = $(`#base-slide-list .video-slide-item[data-index=${addItemIndex}]`)
// console.log(videos)
if (res.length === 0) {
this.slideList.appendChild(this.getInsEl(this.list[addItemIndex], addItemIndex))
this.appInsMap.get($("#base-slide-list .video-slide-item:first").data('index')).unmount()
// $("#base-slide-list .base-slide-item:first").remove()
$(".video-slide-item").each(function () {
$(this).css('top', (that.currentSlideItemIndex - 2) * that.wrapperHeight)
})
}
}
if (this.slideItems.length > this.defaultVirtualItemTotal) {
this.appInsMap.get($("#base-slide-list .video-slide-item:first").data('index')).unmount()
$(".video-slide-item").each(function () {
$(this).css('top', (that.currentSlideItemIndex - 2) * that.wrapperHeight)
})
}
} else {
if (this.currentSlideItemIndex > 1 && this.currentSlideItemIndex <= this.list.length - 4) {
let addItemIndex = this.currentSlideItemIndex - 2
this.slideList.prepend(this.getInsEl(this.list[addItemIndex], addItemIndex))
this.appInsMap.get($("#base-slide-list .video-slide-item:last").data('index')).unmount()
// $("#base-slide-list .base-slide-item:last").remove()
$(".video-slide-item").each(function () {
$(this).css('top', (that.currentSlideItemIndex - 2) * that.wrapperHeight)
})
}
}
this.checkChildren()
}
this.$setCss(this.slideList, 'transform', `translate3d(0px, ${-this.getHeight(this.currentSlideItemIndex)}px, 0px)`)
}
this.resetConfig()
this.$attrs['onUpdate:active-index'] && this.$emit('update:active-index', this.currentSlideItemIndex)
},
resetConfig() {
this.isCanDownWiping = false
this.isNeedCheck = true
this.moveXDistance = 0
this.moveYDistance = 0
},
getHeight(index) {
return this.wrapperHeight * index
},
checkDirection() {
if (!this.isNeedCheck) return
let angle = (Math.abs(this.moveXDistance) * 10) / (Math.abs(this.moveYDistance) * 10)
if (angle < 0.6) {
//
this.isCanDownWiping = true
this.isNeedCheck = false
return
}
if (angle > 5) {
//
this.isCanDownWiping = false
this.isNeedCheck = false
}
}
}
}
</script>
<style scoped lang="less">
@import "../../assets/scss/index";
#base-slide-wrapper {
width: 100%;
height: 100%;
overflow: hidden;
#base-slide-list {
display: flex;
height: 100%;
width: 100%;
position: relative;
}
}
</style>

22
src/pages/Test.vue

@ -6,27 +6,23 @@ @@ -6,27 +6,23 @@
</template>
</BaseHeader>
<div class="content">
<SlideColumnList
ref="slideList"
direction="column"
>
<SlideItem v-for="(item,index) of videos" :key="index">
<Video1
v-model:video="videos[index]"
@showComments="isCommenting = !isCommenting"
@showShare="isSharing = !isSharing"
@goUserInfo="baseActiveIndex = 1"
></Video1>
</SlideItem>
</SlideColumnList>
<Share :is-sharing="true" ref="share"/>
</div>
</div>
</template>
<script>
import SlideColumnList from "../components/slide/SlideColumnList";
import SlideRowList from "../components/slide/SlideRowList";
import Video1 from "../components/Video";
import Comment from "../components/Comment";
import Share from "../components/Share";
import Me from "./me/Me";
export default {
name: "Test",
props: {},
components: {SlideColumnList, SlideRowList, Video1, Comment, Share, Me},
data() {
return {
videos: [

30
src/pages/home/Index2.vue

@ -89,17 +89,15 @@ @@ -89,17 +89,15 @@
</SlideColumnList>
</SlideItem>
<SlideItem>
<SlideColumnList
<SlideColumnVirtualList
ref="slideList"
direction="column"
:virtual="true"
:list="videos"
:renderSlide="render"
v-model:active-index="videoActiveIndex"
v-model:active-index1="videoActiveIndex"
@end="end"
>
</SlideColumnList>
</SlideColumnVirtualList>
</SlideItem>
</SlideRowList>
<Footer v-bind:init-tab="1"/>
@ -196,7 +194,23 @@ export default { @@ -196,7 +194,23 @@ export default {
"status": 1
}
],
videos: [],
videos: [
// {
// "id": "d2f55373-80dd-4c14-93a7-7a40e9cbf049",
// "posterUrl": "images/20210815/0.png",
// "videoUrl": "http://qy9rc9xff.hn-bkt.clouddn.com/29.mp4",
// "title": "",
// "likeNum": null,
// "commentNum": null,
// "sharedNum": null,
// "duration": null,
// "musicId": "126f9654-450b-466c-8003-085199a7f9b9",
// "browseCount": 0,
// "createTime": "1629683008",
// "createBy": "3e301843-e8bb-41c0-8240-9c4b42a17341",
// "status": 1
// }
],
localVideos: [
{
videoUrl: mp40,
@ -341,6 +355,9 @@ export default { @@ -341,6 +355,9 @@ export default {
let video = $(this).find('video')
if ($(this).data('index') === newVal) {
video.trigger('play')
video.on('canplay', () => {
video.trigger('play')
})
} else {
video.trigger('pause')
setTimeout(() => {
@ -370,7 +387,6 @@ export default { @@ -370,7 +387,6 @@ export default {
if (res.code === this.SUCCESS_CODE) {
this.totalSize = res.data.count
this.videos = this.videos.concat(res.data.list)
// this.videos = this.$clone(this.localVideos)
} else {
this.pageNo--
@ -380,7 +396,7 @@ export default { @@ -380,7 +396,7 @@ export default {
console.log(e)
},
end() {
console.log('end')
this.$notice('暂时没有更多了')
}
}
}

2
src/utils/mixin.js

@ -3,6 +3,7 @@ import BaseHeader from "../components/BaseHeader"; @@ -3,6 +3,7 @@ import BaseHeader from "../components/BaseHeader";
import SlideList from "../components/slide/SlideList";
import SlideRowList from "../components/slide/SlideRowList";
import SlideColumnList from "../components/slide/SlideColumnList";
import SlideColumnVirtualList from "../components/slide/SlideColumnVirtualList";
import SlideItem from "../components/slide/SlideItem";
import Indicator from "../components/Indicator";
import Video from "../components/Video";
@ -19,6 +20,7 @@ export default { @@ -19,6 +20,7 @@ export default {
SlideList,
SlideRowList,
SlideColumnList,
SlideColumnVirtualList,
SlideItem,
Indicator,
'Video1':Video,

Loading…
Cancel
Save