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

Vue+element-ui,实现表格渲染缩略图,鼠标悬浮缩略图放大,点击缩略图播放视频(一)

Vue+element-ui,实现表格渲染缩略图,鼠标悬浮缩略图放大,点击缩略图播放视频

  • 前言
  • 整体代码
  • 预览图
  • 具体分析
    • 基础结构
    • 主要标签作用
      • video
      • el-popover

前言

如标题,需要实现这样的业务
此处文章所实现的,是静态视频资源。
注意打包方式(关系路径写法):

  1. 现代打包项目(Vue/React):
    /favicon.ico 直接引用 public 目录资源
  2. 传统静态项目:
    ../public/favicon.ico../表示返回上一路径)

整体代码

template

<el-table-columnlabel="操作"align="center"class-name="small-padding fixed-width"width="310px"
><template slot-scope="scope"><template v-if="scope.row.callType === 0"><audio:id="'audio-' + scope.row.sipCallId"controls:src="scope.row.audioUrl"@play="loadAudio(scope.row)"preload="none">浏览器不支持播放</audio></template><template v-else><!--    视频播放      --><el-popover trigger="hover" placement="right"><imgslot="reference"src="/test(1).png"alt="加载失败"class="image"style="width: 80px;height: 80px"@error="handleImageError"/><div class="video-wrapper" @mouseleave="closeVideo"><videocontrolssrc="/test.mp4"@play=""@pause="videoPause()"@ended="videoEnded()"poster="/test(1).png"preload="none"style="width: 400px;height:400px;background-color: rgba(0,0,0,0.18)"ref="videoRef"></video><div class="video-overlay" v-if="videoOverlayFlag"><div class="play-button" @click="handlePlay">{{ videoPlayTitle ? '暂停' : '播放' }}</div></div></div></el-popover></template></template>
</el-table-column>

data()

videoPlayTitle: false,
videoOverlayFlag: true,

method()

    closeVideo() {const video = this.$refs.videoRef;video.pause()},videoEnded() {this.videoOverlayFlag = truethis.videoPlayTitle = false;},videoPause() {this.videoOverlayFlag = truethis.videoPlayTitle = true;},handlePlay() {const video = this.$refs.videoRef;video.play().then(() => {this.videoOverlayFlag = false;this.videoPlayTitle = false;}).catch(error => {this.videoOverlayFlag = truethis.videoPlayTitle = false;});},handleImageError(event) {event.target.src = '/test(1).png'; // 加载失败时显示的图片},formatCallType(type) {return type === 0 ? '语音' : type === 1 ? '视频' : '未知';},

css

<style rel="stylesheet/scss" lang="scss">//全屏按钮
video::-webkit-media-controls-fullscreen-button {display: none;
}
//播放按钮
video::-webkit-media-controls-play-button {display: none;
}.video-wrapper {position: relative;display: inline-block;
}.video-overlay {position: absolute;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(255, 255, 240, 0.3); /* 半透明乳白色遮罩 */display: flex;align-items: center;justify-content: center;cursor: pointer;
}.play-button {width: 60px;height: 60px;border-radius: 50%;background-color: rgba(0, 0, 0, 0.7);color: white;font-size: 16px;display: flex;align-items: center;justify-content: center;transition: all 0.3s ease;box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
}
</style>

预览图

在这里插入图片描述

具体分析

基础结构

<el-table-column><template slot-scope="scope"><template v-if="scope.row.callType === 0"><audio></audio></template><template v-else><el-popover trigger="hover" placement="right"><img/><div class="video-wrapper" @mouseleave="closeVideo"><video></video><div class="video-overlay" v-if="videoOverlayFlag"><div class="play-button" @click="handlePlay">{{ videoPlayTitle ? '暂停' : '播放' }}</div></div></div></el-popover></template></template>
</el-table-column>

主要标签作用

video

实现视频播放,使用的是原生的video标签

el-popover

http://www.lryc.cn/news/2392287.html

相关文章:

  • day13 leetcode-hot100-22(链表1)
  • 【Oracle】DQL语言
  • HUAWEI华为MateBook D 14 2021款i5,i7集显非触屏(NBD-WXX9,NbD-WFH9)原装出厂Win10系统
  • 【STIP】安全Transformer推理协议
  • leetcode hot100刷题日记——27.对称二叉树
  • 高考加油(Python+HTML)
  • 贪心算法应用:Ford-Fulkerson最大流问题详解
  • UE5 Niagara 如何让四元数进行旋转
  • 从“黑箱”到透明化:MES如何重构生产执行全流程?
  • 探索Linux互斥:线程安全与资源共享
  • JWT安全:假密钥.【签名随便写实现越权绕过.】
  • Python爬虫实战:抓取百度15天天气预报数据
  • RV1126 + FFPEG多路码流项目
  • NodeJS 基于 Koa, 开发一个读取文件,并返回给客户端文件下载,以及读取文件形成列表和文件删除的代码演示
  • 为什么在我的Flask里面有两个路由,但是在网页里有一个却不能正确访问到智能体
  • 哈工大计算机系统2024大作业——Hello的程序人生
  • 2025年软件测试面试八股文(含答案+文档)
  • 【仿生系统】qwen的仿生机器人解决方案
  • Flutter3.22适配运行鸿蒙系统问题记录
  • 秋招Day10 - JVM - 内存管理
  • Spring Boot 3.5.0中文文档上线
  • Redisson学习专栏(一):快速入门及核心API实践
  • Pandas学习入门一
  • 基于Piecewise Jerk Speed Optimizer的速度规划算法(附ROS C++/Python仿真)
  • 关于 JavaScript 版本、TypeScript、Vue 的区别说明, PHP 开发者入门 Vue 的具体方案
  • 中断和信号详解
  • STM32八股【10】-----stm32启动流程
  • 游戏引擎学习第312天:跨实体手动排序
  • 智警杯备赛--数据库管理与优化及数据库对象创建与管理
  • MySQL 在 CentOS 7 环境下的安装教程