【sgVideoDialog】自定义组件:基于video标签和el-dialog构建弹窗预览视频文件

news/2024/12/13 23:44:53/

sgVideoDialog源码

<template><div :class="$options.name" v-if="visible"><!-- 如果不加v-if="visible"弹窗中使用el-tabs组件就会死循环卡死,这个是elementUI的bug --><el-dialog:append-to-body="true":close-on-click-modal="true":close-on-press-escape="true":custom-class="`${$options.name}-el-dialog`":destroy-on-close="true":fullscreen="false":show-close="true":title="`${form.name || `视频`}`":width="`1000px`":visible.sync="visible"@keyup.ctrl.enter.native="save"style="animation: none"v-loading="loading":element-loading-text="elementLoadingText"><div class="video-container"><!-- 弹窗内容 --><video:autoplay="typeof form.autoplay === 'undefined' ? true : form.autoplay"class="video"controls:loop="form.loop":muted="form.muted"playsinline="true"preloadref="video":src="form.src"webkit-playsinline="true"/></div></el-dialog></div>
</template>
<script>
export default {name: "sgVideoDialog",components: {},data() {return {loading: false, //加载状态elementLoadingText: ``, //加载提示文字visible: false,form: {}, //表单信息disabled: false, //是否只读labelWidth: `120px`,};},props: ["value", "data"],computed: {},watch: {loading(newValue, oldValue) {newValue || (this.elementLoadingText = ``);},value: {handler(d) {this.visible = d;},deep: true,immediate: true,},visible(d) {this.$emit("input", d);// 每次显示的时候,重置一些参数值if (d) {}},data: {handler(newValue, oldValue) {//console.log(`深度监听${this.$options.name}:`, newValue, oldValue);if (Object.keys(newValue || {}).length) {this.form = JSON.parse(JSON.stringify(newValue));this.disabled = this.form.disabled;} else {this.disabled = false; //添加的时候,编辑态this.form = {// 默认字段名: 缺省值,};}},deep: true, //深度监听immediate: true, //立即执行},},created() {},mounted() {},destroyed() {},methods: {valid(d) {if (!this.form.NAME) return this.$message.error(this.$refs.NAME.$attrs.placeholder);},save() {if (this.valid()) return;if (this.form.ID) {// 修改} else {// 添加}let data = {...this.form,sgLog: `前端请求来源:${this.$options.name}添加或修改`,};this.$f.保存数据接口调用方法({...data,cb: (d) => {this.$emit(`save`, this.form);this.cancel();},},this);},cancel() {this.visible = false;},},
};
</script>
<style lang="scss" scoped>
.sgVideoDialog {
}.el-dialog__wrapper {/*遮罩模糊*/backdrop-filter: blur(5px);
}
>>> .sgVideoDialog-el-dialog {border-radius: 30px;box-shadow: 0 10px 50px 0 #00000033;//关闭按钮.el-dialog__headerbtn {.el-dialog__close {background-color: #409eff;border-radius: 88px;box-sizing: border-box;padding: 5px;color: white;}&:hover {.el-dialog__close {background-color: #1f75d5;color: white;}}}.video-container {margin: -20px 0px -10px;border-radius: 20px;overflow: hidden;height: calc(100vh - 180px);display: flex;flex-direction: column;width: 100%;height: 560px;overflow: hidden;/*背景图片*/background-image: url("~@/../static/components/sgVideoPlayer/poster.png");background-repeat: repeat;background-position: center;.video {transition: 0.382s;width: 100%;height: 100%;object-fit: contain;object-position: center;background: transparent;}}
}
</style>

应用

<sgVideoDialog :data="data_sgVideoDialog" v-model="show_sgVideoDialog" />data_sgVideoDialog: {src:`视频路径`, name:`视频标题`,},
show_sgVideoDialog: false,


http://www.ppmy.cn/news/1554879.html

相关文章

Python程序是一个基于Tkinter的GUI应用程序,用于录制和回放用户的鼠标和键盘操作

总结 这个Python程序是一个基于Tkinter的GUI应用程序&#xff0c;用于录制和回放用户的鼠标和键盘操作。主要功能包括&#xff1a; 录制功能&#xff1a; 用户可以选择录制哪些类型的动作&#xff08;如单击、双击、拖动、滚动、按键、移动&#xff09;。通过按 F1 键可以开始…

ThinkPHP框架审计--基础

基础入门 搭建好thinkphp 查看版本方法&#xff0c;全局搜version 根据开发手册可以大致了解该框架的路由 例如访问url http://127.0.0.1:8094/index.php/index/index/index 对应代码位置 例如在代码下面添加新方法 那么访问这个方法的url就是 http://127.0.0.1:8094/index.…

视频自定义全屏功能——兼容安卓和ios

视频窗口 <div class"relative bg-black" style"width: 100%; height: 30vh"><div id"currentVideo" class"w100 h100 absolute"><div class"absolute flex_r w100" style"bottom: 0"><divv…

【OpenCV】视频录制

介绍 在 OpenCV 中&#xff0c;视频录制涉及到读取摄像头或视频文件的帧&#xff0c;并将这些帧保存到新的视频文件中。为了实现这个过程&#xff0c;你需要创建一个 VideoCapture 对象来获取视频帧&#xff0c;以及一个 VideoWriter 对象来保存视频帧。以下是使用 OpenCV 进行…

四、vue多事件处理器

<template> <view> <!-- 这两个 one() 和 two() 将执行按钮点击事件 --> <button click"one($event); two($event)"> Submit </button> </view> </t…

经纬度解析到省市区【开源】

现在业务中有需要解析经纬度到省市区。 按理说可以直接使用高德&#xff0c;百度之类的。 但是老板太抠。于是去找开源项目。找了一圈&#xff0c;数据都太老了&#xff0c;而且有时候编码还不匹配。 所以诞生了这个项目&#xff0c;提供完整的一套省市区编码和定位反解析。…

软考中级-软件设计师通过心路经验分享

执念&#xff0c;第四次终于通过了 没买书&#xff0c;下班后每天2小时&#xff0c;四个2个月终于过了 学习经验&#xff1a; 1.下班后学习真的靠毅力&#xff0c;和上学的时候考证不是一个状态&#xff0c;大家要及时调整&#xff0c;否则过程很痛苦 2.失败三次的经验&#xf…

自定义生成小游戏提现截图工具的设计与实现

摘要 在游戏开发和测试过程中&#xff0c;开发者经常需要生成游戏截图以展示游戏界面或用于测试。本文将介绍一个自定义生成小游戏截图的工具&#xff0c;该工具可以帮助开发者快速生成游戏界面截图&#xff0c;以满足不同场景下的需求。 视频演示 引言 随着移动游戏市场的迅…