整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

html5多图上传插件 支持拖拽-zyUpload

插件基于jquery,所以必须引入jquery包.

先看预览图:

1 引入js和css

servlet后台需要的包:

2 html中放置按钮3 写js代码
$("#zyupload").zyUpload({ width: "650px", // 宽度 height: "400px", // 宽度 itemWidth: "140px", // 文件项的宽度 itemHeight: "115px", // 文件项的高度 url: "servlet/uploadAction", // 上传文件的路径 fileType: ["jpg", "png", "txt", "js"], // 上传文件的类型 fileSize: 51200000, // 上传文件的大小 multiple: true, // 是否可以多个文件上传 dragDrop: true, // 是否可以拖动上传文件 tailor: true, // 是否可以裁剪图片 del: true, // 是否可以删除文件 finishDel: false, // 是否在上传文件完成后删除预览 /* 外部获得的回调接口 */ onSelect: function(selectFiles, allFiles) { // 选择文件的回调方法 selectFile:当前选中的文件 allFiles:还没上传的全部文件 console.info("当前选择了以下文件:"); console.info(selectFiles); }, onDelete: function(file, files) { // 删除一个文件的回调方法 file:当前删除的文件 files:删除之后的文件 console.info("当前删除了此文件:"); console.info(file.name); }, onSuccess: function(file, response) { // 文件上传成功的回调方法 console.info("此文件上传成功:"); console.info(file.name); console.info("此文件上传到服务器地址:"); console.info(response); $("#uploadInf").append("<p>上传成功,文件地址是:" + response + "</p>"); }, onFailure: function(file, response) { // 文件上传失败的回调方法 console.info("此文件上传失败:"); console.info(file.name); }, onComplete: function(response) { // 上传完成的回调方法 console.info("文件上传完成"); console.info(response); } });
4 后台servlet或者Struts2或者SpringMVC都可以.这里使用servlet代码,使用common第三方包
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory factory= new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> list = null ; try { list = upload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } String id = request.getParameter("id"); TGreens t = null; try { t = service.getTGreens(id); } catch (SQLException e) { e.printStackTrace(); } for(int i=0;i<list.size();i++){ FileItem item =list.get(i); if(item.isFormField()){ }else{ InputStream is = item.getInputStream(); String path = getServletContext().getRealPath("/upload"); //保存到tomcat安装目录 String fileName = item.getName(); //文件名 System.out.println("======================="+fileName); String hz = fileName.substring(fileName.lastIndexOf("."));//取后缀 String uuid = UUID.randomUUID().toString(); OutputStream os = new FileOutputStream(path+"//"+uuid+""+hz); int len =0; byte[] b = new byte[1024]; while((len=is.read(b))>-1){ os.write(b, 0, len); } os.close(); t.setGimg("upload/"+uuid+""+hz); try { service.update(t); //插入数据库 } catch (SQLException e) { e.printStackTrace(); } PrintWriter out = response.getWriter(); out.print(path+"/"+uuid+hz); out.close(); } } }


资源下载和demo演示地址:http://demo.sucaihuo.com/1085/程序员都懂的,右键查看源代码即可下载css和js了

本文中,我们将了解HTML拖放,并借助示例了解其实现.

拖放是一个非常交互式和用户友好的概念,它可以通过抓住对象更轻松地将对象移动到其他位置。这允许用户在元素上单击并按住鼠标按钮,将其拖动到其他位置,然后释放鼠标按钮以将元素放到该位置。在HTML 5中,拖放更容易编码,其中的任何元素都是可拖动的。

拖放事件:有各种拖放事件,其中一些在下面列出:

  • ondrag: 它用于在 HTML 中拖动元素或文本选择时使用。
  • ondragstart: 它用于调用一个函数 drag(event),该函数指定要拖动的数据。
  • ondragenter: 它用于确定丢弃目标是否接受丢弃。如果要接受丢弃,则必须取消此事件。
  • ondragleave:当鼠标在拖动发生时将元素留在有效放置目标之前时,就会发生这种情况。
  • ondragover: 它指定可以放置拖动数据的位置。
  • ondrop:它指定在拖动操作结束时发生丢弃的位置。
  • ondragend: 当用户完成拖动元素时,就会发生这种情况。

拖放 Drag and Drop实现步骤:

  • 步骤1:使对象可拖动 首先将可拖动属性设置为 true,以使该元素可拖动 <img draggable = “true”>然后,指定拖动元素时应发生的情况。ondragstart 属性调用一个函数 drag(event),该函数指定要拖动的数据。dataTransfer.setData() 方法设置数据类型和拖动数据的值事件侦听器 ondragstart 将设置允许的效果(复制、移动、链接或某种组合).
  • 步骤2: 放下对象 ondragover 事件指定可以放下拖动数据的位置。默认情况下,不能将数据/元素放在其他元素中。若要允许删除,它必须阻止元素的默认处理。这是通过调用 event.preventDefault() 方法最后,drop 事件来完成的,它允许执行实际的丢弃

例1:

<!DOCTYPE HTML>
<html>
<head>
    <style>
    #getData {
        width: 250px;
        height: 200px;
        padding: 10px;
        border: 1px solid #4f4d4d;
    }
    </style>
    <script>
    function allowDrop(even) {
        even.preventDefault();
    }
 
    function drag(even) {
        even.dataTransfer.setData("text", even.target.id);
    }
 
    function drop(even) {
        even.preventDefault();
        var fetchData = even.dataTransfer.getData("text");
        even.target.appendChild(document.getElementById(fetchData));
    }
    </script>
</head>
 
<body>
    <h3>Drag the GeekforGeeks image into the rectangle:</h3>
    <div id="getData"
         ondrop="drop(event)"
         ondragover="allowDrop(event)">
      </div>
    <br>
    <img id="dragData"
         src="gfg.png"
         draggable="true"
         ondragstart="drag(event)"
         width="250"
         height="200">
</body>
</html>


Output:

Dragging the image into the box

拖放过程的数据传递: 当拖放的整个过程发生时,将使用数据传输属性。它用于保存从源拖放到所需位置的数据。这些是与之关联的属性:

  • dataTransfer.setData(format, data): 它用于设置要拖动的数据.
  • dataTransfer.clearData(format): 它用于调用此函数,没有清除所有数据的参数。使用 format 参数调用它仅删除该特定数据。
  • dataTransfer.getData(format): 它返回指定格式的数据。如果没有此类数据,则返回空字符串.
  • dataTransfer.types:此属性返回在 dragstart 事件中设置的所有格式的数组。
  • dataTransfer.files: 它用于返回要删除的所有文件。
  • dataTransfer.setDragImage(element, x, y): 它用于将现有图像显示为拖动图像,而不是光标旁边的默认图像。坐标指定放置位置。
  • dataTransfer.addElement(element): 它用于添加要绘制的指定元素作为拖动反馈图像。
  • dataTransfer.effectAllowed(value): 它将告诉浏览器只允许用户使用列出的操作类型。该属性可以设置为以下值:none、copy、copyLink、copyMove、link、linkMove、move、all 和未初始化。
  • dataTransfer.dropEffect(value): 它用于控制在拖动和拖动事件期间向用户提供的反馈。当用户将鼠标悬停在目标元素上时,浏览器的光标将指示将要发生的操作类型(例如复制、移动等)。效果可以采用以下值之一:无、复制、链接、移动。

例2:

<!DOCTYPE HTML>
<html>
<head>
<title>Drag and Drop box</title>
<script>
function allowDrop(ev) {
ev.preventDefault();
}
function dragStart(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function dragDrop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
</script>
<style>
#box {
margin: auto;
width: 50%;
height: 200px;
border: 3px solid green;
padding: 10px;
}
#box1,
#box2,
#box3 {
float: left;
margin: 5px;
padding: 10px;
}
#box1 {
width: 50px;
height: 50px;
background-color: #F5B5C5;
}
#box2 {
width: 100px;
height: 100px;
background-color: #B5D5F5;
}
#box3 {
width: 150px;
height: 150px;
background-color: #BEA7CC;
}
p {
font-size: 20px;
font-weight: bold;
text-align: center;
}
.gfg {
font-size: 40px;
color: #009900;
font-weight: bold;
text-align: center;
}
</style>
</head>
<body>
<div class="gfg">GeeksforGeeks</div>
<p>Drag and drop of boxes</p>
<div id="box">
<div id="box1" draggable="true"
ondragstart="dragStart(event)">
</div>
<div id="box2" draggable="true"
ondragstart="dragStart(event)">
</div>
<div id="box3" ondrop="dragDrop(event)"
ondragover="allowDrop(event)">
</div>
</div>
</body>
</html>


说明:

  • 通过将要拖动的元素的可拖动属性draggable设置为 true 来开始拖动。
  • 使用 dataTransfer.getData() 方法获取拖动的数据。此方法将返回在 setData() 方法中设置为相同类型的任何数据。
  • 调用 event.preventDefault() 方法,通过阻止元素的默认处理来允许删除其他元素中的元素。
  • 该元素存储在我们附加到放置元素中的变量数据中。

效果:

lement Plus 的弹窗组件 ElDialog 在默认情况下是不可拖拽和全屏的。要实现这两个功能,可以通过以下方式:

实现拖拽

  1. 使用 v-slots 将 ElDialog 的 title 插槽传递到组件中
  2. 在组件中绑定 mousedown 事件监听, event.preventDefault() 禁止默认事件
  3. 在 document 上监听 mousemove 事件获取鼠标移动距离
  4. 利用移动距离计算 ElDialog 的左右位置,使用 refs 修改 style 实现拖拽效果

实现全屏

  1. 定义 Boolean 类型的 ref 控制是否全屏 fullscreen
  2. 使用 computed 获取 ElDialog 的宽高
  3. 当全屏时,宽高分别设置为视口宽高
  4. 在模板中绑定 fullscreen 控制样式切换

这样就可以实现 Element Plus 的 ElDialog 组件拖拽和全屏功能。更多 CSS 样式可以根据需求自定义。

通过组合 Composition API,可以灵活扩展组件的功能,如拖拽、全屏、自定义关闭逻辑等, making Element Plus 更易用。

最终实现效果如下:

<script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

效果图:

演示地址:Vue Shop Vite