整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          JavaScript 文件拖拽上傳

          件拖拽上傳

          使用HTML5的文件API, 可以將操作系統(tǒng)中的文件拖放到瀏覽器的指定區(qū)域, 實(shí)現(xiàn)文件上傳到服務(wù)器。本文將結(jié)合實(shí)例講解HTML5+jQuery+PHP實(shí)現(xiàn)拖拽上傳圖片的過程, 來看下HTML5的魅力吧。

          HTML

          我們?cè)陧?yè)面中放置一個(gè)拖拽區(qū)域#drop_area, 即接收拖拽的區(qū)域, #preview用來預(yù)覽拖拽上傳的圖片信息。

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

          Javascript

          要想實(shí)現(xiàn)拖拽, 頁(yè)面需要阻止瀏覽器默認(rèn)行為, 即四個(gè)事件(拖離、拖后放、拖進(jìn)、拖來拖去), 因?yàn)槲覀円柚篂g覽器默認(rèn)將圖片打開的行為, 這里我們使用jQuery來完成。

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

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

          var fileList = e.dataTransfer.files;

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

          $(function(){
          /// ...接上部分
          var box = document.getElementById('drop_area'); //拖拽區(qū)域
          box.addEventListener("drop",function(e){
          e.preventDefault(); //取消默認(rèn)瀏覽器拖拽效果
          var fileList = e.dataTransfer.files; //獲取文件對(duì)象
          //檢測(cè)是否是拖拽文件到頁(yè)面的操作
          if(fileList.length == 0){
              return false;
          }
          //檢測(cè)文件是不是圖片
          if(fileList[0].type.indexOf('image') === -1){
          alert("您拖的不是圖片!");
          return false;
          }
          
          //拖拉圖片到瀏覽器,可以實(shí)現(xiàn)預(yù)覽功能
          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模擬表單數(shù)據(jù), 直接將數(shù)據(jù)append到formdata對(duì)象中, 實(shí)現(xiàn)了ajax上傳。

          PHP

          upload.php用于接收上傳的文件信息, 完成上傳, 實(shí)現(xiàn)代碼如下:

          <?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 '圖片格式不對(duì)!';
          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>

          最后總結(jié)下HTML5實(shí)現(xiàn)拖拽上傳的技術(shù)要點(diǎn):

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

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

          3、讀取圖片數(shù)據(jù)并添加預(yù)覽圖。

          4、發(fā)送圖片數(shù)據(jù):使用FormData模擬表單數(shù)據(jù)AJAX提交文件流。

          實(shí)現(xiàn)炫酷的的拖行拖拽

          1.需求分析:設(shè)計(jì)一個(gè)元素,可以跟隨鼠標(biāo)的移動(dòng),元素也進(jìn)行移動(dòng),并且能夠在鼠標(biāo)按上與按下元素的時(shí)候,元素可以進(jìn)行改變樣式顏色。

          2. 設(shè)計(jì)思路:先是需要獲取元素,給元素綁定鼠標(biāo)按下的事件,在綁定的事件中,兼容event事件,獲取鼠標(biāo)的坐標(biāo)和元素的坐標(biāo),通過鼠標(biāo)的坐標(biāo)減去元素的坐標(biāo)就可以得到鼠標(biāo)在元素中的坐標(biāo)。在綁定事件中,寫上一個(gè)元素的移動(dòng)事件,獲取元素的移動(dòng)坐標(biāo)。最后,在鼠標(biāo)按上的事件函數(shù)中,可以調(diào)用元素的移動(dòng)事件就可以了。

          <!DOCTYPE html>
          <html lang="en">
          <head>
           <meta charset="UTF-8">
           <title>圖層拖拽</title>
           <style>
           .box {
           width: 200px;
           height: 200px;
           background-color: skyblue;
           border: 2px solid #ccc;
           cursor: pointer;
           position: absolute;
           top: 20px;
           left: 100px;
           }
           </style>
          </head>
          <body>
          <div class="box" id="box"></div>
          </body>
          <script>
           var box = document.getElementById("box");
           box.onmousedown = function(env){
           // 兼容event事件
           var env = env || window.event;
           // 獲取鼠標(biāo)的坐標(biāo)
           var x = env.clientX;
           var y = env.clientY;
           // 獲取元素的坐標(biāo)
           var left = box.offsetLeft;
           var top = box.offsetTop;
           // 獲取鼠標(biāo)在元素中的坐標(biāo)
           var x_left = x - left;
           var y_top = y -top;
           // 鼠標(biāo)點(diǎn)擊后改變顏色
           box.style.background = "red";
           // 元素的移動(dòng)事件函數(shù)
           box.onmousemove = function(env){
           // 兼容event事件
           var env = env || window.event;
           // 獲取元素移動(dòng)時(shí)的鼠標(biāo)的坐標(biāo)
           var x = env.clientX;
           var y = env.clientY;
           // 元素的移動(dòng)坐標(biāo)
           box.style.left = (x - x_left)+"px";
           box.style.top = (y - y_top)+"px";
           }
           };
           // 鼠標(biāo)彈出的事件函數(shù)
           box.onmouseup = function(){
           box.style.background = "skyblue";
           // 在鼠標(biāo)彈出后再次調(diào)用元素的鼠標(biāo)移動(dòng)事件
           box.onmousemove = function(){};
           };
          </script>
          </html>
          

          學(xué)習(xí)從來不是一個(gè)人的事情,要有個(gè)相互監(jiān)督的伙伴,想要學(xué)習(xí)或交流前端問題的小伙伴可以私信回復(fù)小明“學(xué)習(xí)” 獲取資料,一起學(xué)習(xí)!

          什么是拖拽?

          本質(zhì)上來說就是一個(gè)對(duì)象和一個(gè)對(duì)象直接傳遞。

          其實(shí)學(xué)習(xí)拖拽,就是學(xué)習(xí)拖拽事件。

          ⒉在HTML5中很多元素是不能進(jìn)行拖拽的,比如說圖片和超鏈接:

          在試圖拖拽時(shí)你會(huì)發(fā)現(xiàn)一個(gè)禁止的符號(hào),如果想拖拽元素,就必須為元素添加draggable="true"。

          ⒊相關(guān)的事件

          應(yīng)用于被拖拽元素的事件

          ondrag 應(yīng)用于拖拽元素,整個(gè)拖拽過程都會(huì)調(diào)用--持續(xù)

          ondragstart 應(yīng)用于拖拽元素,當(dāng)拖拽開始時(shí)調(diào)用

          ondragleave 應(yīng)用于拖拽元素,當(dāng)鼠標(biāo)離開拖拽元素時(shí)調(diào)用

          ondragend 應(yīng)用于拖拽元素,當(dāng)拖拽結(jié)束時(shí)調(diào)用

          應(yīng)用于目標(biāo)元素的事件

          ondragenter 應(yīng)用于目標(biāo)元素,當(dāng)拖拽元素進(jìn)入時(shí)調(diào)用

          ondragover 應(yīng)用于目標(biāo)元素,當(dāng)停留在目標(biāo)元素上時(shí)調(diào)用

          ondrop 應(yīng)用于目標(biāo)元素,當(dāng)在目標(biāo)元素上松開鼠標(biāo)時(shí)調(diào)用

          ondragleave 應(yīng)用于目標(biāo)元素,當(dāng)鼠標(biāo)離開目標(biāo)元素時(shí)調(diào)用

          案例:





          注意:如果想觸發(fā)ondrop事件,那么就必須在ondragover事件中阻止瀏覽器的默認(rèn)行為。

          來源網(wǎng)絡(luò),侵權(quán)聯(lián)系刪除

          私信我或關(guān)注微信號(hào):猿來如此呀,回復(fù):學(xué)習(xí),獲取免費(fèi)學(xué)習(xí)資源包。


          主站蜘蛛池模板: 久久综合精品不卡一区二区| 视频一区二区在线观看| 日本一区二区三区日本免费 | 亚洲爽爽一区二区三区| 久久高清一区二区三区| 秋霞鲁丝片一区二区三区| 无码精品人妻一区二区三区漫画| 在线观看国产区亚洲一区成人| 久久综合一区二区无码| 无码人妻精品一区二区三18禁| 视频一区在线播放| 91久久精品无码一区二区毛片 | 在线视频精品一区| 日韩精品一区二区三区老鸭窝| 国产福利视频一区二区| 久久久久一区二区三区| 久久久精品人妻一区二区三区蜜桃 | 精品国产乱码一区二区三区| 精品aⅴ一区二区三区| 精品免费AV一区二区三区| 怡红院AV一区二区三区| 精品无码av一区二区三区| 国产丝袜视频一区二区三区| 岛国精品一区免费视频在线观看| 国产亚洲综合精品一区二区三区| 国产精品揄拍一区二区久久| 91在线一区二区| 无码精品人妻一区二区三区漫画 | 亚洲AV无码一区二区三区在线| 中文字幕无码一区二区三区本日| 在线不卡一区二区三区日韩| 极品少妇一区二区三区四区| 亚洲另类无码一区二区三区| 亚洲一区二区三区高清在线观看| 麻豆精品久久久一区二区| 国产丝袜视频一区二区三区| 一区二区三区在线视频播放| 日韩熟女精品一区二区三区| 内射白浆一区二区在线观看| 一区视频在线播放| 中文字幕在线观看一区|