仿抖音滑动切换视频

前言

最近在做一个短视频平台的项目,是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里面还有现成的,就直接套用了,稍微改吧改吧就完成了抖音的一个视频切换播放的功能

关于鼠标上下滑动播放、滚动滑动切换,也是一样的添加监听,然后判断一下,套用这个方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值