当前位置: 首页 > article >正文

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

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.kler.cn/a/454410.html

相关文章:

  • Semantic Segmentation Editor标注工具
  • 【WRF模拟】如何得到更佳的WRF模拟效果?
  • 如何为运行在 PICO 4 Ultra 设备上的项目设置外部文件读写权限?
  • 【Python运维】自动化备份与恢复系统的实现:Python脚本实战
  • ElementPlus 自定义封装 el-date-picker 的快捷功能
  • 音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现
  • HTTP、HTTPS和SOCKS5代理協議
  • WSL2上Ubuntu22.04安装Docker
  • Windows 使用 非安装版MySQL 8
  • Linux网络——TCP的运用
  • QT集成intel RealSense 双目摄像头
  • NLP 中文拼写检测开源-01-基于贝叶斯公式的拼写检查器 CSC
  • Leetcode 394-字符串解码
  • MinIO服务器文件复制(Windows环境Linux环境)
  • LLMs之o3:《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读
  • 基础排序算法
  • 如何使用 Flask 框架创建简单的 Web 应用?
  • LeetCode 3218.切蛋糕的最小总开销 I:记忆化搜索(深度优先搜索DFS)
  • AppAgent源码 (OpenAIModel 类)
  • 连锁餐饮行业数据可视化分析方案
  • CSS学习资源宝库:CSSnippets、CSS-Tricks与CodePen
  • Vite内网ip访问,两种配置方式和修改端口号教程
  • MySQL外键类型与应用场景总结:优缺点一目了然
  • Tomcat原理(6)——tomcat完整实现
  • 【UE5 C++课程系列笔记】14——GameInstanceSubsystem与动态多播的简单结合使用
  • webview+H5来实现的android短视频(短剧)音视频播放依赖控件资源