前言
最近在做一个短视频平台的项目,是web端的,为了更好的用户体验,肯定是抖音、快手的这种上下滑动切换是最方便、快捷的
插件使用
这里使用的视频插件是 vue3-video-play,具体的安装可以到前往官网,这里就不做描述了
在main.js中引入
import vue3videoPlay from "vue3-video-play"; // 引入组件
import "vue3-video-play/dist/style.css"; // 引入css
app.use(vue3videoPlay);
页面使用
<template>
<div class="home">
<div class="player-container" style="overflow-y:auto">
<vue3VideoPlay
v-bind="options"
@play="onPlayer"
@pause="onPause"
poster="https://cdn.jsdelivr.net/gh/xdlumia/files/video-play/ironMan.jpg"
/>
</div>
</div>
</template>
<script setup>
import { reactive } from "vue";
import video from "@/assets/video/test.mp4";
const options = reactive({
width: "100%", //播放器宽度
height: "35em", //播放器高度
color: "#fff", //主题色
title: "测试视频", //视频名称
src: video, //视频源
muted: false, //静音
webFullScreen: false,
speedRate: ["0.75", "1.0", "1.25", "1.5", "2.0","3.0","4.0","10.0"], //播放倍速
autoPlay: false, //自动播放
loop: false, //循环播放
mirror: false, //镜像画面
ligthOff: false, //关灯模式
speed:false,// 关闭进度条
currentTime:0,// 从第60s开始播放
volume: 0.3, //默认音量大小
control: true, //是否显示控制
controlBtns: [
"audioTrack",//音轨切换
"quality",//视频质量切换
"speedRate",//速率切换
"volume",//音量
"setting",//设置
"pip",// 画中画
"pageFullScreen",//网页全屏
"fullScreen",// 全屏
], //显示所有按钮,
});
const onPlayer = (e)=>{
console.log('播放',e.type)
}
const onPause = (e)=>{
console.log('暂停播放',e.type)
}
</script>
<style scoped>
.home {
min-height: calc(100vh - 100px);
background: #000;
border-radius: 10px;
padding: 30px;
box-sizing: border-box;
}
</style>
以上只是这个组件的基本使用,下面会详细讲解视频切换、播放、暂停等功能
功能实现
模板代码
<template>
<div class="home">
<el-carousel
height="75vh"
direction="vertical"
motion-blur
autoplay="false"
trigger="click"
@change="onChange"
>
<el-carousel-item
v-for="(item, index) in data"
:key="index"
class="player-container"
style="overflow-y: auto"
>
<vue3VideoPlay
:ref="setItemRef"
v-bind="options"
:src="item.src"
class="video"
:title="item.title"
poster="https://cdn.jsdelivr.net/gh/xdlumia/files/video-play/ironMan.jpg"
/>
</el-carousel-item>
</el-carousel>
</div>
</template>
功能代码
<script setup>
import { ref, reactive } from "vue";
import video from "@/assets/video/test.mp4";
// 公共配置
const options = reactive({
width: "100%",
height: "35em",
color: "#fff",
speedRate: ["0.75", "1.0", "1.25", "1.5", "2.0", "5.0", "10.0", "16.0"],
autoPlay: false,
loop: true,
controlBtns: [
"audioTrack",
"speedRate",
"volume",
"setting",
"pip",
"pageFullScreen",
"fullScreen",
],
});
//上一次播放的视频,当然这里我是根据顺序来进行的,这里的0 就是第一个视频,可以在挂载函数中去进行初始化播放第一个视频
const oldVideo = ref(0);
// 视频数据
const data = ref([
{
title: "title1",
src: video,
isPlaying: false,
},
{
title: "title2",
src: video,
isPlaying: false,
}
]);
// 装载ref的数组
const itemRefs = ref([]);
// 初始化ref数组
const setItemRef = (el) => {
if (el) {
itemRefs.value.push(el);
}
};
// 当点击时,切换视频并播放视频
const onChange = (e) => {
itemRefs.value.forEach((item) => item.pause());
const currentVideo = itemRefs.value[e];
currentVideo.play();
itemRefs.value[oldVideo.value].pause();
oldVideo.value = e;
};
</script>
样式代码
<style scoped>
.home {
min-height: calc(100vh - 100px);
background: #000;
border-radius: 10px;
padding: 30px;
box-sizing: border-box;
}
.player-container {
margin-bottom: 100px;
width: 100%;
height: auto;
}
</style>
本来想手写切换的样式代码的,但是,突然想到有轮播图这个东西,并且ele里面还有现成的,就直接套用了,稍微改吧改吧就完成了抖音的一个视频切换播放的功能
关于鼠标上下滑动播放、滚动滑动切换,也是一样的添加监听,然后判断一下,套用这个方法即可。