整合營銷服務商

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

          免費咨詢熱線:

          前端開發-HTML5 如何拖拽上傳文件?

          <!DOCTYPE html>
          <html lang="zh-cn">
          <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>前端開發-拖拽上傳文件</title>
          </head>
          <body>
            
          <script>
          document.ondragover = (e) => {
            e.preventDefault()
          }
          document.ondrop = (e) => {
            e.preventDefault()
            // 某些版本的 Firefox 無視 preventDefault
            // 需要執行 stopImmediatePropagation 防止瀏覽器打開文件
            e.stopImmediatePropagation()
            const file = e.dataTransfer.files[0]
            const img = new Image()
            img.src = URL.createObjectURL(file)
            document.body.appendChild(img)
          
            console.log(file)
            // 如何上傳文件?
            // 參見 https://www.toutiao.com/article/7298667864926536242/
          }
          </script>
          
          </body>
          </html>

          件拖拽上傳

          使用HTML5的文件API, 可以將操作系統中的文件拖放到瀏覽器的指定區域, 實現文件上傳到服務器。本文將結合實例講解HTML5+jQuery+PHP實現拖拽上傳圖片的過程, 來看下HTML5的魅力吧。

          HTML

          我們在頁面中放置一個拖拽區域#drop_area, 即接收拖拽的區域, #preview用來預覽拖拽上傳的圖片信息。

          <div id="drop_area">將圖片拖拽到此區域</div>
          <div id="preview"></div>

          Javascript

          要想實現拖拽, 頁面需要阻止瀏覽器默認行為, 即四個事件(拖離、拖后放、拖進、拖來拖去), 因為我們要阻止瀏覽器默認將圖片打開的行為, 這里我們使用jQuery來完成。

          $(function(){
          //阻止瀏覽器默認行。
          $(document).on({
              dragleave:function(e){ //拖離
              e.preventDefault();
          },
          drop:function(e){ //拖后放
              e.preventDefault();
          },
          dragenter:function(e){ //拖進
              e.preventDefault();
          },
          dragover:function(e){ //拖來拖去
              e.preventDefault();
          }
          });
          ...
          });

          接下來我們來了解下文件API。HTML5的文件API有一個FileList接口, 它可以通過e.dataTransfer.files拖拽事件傳遞的文件信息, 獲取本地文件列表信息

          var fileList = e.dataTransfer.files;

          在本例中, 我們用javascript來偵聽drop事件, 首先要判斷拖入的文件是否符合要求, 包括圖片類型、大小等, 然后獲取本地圖片信息, 實現預覽, 最后上傳。

          $(function(){
          /// ...接上部分
          var box = document.getElementById('drop_area'); //拖拽區域
          box.addEventListener("drop",function(e){
          e.preventDefault(); //取消默認瀏覽器拖拽效果
          var fileList = e.dataTransfer.files; //獲取文件對象
          //檢測是否是拖拽文件到頁面的操作
          if(fileList.length == 0){
              return false;
          }
          //檢測文件是不是圖片
          if(fileList[0].type.indexOf('image') === -1){
          alert("您拖的不是圖片!");
          return false;
          }
          
          //拖拉圖片到瀏覽器,可以實現預覽功能
          var img = window.URL.createObjectURL(fileList[0]);
          var filename = fileList[0].name; //圖片名稱
          var filesize = Math.floor((fileList[0].size)/1024);
          if(filesize>500){
          alert("上傳大小不能超過500K.");
          return false;
          }
          var str = "<img src='"+img+"'><p>圖片名稱:"+filename+"</p><p>大小:"+filesize+"KB</p>";
          $("#preview").html(str);
          
          //上傳
          xhr = new XMLHttpRequest();
          xhr.open("post", "upload.php", true);
          xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
          
          var fd = new FormData();
          fd.append('mypic', fileList[0]);
          
          xhr.send(fd);
          },false);
          });

          我們用FormData模擬表單數據, 直接將數據append到formdata對象中, 實現了ajax上傳。

          PHP

          upload.php用于接收上傳的文件信息, 完成上傳, 實現代碼如下:

          <?php
          $mypic = $_FILES["mypic"];
          if(!empty($mypic)){
          $picname = $_FILES['mypic']['name'];
          $picsize = $_FILES['mypic']['size'];
          if ($picsize > 512000) {
          echo '圖片大小不能超過500k';
          exit;
          }
          $type = strstr($picname, '.');
          if ($type != ".gif" && $type != ".jpg") {
          echo '圖片格式不對!';
          exit;
          }
          $pics = 'helloweba' . $type;
          //上傳路徑
          $pic_path = "pics/". $pics;
          move_uploaded_file($mypic["tmp_name"],$pic_path);
          }
          ?>

          下邊這幾句可以沒有

          <meta charset="utf-8">
          <form action="" method="post" enctype="multipart/form-data">
          <input type="file" name="mypic">
          <input type="submit" value="上傳">
          </form>

          最后總結下HTML5實現拖拽上傳的技術要點:

          1、監聽拖拽:監聽頁面元素的拖拽事件, 包括:dragenter、dragover、dragleave和drop, 一定要將dragover的默認事件取消掉, 不然無法觸發drop事件。如需拖拽頁面里的元素, 需要給其添加屬性draggable=”true”;

          2、獲取拖拽文件:在drop事件觸發后通過e.dataTransfer.files獲取拖拽文件列表, .length屬性獲取文件數量, .type屬性獲取文件類型。

          3、讀取圖片數據并添加預覽圖。

          4、發送圖片數據:使用FormData模擬表單數據AJAX提交文件流。

          TML5

          拖放(Drag 和 drop)是 HTML5 標準的組成部分。

          拖放的事件效果在我們的生活中經常用到,比如我們打開電腦給別人發送一個文件或圖片,我們一般都是把文件圖片點擊按住然后直接拖放到我們的留言區,然后直接就給發送過去了。還有就是我們在拷貝文件或圖片的時候也是,直接把文件拖進來的,很少有用右鍵復制來拷貝的,所以,這樣的操作是不是很方便呢?那么,這樣的效果我們又怎么實現呢?

          其實,這樣的效果很簡單,今天我們就來實現一個簡單的圖片拖放功能,我們來看一下代碼就知道了!

          新建一個index.html文件

          index.html

          第一,拖動什么?用ondragstart和setData()

          ondragstart 屬性調用了一個函數,drag(event),它規定了被拖動的數據。

          第二,拖放到何處?用ondragover,ondragover 事件規定在何處放置被拖動的數據。

          這要通過調用 ondragover 事件的 event.preventDefault() 方法。

          第三,放置到哪里?用ondrop,當放置被拖數據時,會發生 drop 事件。

          另外新建一個demo.js文件

          demo.js

          demo.js

          拖放效果圖

          看完是不是覺得很簡單呢?

          雖然,這些看似簡單的東西,但常常是在我們不經意的時候就成了一個強大的酷炫的東西了。所以說,我們常看的高大上的動畫效果,其實都是這些簡單的知識堆積而成的,只要我們把基礎打扎實了,這些效果就慢慢地顯露出來了。

          如果覺得本期內容不錯,記得在下方給我留言!下期小編會有更好的干貨分享哦!


          主站蜘蛛池模板: 精品一区二区三区无码免费直播 | 亚洲欧美日韩中文字幕一区二区三区 | 成人免费视频一区二区三区| 人妻AV一区二区三区精品 | 精品久久久久久无码中文字幕一区| 97人妻无码一区二区精品免费| 91精品乱码一区二区三区| 冲田杏梨AV一区二区三区| www亚洲精品少妇裸乳一区二区| 少妇人妻偷人精品一区二区| 色偷偷久久一区二区三区| 欧美日本精品一区二区三区| 一区二区三区免费看| 一区二区三区视频在线观看| 韩国精品一区视频在线播放| 国产精品亚洲产品一区二区三区| 亚洲一区二区三区首页| 国产日韩精品一区二区三区| 国产伦理一区二区| 亚洲av乱码一区二区三区按摩 | 亚洲午夜电影一区二区三区| 在线视频精品一区| 日本亚洲国产一区二区三区| 亚洲日韩一区精品射精| 国产情侣一区二区三区| 成人中文字幕一区二区三区| 精品无码综合一区| 精品国产日韩亚洲一区在线 | 学生妹亚洲一区二区| 国产精品一区二区av不卡| 亚洲AV无码一区二区三区久久精品| 国产一区二区三区在线视頻| 无码人妻一区二区三区免费手机| 国模无码一区二区三区不卡| 麻豆国产在线不卡一区二区 | 国产电影一区二区| 久久精品人妻一区二区三区| 亚洲爆乳精品无码一区二区| 日韩一区二区久久久久久| 波多野结衣精品一区二区三区 | 一区高清大胆人体|