layui表格中预览视频和图片

全代码

<!DOCTYPE html>
<html><head><title>Layui:数据表格table中预览图片、视频</title><meta charset="utf-8"/><link rel="stylesheet" href="../dist/css/layui.css"><style></style>
</head><body>
<table id="demo" lay-filter="demo"></table>
<script type="text/html" id="urlTemplet">{{# if(d.type == 1) { }}<img src="{{d.url}}" alt="{{d.title}}" data-type="1" height="30" class="preview-all"/>{{# } else if (d.type == 2) { }}<video src={{d.url}} height="30" data-type="2" class="preview-all"></video>{{# } else { }}未知{{# } }}
</script>
<script type="text/html" id="typeTemplet">{{# if(d.type == 1) { }}<button class="layui-btn layui-btn-xs">图片</button>{{# } else if (d.type == 2) { }}<button class="layui-btn layui-btn-danger layui-btn-xs">视频</button>{{# } else { }}<button class="layui-btn layui-btn-primary layui-btn-xs">未知</button>{{# } }}
</script>
</body>
<script src="../dist/layui.js"></script>
<!--您的Layui代码start-->
<script type="text/javascript">layui.use(['laydate', 'laypage', 'layer', 'table', 'carousel', 'upload', 'element', 'form'], function () {var $ = layui.$, laydate = layui.laydate //日期, laypage = layui.laypage //分页, layer = layui.layer //弹层, table = layui.table //表格, carousel = layui.carousel //轮播, upload = layui.upload //上传, form = layui.form //表单, element = layui.element; //元素操作 等等.../*layer弹出一个示例*/// layer.msg('Hello World');//数据表格实例let userTable = table.render({elem: '#demo'// ,width: 312// ,url: '/static/json/table/user.json' //数据接口, data: getData(), cols: [[ //表头{field: 'id', title: 'ID', fixed: 'left', width: 100}, {field: 'username', title: '用户名'}, {field: 'url', title: '图片/视频', templet: '#urlTemplet'}, {field: 'sorts', title: '排序'}, {field: 'type', title: '类型', align: 'center', templet: '#typeTemplet'}]], page: true //开启分页, limit: 6 //默认每页记录数, limits: [3, 6, 9] //可选每页记录数});//监听点击方法$(document).on('click', '.preview-all', function (data) {// var obj = data.target.dataset;let clickObject = data.target; //点击的对象let url = clickObject.src; //图片、视频 地址let type = $(clickObject).data('type'); //点击的类型:1-图片,2-视频;3-未知if (type == 1) {previewPicture(url);} else if (type == 2) {previewVideo(url);}});//图片预览,传urlfunction previewPicture(url) {layer.photos({photos: {"title": '预览图',"id": 222,"start": 0,"data": [{"src": url}]}// ,closeBtn: 1 //是否显示关闭按钮});}//视频预览,传url,width,heightfunction previewVideo(url, width, height) {width = width ? width : '65%';height = height ? height : '65%';let content = '<video width="100%" height="90%"  controls="controls" autobuffer="autobuffer"  autoplay="autoplay" loop="loop">' +'<source src="' + url + '" type="video/mp4"></source></video>';layer.open({type: 1,maxmin: true, //打开放大缩小按钮title: '视频播放',area: [width, height],content: content,});}//文件预览function previewFile(url) {window.location.href = url;}//模拟返回表单中的数据function getData() {let data = [{"id": 10000,"username": "user-0",type: 1,sorts: 1,url: 'https://profile-avatar.csdnimg.cn/8f386c41df8f4dcd8a5b8e00fb8ffd87_qq_36025814.jpg!3'},{"id": 10001,"username": "user-1",type: 1,sorts: 1,url: 'https://csdnimg.cn/medal/51_create.png',},{"id": 10002,"username": "user-2",type: 3,sorts: 2,url: ''},{"id": 10003,"username": "user-3",type: 1,sorts: 3,url: 'https://img0.baidu.com/it/u=1546227440,2897989905&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500'},{"id": 10004,"username": "user-4",type: 2,sorts: 1,url: 'D:/TenXun/WeiXin/WeChatSpace/WeChat Files/w452339689/FileStorage/Video/2021-09/ab83a073d13fc97a774c60e8c5fa1510.mp4'},{"id": 10005,"username": "user-5",type: 2,sorts: 4,rec: 0,url: 'https://vd2.bdstatic.com/mda-ngd42cykdpyqxnjd/720p/h264/1657767198646938123/mda-ngd42cykdpyqxnjd.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1658114325-0-0-56a7e35d692939d6d0ee1d39e7e8657c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2925113439&vid=10700712952852671679&abtest=103525_2&klogid=2925113439'},{"id": 10006,"username": "user-6",type: 1,sorts: 5,url: 'https://profile-avatar.csdnimg.cn/8f386c41df8f4dcd8a5b8e00fb8ffd87_qq_36025814.jpg!3'},{"id": 10007,"username": "user-7",type: 1,sorts: 1,url: 'https://img0.baidu.com/it/u=2521851051,2189866243&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500'},{"id": 10008,"username": "user-8",type: 1,sorts: 7,url: 'https://profile-avatar.csdnimg.cn/8f386c41df8f4dcd8a5b8e00fb8ffd87_qq_36025814.jpg!3'},{"id": 10009,"username": "user-9",type: 1,sorts: 1,url: 'https://profile-avatar.csdnimg.cn/8f386c41df8f4dcd8a5b8e00fb8ffd87_qq_36025814.jpg!3'}];return data;}});
</script>
</html>

主要用到的方法

  • getData()
    getData()示例中是模拟数据,代入到自己的功能中就是请求返回的数据。
  • 点击实现预览效果
 $(document).on('click', '.preview-all', function (data) {			//点击的预览效果// var obj = data.target.dataset;let clickObject = data.target; //点击的对象let url = clickObject.src; //图片、视频 地址let type = $(clickObject).data('type'); //点击的类型:1-图片,2-视频;3-未知if (type == 1) {		//如果是1,调用预览图片方法previewPicture(url);} else if (type == 2) {		//如果是2,调用预览视频方法previewVideo(url);}});

预览方法

//图片预览,传urlfunction previewPicture(url) {layer.photos({photos: {"title": '预览图',"id": 222,"start": 0,"data": [{"src": url}]}// ,closeBtn: 1 //是否显示关闭按钮});}//视频预览,传url,width,heightfunction previewVideo(url, width, height) {width = width ? width : '65%';height = height ? height : '65%';let content = '<video width="100%" height="90%"  controls="controls" autobuffer="autobuffer"  autoplay="autoplay" loop="loop">' +'<source src="' + url + '" type="video/mp4"></source></video>';layer.open({type: 1,maxmin: true, //打开放大缩小按钮title: '视频播放',area: [width, height],content: content,});}//文件预览function previewFile(url) {window.location.href = url;}
  • 表格展示对应的数据
    主要是{field: 'url', title: '图片/视频', templet: '#urlTemplet'}
        let userTable = table.render({elem: '#demo'// ,width: 312// ,url: '/static/json/table/user.json' //数据接口, data: getData(), cols: [[ //表头{field: 'id', title: 'ID', fixed: 'left', width: 100}, {field: 'username', title: '用户名'}, {field: 'url', title: '图片/视频', templet: '#urlTemplet'}		//使用urlTemplet这个模板, {field: 'sorts', title: '排序'}, {field: 'type', title: '类型', align: 'center', templet: '#typeTemplet'}		//使用typeTemplet这个模板]], page: true //开启分页, limit: 6 //默认每页记录数, limits: [3, 6, 9] //可选每页记录数});

模板方法,

<script type="text/html" id="urlTemplet">{{# if(d.type == 1) { }}<img src="{{d.url}}" alt="{{d.title}}" data-type="1" height="30" class="preview-all"/>{{# } else if (d.type == 2) { }}<video src={{d.url}} height="30" data-type="2" class="preview-all"></video>{{# } else { }}未知{{# } }}
</script>

url中就是我们后端的具体存储地址,
如果url是本地地址,会报错,需要配置静态资源
在这里插入图片描述

    @Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 配置静态资源registry.addResourceHandler("/video/**").addResourceLocations("file:"+videoUrl);	//变量videoUrl值是/opt/video/,只要访问路径是video/**这种,就去/opt/video目录}

文件实际路径是/opt/video/ab83a073d13fc97a774c60e8c5fa1510.mp4,然后如图,替换url路径,最终路径就是http://192.168.0.105:8082/video/ab83a073d13fc97a774c60e8c5fa1510.mp4,然后返回给前端
在这里插入图片描述

来源

html代码来源:https://blog.csdn.net/qq_36025814/article/details/125860454,后端代码自己整理,有不明白的留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/225440.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模式识别与机器学习-判别式分类器

模式识别与机器学习-判别式分类器 生成式模型和判别式模型的区别线性判别函数多分类情况多分类情况1多分类情况2多分类情况3 例题 广义线性判别函数实例 分段线性判别函数Fisher线性判别感知机算法例&#xff1a;感知机多类别分类 谨以此博客作为学习期间的记录 生成式模型和判…

D9741 PWM控制器电路,定时闩锁、短路保护电路,输出基准电压(2.5V) 采用SOP16封装

D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。 主要特点&#xff1a;● 高精度基准电路 ● 定时闩锁、短路保护电路 ● 低电压输入时误操作保护电路 ● 输出基准电…

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.骑手优化算法4.实验参数设定5.算法结果6.…

【WPF】使用Behavior以及ValidationRule实现表单校验

文章目录 使用ValidationRule实现检测用户输入EmptyValidationRule 非空校验TextBox设置非空校验TextBox设置非空校验并显示校验提示 结语 使用ValidationRule实现检测用户输入 EmptyValidationRule是TextBox内容是否为空校验&#xff0c;TextBox的Binding属性设置ValidationRu…

使用 Elasticsearch 检测抄袭 (二)

我在在之前的文章 “使用 Elasticsearch 检测抄袭 &#xff08;一&#xff09;” 介绍了如何检文章抄袭。这个在许多的实际使用中非常有意义。我在 CSDN 上的文章也经常被人引用或者抄袭。有的人甚至也不用指明出处。这对文章的作者来说是很不公平的。文章介绍的内容针对很多的…

解决Pycharm pip安装模块太慢问题,pycharm2022没有manage repositories配置镜像源

解决方案 方法清华阿里云中国科技大学华中理工大学 或者直接-i 加镜像 方法 URL写下面任意一个 清华 https://pypi.tuna.tsinghua.edu.cn/simple阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学 http:/…

前端项目重构的深度思考和复盘

摘要&#xff1a; 项目重构是每一家稳定发展的互联企业的必经之路, 就像一个产品的诞生, 会经历产品试错和产品迭代 一样, 随着业务或新技术的不断发展, 已有架构已无法满足更多业务扩展的需求, 所以只有通过重构来让产品“进化”, 才能跟上飞速发展的时代浪潮. 技术因素 早期…

TVS 管选型与 ESD 防护设计

文章目录 ESD 防护设计 TVS管的基础特性 TVS管的选型方法 TVS管布局细节 参考文献 ESD 防护设计 静电防护设计是让电路板外接的各类金属按钮开关在接触到外界空气放电或接触放电时&#xff0c;在这种瞬间出现的大能量注入到电路板后&#xff0c;能够通过某种设计好的通道泄…

python(上半部分)

第一部分 1、input()语句默认结果是字符串 2、type()可以判断变量的类型 3、input()输出语句 &#xff08;默认为字符串类型&#xff09; 4、命名规则&#xff1a;中文、英文、数字、_&#xff0c;数字不可开头&#xff0c;大小写敏感。 5、 %s&#xff1a;将内容转换成…

vue3+ts 可视化大屏无限滚动table效果实现

注意&#xff1a;vue3版本需使用 vue3-seamless-scroll npm npm install vue3-seamless-scroll --save页面引入 TS import { Vue3SeamlessScroll } from "vue3-seamless-scroll";代码使用&#xff08;相关参数可参考&#xff1a;https://www.npmjs.com/package/vu…

Java整合APNS推送消息-IOS-APP(基于.p12推送证书)

推送整体流程 1.在开发者中心申请对应的证书&#xff08;我用的是.p12文件&#xff09; 2.苹果手机用户注册到APNS&#xff0c;APNS将注册的token返回给APP&#xff08;服务端接收使用&#xff09;。 3.后台服务连接APNS&#xff0c;获取连接对象 4.后台服务构建消息载体 5.后台…

html table+css实现可编辑表格

要实现可编辑的 HTML 表格&#xff0c;你可以使用 JavaScript 和 HTML5 的 contenteditable 属性。 <!DOCTYPE html> <html> <head><style>table {border-collapse: collapse;width: 100%;}th, td {border: 1px solid black;padding: 8px;text-align:…

LENOVO联想笔记本小新Pro 14 IRH8 2023款(83AL)电脑原装出厂Win11系统恢复预装OEM系统

链接&#xff1a;https://pan.baidu.com/s/1M1iSFahokiIHF3CppNpL4w?pwdzr8y 提取码&#xff1a;zr8y 联想原厂系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等自带的预装软件程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件…

关于Zoom ZTP和AudioCodes Ltd桌面电话缺陷暴露,导致用户遭受窃听的动态情报

一、基本内容 近期SySS安全研究员发布分析报告显示&#xff0c;Zoom的零接触&#xff08;ZTP&#xff09;和AudioCodes Ltd桌面电话配置功能中发现高危漏洞&#xff0c;可以获得对设备的完全远程控制并不受限制的访问可以被武器化&#xff0c;以窃听房间或电话、通过设备并攻击…

使用poi将pptx文件转为图片详解

目录 项目需求 后端接口实现 1、引入poi依赖 2、代码编写 1、controller 2、service层 测试出现的bug 小结 项目需求 前端需要上传pptx文件&#xff0c;后端保存为图片&#xff0c;并将图片地址保存数据库&#xff0c;最后大屏展示时显示之前上传的pptx的图片。需求看上…

Jmeter的接口自动化测试

在去年实施了一年的三端&#xff08;PC、无线M站、无线APP【Android、IOS】&#xff09;后&#xff0c;今年7月份开始&#xff0c;我们开始进行接口自动化的实施&#xff0c;目前已完成了整个框架的搭建以及接口的持续测试集成。今天做个简单的分享。 在开始自动化投入前&#…

[Angular] 笔记 10:服务与依赖注入

什么是 Services & Dependency Injection? chatgpt 回答&#xff1a; 在 Angular 中&#xff0c;Services 是用来提供特定功能或执行特定任务的可重用代码块。它们可以用于处理数据、执行 HTTP 请求、管理应用程序状态等。Dependency Injection&#xff08;依赖注入&#…

安装Kubernetes1.23、kubesphere3.4、若依项目自动打包部署到K8S记录

1.安装kubernetes1.23详细教程 kubernetes(k8s)集群超级详细超全安装部署手册 - 知乎 2.安装rancher动态存储 kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml3.安装kubesphere3.4 准备工作 您…

XUbuntu22.04之跨平台容器格式工具:MKVToolNix(二百零三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

电路设计(7)——窗口比较器的multism仿真

1.功能设计 构建一个窗口比较器的电路&#xff0c;在输入电压大于3.5v&#xff0c;小于0.8v时&#xff0c;蜂鸣器报警&#xff0c;输入电压在0.8v到3.5v之间时&#xff0c;不报警。 整体电路如下&#xff1a; 2.设计思路 在输入端&#xff0c;采取电阻分压的方式&#xff0c;输…