整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          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+"http://"+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


          主站蜘蛛池模板: 无码人妻久久一区二区三区免费| 日本免费一区二区三区| 久久蜜桃精品一区二区三区| 日韩好片一区二区在线看| 国模私拍一区二区三区| 久久亚洲国产精品一区二区 | 无人码一区二区三区视频| 一区二区免费国产在线观看| 中文字幕日本精品一区二区三区| 中文字幕aⅴ人妻一区二区| 人妻少妇久久中文字幕一区二区| 一本大道在线无码一区| 天天看高清无码一区二区三区| 国产精品亚洲高清一区二区 | 无码人妻久久一区二区三区| 99久久人妻精品免费一区| 在线观看精品一区| 亲子乱AV视频一区二区| 男插女高潮一区二区| 日本美女一区二区三区| 亚洲不卡av不卡一区二区| 冲田杏梨AV一区二区三区| 一区二区三区美女视频| 中文字幕一区一区三区| 色综合视频一区二区三区 | 91成人爽a毛片一区二区| 国产乱码精品一区二区三区四川人| 一区二区三区视频免费| 亚洲码一区二区三区| 国产成人综合精品一区| 精品国产福利一区二区| 国产午夜三级一区二区三| 亚洲综合av一区二区三区不卡 | 亚洲免费视频一区二区三区| 91在线精品亚洲一区二区| 一区二区三区久久精品| 亚洲欧美日韩一区二区三区在线| 中文字幕一区二区人妻| 国产成人无码精品一区不卡| 在线视频一区二区| 亚洲韩国精品无码一区二区三区|