layui+thymeleaf+jquery实现多图片,多视频的上传、预览、放大、编辑功能

layui+thymeleaf+jquery实现多图片,多视频的上传、预览、放大、编辑功能


在这里插入图片描述

html:

<!--多图片上传-->
<div class="layui-row layui-col-space10"><div class="layui-form-item"><div class="layui-form-item layui-form-text"><label class="pm-form-label">多图片上传</label><div class="pm-input-block"><button type="button" class="layui-btn" id="ID-upload-demo-btn-photo"><i class="layui-icon layui-icon-upload"></i> 多图片上传</button><blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 11px;">预览图:<div class="layui-upload-list" id="upload-demo-preview-photo"><th:block th:if="${pmRepair!=null}"><th:block th:each="photo:${pmRepair.photoUrlList }"><div class="photo-item-box"><img class="video-item enlarge-img" th:src="${photo}"  alt="" style="width: 100px; height: 100px;"><div class="photo-item-del"  th:ids="${photo}">删除</div></div></th:block></th:block></div><!--放大镜--><div id="enlarge-div"><div id="inner-div"><img id="big-img" src=""/></div></div></blockquote></div></div></div>
</div><!--多视频上传-->
<div class="layui-row layui-col-space10"><div class="layui-form-item"><div class="layui-form-item layui-form-text"><label class="pm-form-label">多视频上传</label><div class="pm-input-block"><button type="button" class="layui-btn" id="ID-upload-demo-btn-video"><i class="layui-icon layui-icon-upload"></i> 多视频上传</button><blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 11px;">预览图:<div class="layui-upload-list" id="upload-demo-preview-video"><th:block th:if="${pmRepair!=null}"><th:block  th:each="video:${pmRepair.videoUrlList }"><div class="video-item-box"><video class="video-item" controls controlslist="" width="100px" height="100px" ><source th:src="${video}" type="video/mp4" /></video><div class="video-item-del"  th:ids="${video}">删除</div></div></th:block></th:block></div></blockquote></div></div></div>
</div>

js:

<script th:inline="javascript">// 多图片上传var photoUrlList=[[${pmRepair?.photoUrlList}]] ? [[${pmRepair?.photoUrlList}]] :[];// 多视频上传var videoUrlList=[[${pmRepair?.videoUrlList}]] ? [[${pmRepair?.videoUrlList}]] : [];// 多图片上传upload.render({elem: '#ID-upload-demo-btn-photo',url: '/comm/xxxxx', // 上传接口。multiple: true,accept:'images',before: function(obj){// 预读本地文件示例,不支持ie8obj.preview(function(index, file, result){$('#upload-demo-preview-photo').append(`<div class="photo-item-box"><img class="video-item enlarge-img" src="${result}" alt="" style="width: 100px; height: 100px;"><div class="photo-item-del"  ids="">删除</div></div>`)});},done: function(res){// 上传完毕photoUrlList.push(res.backurl)// 删除标签上重新赋予地址$(".photo-item-del").each(function (index,item){// 重新渲染地址到删除标签上for(let i=0;i<photoUrlList.length;i++){if(index==i){$(this).attr("ids",photoUrlList[i])}}})$(".enlarge-img").click(function () {$("#big-img").attr("src", $(this).attr("src"));//设置#big-img元素的src属性$("#enlarge-div").fadeIn("fast");//显示弹出层$("#enlarge-div").click(function () {//关闭弹出层$(this).fadeOut("fast");});})}});// 多视频上传upload.render({elem: '#ID-upload-demo-btn-video',url: '/comm/xxxxxxxx', // 上传接口。multiple: true,accept:'video',before: function(obj){// 预读本地文件示例,不支持ie8obj.preview(function(index, file, result){$('#upload-demo-preview-video').append(`<div class="video-item-box"><video class="video-item" controls width="100px" height="100px" ><source src="${result}" type="video/mp4" /></video><div class="video-item-del" ids="">删除</div></div>`)});},done: function(res){// 上传完毕videoUrlList.push(res.backurl)// 删除标签上重新赋予地址$(".video-item-del").each(function (index,item){// 重新渲染地址到删除标签上for(let i=0;i<videoUrlList.length;i++){if(index==i){$(this).attr("ids",videoUrlList[i])}}})}});// 图片删除$(document).on("click",".photo-item-del",function (){let ids=$(this).attr("ids");let index=photoUrlList.indexOf(ids);if(index!=-1){photoUrlList.splice(index,1)$(this).parent().remove()}})// 视频删除$(document).on("click",".video-item-del",function (){let ids=$(this).attr("ids");let index=videoUrlList.indexOf(ids);if(index!=-1){videoUrlList.splice(index,1)$(this).parent().remove()}})// 图片放大效果$(".enlarge-img").click(function () {$("#big-img").attr("src", $(this).attr("src"));//设置#big-img元素的src属性$("#enlarge-div").fadeIn("fast");//显示弹出层$("#enlarge-div").click(function () {//关闭弹出层$(this).fadeOut("fast");});})
</script>

css:

blockquote{margin-left: 60px;margin-right: 60px;
}.video-item-box,.photo-item-box{display: inline-block;width: 100px;height: 136px;text-align: center;border: 1px solid #eee;
}
.video-item-del,.photo-item-del{color: #0B7500;cursor: pointer;
}
.photo-item-del{margin-top: 6px;
}/*放大镜效果*/
#enlarge-div {position: fixed;top: 0;left: 0;background: rgba(0, 0, 0, 0.7);z-index: 2;width: 100%;height: 100%;display: none;
}#enlarge-div:hover {cursor: zoom-out;
}#enlarge-div #inner-div {width: 80%;height: 85%;margin: 0 auto;position: relative;top: 50%;transform: translateY(-50%);
}#enlarge-div #inner-div #big-img {/*width: 100%;*//*height: 100%;*/max-width: 100%;max-height: 100%;position: absolute;left: 50%;top: 50%;transform: translateY(-50%) translateX(-50%);
}.enlarge-img {cursor: zoom-in;transition: all 0.6s;border: 1px solid #eee;
}.enlarge-img:hover {transform: scale(1.4);
}

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

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

相关文章

mybatis xml 文件中引用Java类的静态方法

MyBatis-Plus 支持在 XML 映射文件中使用 ${} 来直接嵌入字符串&#xff0c;以及使用 #{} 来引用传入参数。但是&#xff0c;$ 的使用需要小心&#xff0c;因为它会直接将参数内容嵌入到 SQL 语句中&#xff0c;这可能会导致 SQL 注入问题。 在 MyBatis-Plus 中&#xff0c;如果…

Android 防止重复点击

1.第一种方式&#xff1a; private static final int MIN_DELAY_TIME 2000; // 两次点击间隔不能少于2000ms private static long lastClickTime System.currentTimeMillis(); public static boolean isFastClick() { boolean flag true; long currentClickTime …

苹果电脑怎么清理缓存和垃圾 mac如何关闭正在运行的程序 苹果电脑怎么清理后台

苹果电脑以其出色的性能和用户友好的界面而广受好评&#xff0c;但在使用过程中&#xff0c;后台程序的堆积可能会影响到系统的运行效率。太多应用和进程在后台默默运行&#xff0c;就像是无形的背包&#xff0c;让你的Mac背负了太多不必要的重量。不过&#xff0c;别担心&…

08、Tomcat 部署及优化

8.1 Tomcat概述 8.1.1 Tomcat介绍 自从 JSP 发布之后,推出了各式各样的 JSP 引擎。Apache Group 在完成 GNUJSP1.0的开发以后&#xff0c;开始考虑在 SUN 的 JSWDK 基础上开发一个可以直接提供 Web 服务的 JSP服务器&#xff0c;当然同时也支持 Servlet, 这样 Tomcat 就诞生…

使用LSTM完成时间序列预测

c 在本教程中&#xff0c;我们将介绍一个简单的示例&#xff0c;旨在帮助初学者入门时间序列预测和 PyTorch 的使用。通过这个示例&#xff0c;你可以学习如何使用 LSTMCell 单元来处理时间序列数据。 我们将使用两个 LSTMCell 单元来学习从不同相位开始的正弦波信号。模型在…

MYSQL 七、mysql 日志与备份

一、其他数据库日志 千万不要小看日志。很多看似奇怪的问题&#xff0c;答案往往就藏在日志里。很多情况下&#xff0c;只有通过查看日志才 能发现问题的原因&#xff0c;真正解决问题。所以&#xff0c;一定要学会查看日志&#xff0c;养成检查日志的习惯&#xff0c;对提升你…

重复图片查找:巧用Python和OpenCV进行图像哈希与汉明距离检测以从海量图片中找出重复图片

重复图片查找&#xff1a;巧用Python和OpenCV进行图像哈希与汉明距离检测以从海量图片中找出重复图片 1. 导言2. 环境准备3. 图像哈希&#xff08;pHash&#xff09;原理4. 汉明距离原理5. 代码实现导入必要的库图像哈希计算函数汉明距离计算函数查找重复图片函数示例使用 在处…

乐鑫AWS IoT ExpressLink方案,简化物联网设备连接AWS IoT服务

在现代科技迅速发展的今天&#xff0c;物联网&#xff08;IoT&#xff09;已经成为连接物理世界与数字世界的重要桥梁&#xff0c;越来越多的设备开始接入网络&#xff0c;实现智能化控制。 在这个大背景下&#xff0c;乐鑫携手亚马逊&#xff0c;推出了AWS IoT ExpressLink方…

Linux:Linux发展史

大家好&#xff01;此篇文章并非技术博文&#xff0c;而是简单了解Linux的时代背景和发展史&#xff0c;只有知其所以然才能让我们更好地让走进Liunx的世界&#xff01; 一、计算机的发展历史背景 首先我们要知道&#xff0c;早期大多数科技的进步都是以国家的对抗为历史背景的…

Java语言程序设计基础篇_编程练习题**15.17 (几何问题:寻找边界矩形)

**15.17 (几何问題:寻找边界矩形) 请编写一个程序&#xff0c;让用户可以在一个二维面板上动态地增加和移除点&#xff0c;如图15-29a所示。当点加入和移除的时候&#xff0c;一个最小的边界矩形更新显示。假设每个点的半径是 10 像素 解题思路&#xff1a; 这道题可以从编程…

数学建模(4)——支持向量机算法

一、代码示例 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import clas…

1-如何挑选Android编译服务器

前几天&#xff0c;我在我的星球发了一条动态&#xff1a;入手洋垃圾、重操老本行。没错&#xff0c;利用业余时间&#xff0c;我又重新捣鼓捣鼓代码了。在接下来一段时间&#xff0c;我会分享我从服务器的搭建到完成Android产品开发的整个过程。这些东西之前都是折腾过的&…

站在资本投资领域如何看待分布式光纤传感行业?

近年来&#xff0c;资本投资领域对于分布式光纤传感行业并不十分敏感。这主要是由于分布式光纤传感技术是一个专业且小众的领域&#xff0c;其生命周期相对较长&#xff0c;缺乏爆发性&#xff0c;与消费品或商业模式创新产业有所不同。此外&#xff0c;国内的投资环境也是影响…

谷粒商城实战笔记-42-前端基础-Vue-生命周期和钩子函数

下面是Vue官网关于生命周期及不同阶段的钩子函数的图示。 Vue 实例生命周期是指从一个组件被创建到最终被销毁的整个过程。 在这一过程中&#xff0c;Vue 提供了一系列的“钩子”函数&#xff0c;在生命周期的不同阶段执行自定义的代码。 以下是 Vue 对象生命周期的主要阶段…

图片转换之heic转jpg(使用ImageMagick)

缘由&#xff1a;iphone的图库&#xff0c;用jpg拍照保存后内存占比较大&#xff0c;heic格式会微缩不少。问题来了&#xff0c;电脑不能直接小图预览heic。 分析&#xff1a;现在就是解决小图预览的问题&#xff08;大图用wps可以看&#xff09; 解决&#xff1a;查找了一些…

Vue中的diff算法

文章目录 diff算法是什么比较方式源码分析patchpatchVnodeupdateChildren小结Vue3中diff算法优化diff算法是什么 diff算法是一种通过同层的树节点进行比较的高效算法 其有两个特点: 比较只会在同层级进行,不会跨层级比较在dff比较的过程中,循环从两边向中间比较(首位交叉…

基于神经网络的聚类分析

神经网络是一种非常有用的机器学习模型&#xff0c;具有无数的应用。今天&#xff0c;我们将分析一个数据集&#xff0c;看看我们是否可以通过应用无监督聚类技术来查找数据中的模式和隐藏分组&#xff0c;从而获得新的见解。 我们的目标是对复杂数据进行降维&#xff0c;以便…

mysql面试(一)

前言 从今天开始&#xff0c;更新一些mysql的基础知识&#xff0c;面试会遇到的知识点之类的内容。比如四个隔离级别&#xff0c;mvcc机制&#xff0c;三大日志&#xff0c;索引&#xff0c;B树的形成等等&#xff0c;从数据库的底层来剖析索引和树是怎么形成的&#xff0c;以…

接口自动化测试框架实战-0-项目功能概览

熟悉我CSDN的朋友们应该知道&#xff0c;之前已经更新了requests、pytest、allure2、yaml、jenkins、postman等基础知识的合集。相信大家对接口测试已经有了全面的认识&#xff0c;现在应该迫不及待地想要一个实战项目了。接下来的文章中&#xff0c;我们将把这些知识点串联起来…

C++学习笔记02-结构基础(问题-解答自查版)

前言 以下问题以Q&A形式记录&#xff0c;基本上都是笔者在初学一轮后&#xff0c;掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系&#xff0c;也适合做查漏补缺和复盘。 本文对读者可以用作自查&#xff0c;答案在后面&#xff0…