vue3使用video-player实现视频播放(可拖动视频窗口、调整大小)

ops/2024/12/27 12:01:47/

1.安装video-player

npm install video.js @videojs-player/vue --save

在main.js中配置全局引入

// 导入视频播放组件
import VueVideoPlayer from '@videojs-player/vue'
import 'video.js/dist/video-js.css'const app = createApp(App)
// 视频播放组件
app.use(VueVideoPlayer)

2.安装拖拽组件vue3-draggable-resizable

npm install vue3-draggable-resizable

3.使用vue3-draggable-resizable

<template><div id="app"><div class="parent"><Vue3DraggableResizable:initW="110":initH="120"v-model:x="x"v-model:y="y"v-model:w="w"v-model:h="h"v-model:active="active":draggable="true":resizable="true"@activated="print('activated')"@deactivated="print('deactivated')"@drag-start="print('drag-start')"@resize-start="print('resize-start')"@dragging="print('dragging')"@resizing="print('resizing')"@drag-end="print('drag-end')"@resize-end="print('resize-end')">This is a test example</Vue3DraggableResizable></div></div>
</template><script>
import { defineComponent } from 'vue'
import Vue3DraggableResizable from 'vue3-draggable-resizable'
//default styles
import 'vue3-draggable-resizable/dist/Vue3DraggableResizable.css'
export default defineComponent({components: { Vue3DraggableResizable },data() {return {x: 100,y: 100,h: 100,w: 100,active: false}},methods: {print(val) {console.log(val)}}
})
</script>
<style>
.parent {width: 200px;height: 200px;position: absolute;top: 100px;left: 100px;border: 1px solid #000;user-select: none;
}
</style>

具体使用方法可查看官方文档:vue3-draggable-resizable/docs/document_zh.md at main · a7650/vue3-draggable-resizable · GitHub

首先去掉右上角的缩放句柄,将一个按钮放在右上角,这样我们就可以随时使用v-if关闭这个拖拽窗口,将视频放入拖拽窗口中,代码:

<Vue3DraggableResizable v-if="cunzai" :lockAspectRatio="true":handles="['tl', 'tm', 'mr', 'ml', 'bl', 'bm', 'br']" :initW="320" :initH="180" :minW="320" :minH="180"v-model:x="x" v-model:y="y" v-model:w="w" v-model:h="h" v-model:active="active" :draggable="true":resizable="true" :parent="true" @activated="print('activated')" @deactivated="print('deactivated')"@drag-start="print('drag-start')" @resize-start="print('resize-start')" @dragging="print('dragging')"@resizing="print('resizing')" @drag-end="print('drag-end')" @resize-end="print('resize-end')"><div class="close" @click="close()"><Icon size="20" color="#1196db" type="md-close-circle" /></div><div><video-player v-if="modal1" :controls="true" :autoplay="false" :src="videoSrc" :options="playerOptions":volume="0.6" /></div></Vue3DraggableResizable>

 视频部分代码:

// 视频链接地址
const videoSrc = ref('url');  //自定义url
// 视频播放器配置
let playerOptions = ref({height: 250,width: 250, playbackRates: [0.7, 1.0, 1.5, 2.0], autoplay: false, muted: true, loop: true, preload: 'auto', language: 'zh-CN',aspectRatio: '16:9', fluid: true, notSupportedMessage: '此视频暂无法播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。controls: true,controlBar: {timeDivider: true,durationDisplay: true,remainingTimeDisplay: false,fullscreenToggle: true // 全屏按钮}
})
const cunzai = ref(false);
//关闭视频
function close() {cunzai.value = false
}

这样就可以实现视频窗口的放大缩小移动。

放大移动;


http://www.ppmy.cn/ops/145369.html

相关文章

探索 Pencils Swap 的叙事:为 DeFi 的再次爆发蓄力

Pencils Protocol 最初是 Scroll 生态上一个综合性的 DeFi 平台&#xff0c;以 Farming、Vaults 以及 Auction 等系列产品板块为基础&#xff0c;其不仅成为了 Scroll 上重要的流动性、收益枢纽&#xff0c;同时也是重要的 LaunchPad 市场以及流量池&#xff0c;为 Scroll 生态…

【保姆式】python调用api通过机器人发送文件到飞书指定群聊

当前飞书webhook机器人还不支持发送文件类型的群消息&#xff0c;它目前仅支持文本&#xff0c;富文本&#xff0c;卡片等文字类型的数据。 我们可以申请创建一个机器人应用来实现群发送文件消息。 创建飞书应用 创建飞书应用、配置权限、添加机器人 来到飞书开发者后台 创建…

人、机、环境中各有其神经网络系统

在人、机、环境的交互过程中&#xff0c;可以从神经网络系统的角度进行分析&#xff0c;尽管它们的具体实现和功能有所不同。 1. 人类神经网络系统 人类的大脑和神经系统是非常复杂的神经网络&#xff0c;它由数十亿个神经元组成&#xff0c;负责感知、思考、学习、记忆和决策等…

‘ieee-be‘ 对字节调换顺序

对于int16来说 16位 2个字节 00000000 00000001 是数字一 ieee-be是 认为字节顺序颠倒 00000001 0000000是正确的 所以对正常的1 取用ieee-be读取 会变成256 a [1;2;3;4;5;6]; fid fopen(data.bin, wb); % 写入数据到文件 % 注意&#xff1a;fwrite 会自动根据数据类型…

DataCap MongoDB Driver: 全面解析MongoDB在DataCap中的使用指南

在大数据时代&#xff0c;MongoDB作为一款广受欢迎的NoSQL数据库&#xff0c;其灵活的文档存储模型和强大的查询能力使其成为许多现代应用的首选数据存储方案。今天&#xff0c;我们将深入探讨DataCap MongoDB Driver&#xff0c;这是一个强大的工具&#xff0c;它让在DataCap环…

地理数据库Telepg面试内容整理-解释什么是地理空间数据和普通数据的区别

地理空间数据(Geospatial Data)和普通数据(Non-Spatial Data)是两类不同的数据类型,它们的核心区别在于是否包含地理位置信息,及其在应用中的处理和存储方式。 定义 ● 地理空间数据:是指与地理位置相关的数据。它不仅包含数据的属性信息(如名称、类型等),还包括空间…

AndroidStudio之logcat使用技巧

在Android开发和调试过程中&#xff0c;日志记录是一个非常重要的工具。Android系统提供了一个名为logcat的日志系统&#xff0c;开发者可以通过它查看系统和应用程序的日志输出。日志输出通常包含大量的信息&#xff0c;包括错误、警告、调试信息等。为了更有效地分析和解决问…

Chapter 03 复合数据类型-2

1.元组 tuple 元组&#xff08;tuple&#xff09;是Python中的一种数据结构&#xff0c;它与列表&#xff08;list&#xff09;类似&#xff0c;但有一个重要的区别&#xff1a;元组是不可变的&#xff0c;即一旦创建&#xff0c;其元素就不能被修改。 元组的定义&#xff1a;…