html5的拖拽dragAPI(如果看了API不懂,看看那三個案例就會恍然大悟)


1.拖拽和釋放定義:

  拖拽:Drag;

  釋放:Drop;

2.源對象和目標對象:

  

3.相關API:

  ondragstart:源對象開始被拖動

  ondrag:源對象被拖動的過程中

  ondragend:源對象被拖動結束

  ondragenter:目標對象被源對象拖動進入

  ondragover:目標對象被源對象懸浮在上面

  ondragleave:源對象拖動着離開了目標對象

  ondrop:源對象拖動着在目標對象上方松手

4.拖動的源對象和目標對象之間的數據傳遞:

  源對象數據保存:e.data.Transfer.setData(k,v)//k-v必須都是string類型

  目標對象獲取數據:e.data.Transfer.getData(k,v)

案例一:小貓咪隨着鼠標移動

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>拖動小熊</title>
 6     <style>
 7         body{
 8             margin:0;
 9             position: relative;
10         }
11         img{
12             position:absolute;
13             width: 150px;
14             height: 150px;
15         }
16     </style>
17 </head>
18 <body>
19 <h3>隨着鼠標拖動而移動的小貓咪</h3>
20 <img id="cat" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537438350926&di=d40ad5be9fac73fbcebfcbec85a88739&imgtype=0&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Fzhidao%2Fwh%253D450%252C600%2Fsign%3D88c8f471f9039245a1e0e90bb2a488f4%2F9a504fc2d5628535aedbd09d95ef76c6a7ef6356.jpg" alt=""/>
21 <script>
22     var cat = document.getElementById('cat');
23     cat.ondragstart = function(e){
24         console.log('cat開始移動');
25         offsetX = e.offsetX;
26         offsetY = e.offsetY;
27     };
28     cat.ondrag = function(e){
29         // console.log('事件源cat正在拖動中');
30         var x = e.pageX;
31         var y = e.pageY;
32         console.log(x + '-' +y);
33         if(x === 0 && y === 0){//不處理最后一刻x,y都為0 的情景
34             return
35         };
36         x -= offsetX;
37         y -= offsetY;
38         cat.style.left = x+ 'px';
39         cat.style.top = y + 'px';
40     }
41     cat.ondragend = function (e) {
42         console.jlog('cat源對象拖動結束')
43     }
44 </script>
45 </body>
46 </html>

案例二:淘寶購物車刪除商品效果:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>小喵咪喂給大黃魚</title>
 6     <style>
 7         body{
 8             text-align: center;
 9         }
10 
11         img{
12             width: 80px;
13             height: 80px;
14             border-radius:100%;
15         }
16         #fish{
17             margin-top: 200px;
18             opacity: .2;
19         }
20     </style>
21 </head>
22 <body>
23  <h3>小喵咪拖到大黃魚上面的時候消失(刪除小喵咪)</h3>
24  <img   class="cat"   id="cat1" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537439299088&di=4abcae9fe10a919fd23695be63506d91&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F01c2e05777054e0000012e7eceda20.jpg%401280w_1l_2o_100sh.jpg" alt="">
25  <img   class="cat"   id="cat2" src="http://img4.imgtn.bdimg.com/it/u=2404190189,262583459&fm=26&gp=0.jpg" alt="">
26  <img   class="cat"   id="cat3" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537439359473&di=94af89f7165210577af8d9682ca7b90b&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F031763d577b43b30000018c1bcaaa23.jpg" alt="">
27  <br>
28  <img   id="fish"   src="https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2614718913,3898275106&fm=26&gp=0.jpg" alt="">
29 </body>
30 <script>
31     //要想從數據庫中刪除貓咪,就需要貓咪的圖片地址是后台傳值過來的,然后循環遍歷在頁面中,當拖動刪除的時候,刪除掉數據庫中的數據即可;然后刷新頁面
32     var  cat = document.getElementsByClassName('cat')//找到所有的貓咪
33     for(var i = 0;i<cat.length;i++){
34         var catSingle = cat[i];
35         catSingle.ondragstart  = function(e){//循環遍歷貓咪,當dragstart拖動開始的時候,setData設置他的id到e.dataTransfer中
36             e.dataTransfer.setData('catId',this.id);
37         }
38     }
39     fish.ondragenter = function(){//當如到魚種時候,讓魚的透明度為1;
40         console.log('已經拖入')
41         fish.style.opacity ='1';
42     }
43     fish.ondragleave = function () {//拖動離開魚的時候
44         console.log('拖動離開');
45         fish.style.opacity ='.2';
46     }
47     fish.ondragover = function (e) {//拖動懸浮在魚上
48         e.preventDefault()
49     }
50     fish.ondrop = function(e){//拖動放開時候;獲取拖動開始時候設置的數據;然后從dom結構中移除;
51         console.log('放開拖動')
52         fish.style.opacity = '.2'
53         var id = e.dataTransfer.getData('catId')
54         console.log(id)
55         var dragId = document.getElementById(id);
56         dragId.parentNode.removeChild(dragId)
57     }
58 
59 </script>
60 </html>

案例三:將本地圖片圖拖動放置到瀏覽器中

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>拖動一張圖片到瀏覽器中</title>
 6     <style>
 7         body{
 8             text-align: center;
 9         }
10         #container {
11             border: 1px solid #aaa;
12             border-radius: 3px;
13             padding: 10px;
14             margin: 10px;
15             min-height: 400px;
16         }
17     </style>
18 </head>
19 <body>
20 
21 <h1>拖放API的擴展知識</h1>
22 <h3>請拖動您的照片到下方方框區域</h3>
23 <div id="container"></div>
24 
25 <script>
26     var container = document.getElementById('container')
27    document.ondragover = function(e){
28        e.preventDefault()
29    }
30    document.ondrop = function(e){
31        e.preventDefault()
32    }
33    container.ondragover = function(e){
34        e.preventDefault()
35    }
36    container.ondrop = function(e){
37         var paper = e.dataTransfer.files[0];
38         var file = new FileReader();
39         file.readAsDataURL(paper)
40        file.onload = function(){
41             console.log('讀取文件完成')
42            console.log(file.result)
43            var img = new Image();
44             img.src =file.result;
45             container.appendChild(img)
46        }
47    }
48 </script>
49 </body>
50 </html>

注意事項:瀏覽器問題:當ondragover觸發時,ondrop會失效,因此需要阻止ondragover的默認事件;

5.HTML5的新增文件操作對象

  file:代表一個文件對象

  filelist:代表一個文件列表對象;類數組;

  fileReader:用於從文件中讀取數據

  FileWriter:用於向文件中寫出數據;

  相關函數:

    

 1 div.ondrop = function(e){
 2 
 3 var f = e.dataTransfer.files[0];      //找到拖放的文件
 4 
 5 var fr = new FileReader();        //創建文件讀取器
 6 
 7 fr.readAsURLData(f);         //讀取文件內容
 8 
 9 fr.onload = function(){       //讀取完成
10 
11 img.src = fr.result;        //使用讀取到的數據
12 
13 }
14 
15  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM