欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > vue3+ts实时播放视频,视频分屏

vue3+ts实时播放视频,视频分屏

2024/11/30 13:24:40 来源:https://blog.csdn.net/no_one_but_you/article/details/143201138  浏览:    关键词:vue3+ts实时播放视频,视频分屏

使用vue3以及播放视频组件Jessibuca
Jessibuca地址
使用循环个数来实现分屏

效果图,四屏在这里插入图片描述
九屏
在这里插入图片描述

dom代码

<div class="icon"><div class="icon-box"><span class="text">分屏:</span><el-icon class="iconsty" @click="oneVideo" style="margin-right: 24px;" title="单屏"><ele-FullScreen /></el-icon><el-icon class="iconsty" @click="fourVideo" style="margin-right: 24px;" title="四屏"><ele-Menu /></el-icon><el-icon class="iconsty" @click="nightVideo" title="九屏"><ele-Grid /></el-icon></div><div class="right-tetx" @click="allVedio" style="margin-right: 24px;" title="全屏">全屏</div>
</div>
<div class="videobox"><JessibucaDemo ref="JessibucaDemoRef" @click="videoBtn(index, item)" :style="liveStyle" v-for="(item, index) in state.spilt" :key="index" :class="state.videoIndex === index ? 'PlayVideo active' :'PlayVideo'" />
</div>

事件

import { reactive, ref } from 'vue';
const state = reactive({spilt: 1,videoIndex: 0
})
// 分频样式
const liveStyle = computed<any>(() => {let style = { width: '100%', height: '100%' }switch (state.spilt) {case 4:style = { width: '50%', height: '50%' }breakcase 9:style = { width: '33.33%', height: '33.333%' }break}return style
});// 单频
const oneVideo = () => {state.videoIndex = 0state.spilt = 1
}
// 四频
const fourVideo = () => {state.videoIndex = 0state.spilt = 4
}
// 九频
const nightVideo = () => {state.videoIndex = 0state.spilt = 9
}

样式

.icon{display: flex;justify-content: space-between;z-index: 999;color: #000;.icon-box{display: flex;align-items: center;.text{font-size: 20px;}.iconsty{font-size: 20px;cursor: pointer;}}.right-tetx{font-size: 20px;cursor: pointer;}
}
.videobox{height: 70vh;display: flex;width: 100%;align-content: flex-start;justify-content: center;flex-wrap: wrap;
}
// 实时视频
.PlayVideo{position: relative;background-color: #000;.borderBox{z-index: 99999;position: absolute;width: 100% !important;top: 0;left: 0;height: 100% !important;border: 1px solid blue;}
}
.PlayVideo {border: 1px solid #505050;
}
::v-deep .is-active{background-color: rgba(20, 157, 251, 1);color: #fff;
}
.active{border: 2px solid blue !important;
}

全屏事件
下载依赖包
npm i screenfull@6.0.2

// 全屏
import screenfull from 'screenfull'
const allVedio = () => {//获取dom元素节点来实现指定元素全屏展示let el = document.querySelector('.videobox')//screenfull.isEnabled  此方法返回布尔值,判断当前能不能进入全屏if (!screenfull.isEnabled) {return false}//screenfull.toggle 此方法是执行全屏化操作。如果已是全屏状态,则退出全屏screenfull.toggle(el)
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com