亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

HTML5拖拽API經典實例詳解

2024-08-26 00:20:38
字體:
來源:轉載
供稿:網友

一、關于拖拽API

拖拽API是HTML5的新特性,相對于其他新特性來說,重要程度占到6成,實際開發中使用比例占到3成,學習要求個人認為是達到掌握即可的程度。

二、什么是拖拽和釋放?

拖拽:Drag

釋放:Drop

拖拽指的是鼠標點擊源對象后一直移動對象不松手,一但松手即釋放了

三、什么是源對象和目標對象?

html5,拖拽,api

源對象:指的是我們鼠標點擊的一個事物,這里可以是一張圖片,一個DIV,一段文本等等。

目標對象:指的是我們拖動源對象后移動到一塊區域,源對象可以進入這個區域,可以在這個區域上方懸停(未松手),可以釋松手釋放將源對象放置此處(已松手),也可以懸停后離開該區域。

四、拖拽API的相關函數

解釋了什么是源對象和目標對象后,回歸前端中的拖拽API,由上面的操作我們可以得出幾個函數

被拖動的源對象可以觸發的事件:

(1)ondragstart:源對象開始被拖動

(2)ondrag:源對象被拖動過程中(鼠標可能在移動也可能未移動)

(3)ondragend:源對象被拖動結束

  拖動源對象可以進入到上方的目標對象可以觸發的事件:

(1)ondragenter:目標對象被源對象拖動著進入

(2)ondragover:目標對象被源對象拖動著懸停在上方

(3)ondragleave:源對象拖動著離開了目標對象

(4)ondrop:源對象拖動著在目標對象上方釋放/松手

拖拽API總共就是7個函數??!

五、如何在拖動的源對象事件和目標對象事件間傳遞數據

HTML5為所有的拖動相關事件提供了一個新的屬性:

e.dataTransfer { }          //數據傳遞對象

  功能:用于在源對象和目標對象的事件間傳遞數據

源對象上的事件處理中保存數據:

e.dataTransfer.setData( k,  v );     //k-v必須都是string類型

目標對象上的事件處理中讀取數據:

var v = e.dataTransfer.getData( k );

示例一:實現一個可以隨著鼠標拖動而移動的小飛機

提示:飛機需要絕對定位!ondrag事件中獲取鼠標的坐標值!!!

html5,拖拽,api

代碼如下:

<!DOCTYPE html>  <html>  <head lang="en">      <meta charset="UTF-8">      <title></title>      <style>          body{              margin:0;              position: relative;          }          img{              position:absolute;          }      </style>  </head>  <body>  <h3>隨著鼠標拖動而移動的小飛機</h3>  <img id="p3" src="img/p3.png" <script>      p3.ondragstart=function(e){          console.log('事件源p3開始拖動');          //記錄剛一拖動時,鼠標在飛機上的偏移量          offsetX= e.offsetX;          offsetY= e.offsetY;      }      p3.ondrag=function(e){          console.log('事件源p3拖動中');          var x= e.pageX;          var y= e.pageY;          console.log(x+'-'+y);          //drag事件最后一刻,無法讀取鼠標的坐標,pageX和pageY都變為0          if(x==0 && y==0){              return; //不處理拖動最后一刻X和Y都為0的情形          }          x-=offsetX;          y-=offsetY;          p3.style.left=x+'px';          p3.style.top=y+'px';      }      p3.ondragend=function(){          console.log('源對象p3拖動結束');      }  </script>  </body>  </html>  

效果如下:

html5,拖拽,api

示例二:

模擬電腦中 ”垃圾桶“的效果, 總共顯示三個小飛機,拖動著某個小飛機到垃圾桶上方后,小飛機從DOM樹上刪除

提示:刪除需要從DOM子節點中刪除元素,需要阻止ondragover的默認行為?。±迷磳ο蠛湍繕藢ο蟮臄祿鬟f記錄小飛機的ID值?。?!

重要信息:

ondragover有一個默認行為?。?!那就是當ondragover觸發時,ondrop會失效?。。?!這個可能是瀏覽器的版本問題,需要以后瀏覽器不斷更新可能才會解決!!

如何阻止?

ondragover= function(e){  //源對象在懸停在目標對象上時  e.preventDefault();  //阻止默認行為,使得drop可以觸發 .....}ondrop= function(e){  //源對象松手釋放在了目標對象中 .....}

html5,拖拽,apihtml5,拖拽,apihtml5,拖拽,apihtml5,拖拽,api

代碼如下:

<!DOCTYPE html>  <html>  <head lang="en">    <meta charset="UTF-8">    <title></title>    <style>      body {        text-align: center;      }      #trash {        opacity: .2;        margin: 15px;      }    </style>  </head>  <body>    <h3>拖動飛機到垃圾桶后從DOM樹中刪除子元素</h3>    <img id="trash" src="img/trash_full.png">    <hr/>    <img id="p3" class="src" src="img/p3.png">    <img id="p4" class="src" src="img/p4.png">    <img id="p5" class="src" src="img/p5.png">    <script>      //為源對象添加事件監聽 —— 記錄拖動了哪一個源對象      var srcList = document.querySelectorAll('.src');//找到全部img元素      for(var i=0; i<srcList.length; i++){ //遍歷img元素        var p = srcList[i];        p.ondragstart = function(e){ //開始拖動源對象          e.dataTransfer.setData('PlaneID',this.id);//保存數據--該img元素的id        }        p.ondrag = function(){}        p.ondragend = function(){}      }      //為目標對象添加事件監聽 —— 刪除拖動的源對象      trash.ondragenter = function(){ //源對象進入目標對象        console.log('drag enter');        trash.style.opacity = "1"; //將透明度變成1      }      trash.ondragleave= function(){  //源對象離開目標對象后        console.log('drag leave');        trash.style.opacity = ".2"; //將透明度變為0.2      }      trash.ondragover= function(e){  //源對象在懸停在目標對象上時        e.preventDefault();  //阻止默認行為,使得drop可以觸發      }      trash.ondrop= function(e){ //源對象松手釋放在了目標對象中        console.log('drop');        trash.style.opacity = ".2"; //將透明度變為0.2        //刪除被拖動的源對象        var id = e.dataTransfer.getData('PlaneID');//得到數據--id值        var p = document.getElementById(id); //根據id值找到相關的元素        p.parentNode.removeChild(p);  //從父元素中刪除子節點      }    </script>  </body>  </html>  

效果如下:

html5,拖拽,api

拖拽小飛機到垃圾桶刪除后:

html5,拖拽,api

如圖,原本三架小飛機,現在變成了兩架!?。?/p>

六、拖拽API的補充知識點!?。ㄖ匾嬖囍幸苍S會問到噢?。。?/strong>

面試題:

如何在網頁中顯示客戶端(電腦)的一張圖片?

如何拖動客戶端的網頁顯示在服務器端下載的頁面中?

這兩個問題是什么意思呢?

我們平時在電腦中拖拽一張圖片到瀏覽器中實現的下載操作?。?!按照H5之前的標準,要實現直接拖拽一張圖片到瀏覽器中顯示是無法完成?。〉亲詮腍5新特性出來之后增加了拖拽API的特性,完美的實現了這一功能!?。?/p>

應用場合:

在某網站上,上傳圖片當做是頭像

上傳相片...

HTML5新增的文件操作對象:

File: 代表一個文件對象

FileList: 代表一個文件列表對象,類數組

FileReader:用于從文件中讀取數據

FileWriter:用于向文件中寫出數據

相關函數:

div.ondrop = function(e){var f = e.dataTransfer.files[0];      //找到拖放的文件var fr = new FileReader();        //創建文件讀取器fr.readAsURLData(f);         //讀取文件內容fr.onload = function(){       //讀取完成img.src = fr.result;        //使用讀取到的數據} }

代碼如下:

<span style="font-size: 18px;"><!DOCTYPE html>  <html>  <head lang="en">    <meta charset="UTF-8">    <title></title>    <style>      #container {        border: 1px solid #aaa;        border-radius: 3px;        padding: 10px;        margin: 10px;        min-height: 400px;      }    </style>  </head>  <body>    <h1>拖放API的擴展知識</h1>    <h3>請拖動您的照片到下方方框區域</h3>    <div id="container"></div>    <script>      //監聽document的drop事件——取消其默認行為:在新窗口中打開圖片      document.ondragover = function(e){        e.preventDefault(); //使得drop事件可以觸發      }      document.ondrop = function(e){        e.preventDefault(); //阻止在新窗口中打開圖片,否則仍然會執行下載操作!?。?     }      //監聽div#container的drop事件,設法讀取到釋放的圖片數據,顯示出來      container.ondragover = function(e){        e.preventDefault();      }      container.ondrop = function(e){        console.log('客戶端拖動著一張圖片釋放了...')        //當前的目標對象讀取拖放源對象存儲的數據        //console.log(e.dataTransfer); //顯示有問題        //console.log(e.dataTransfer.files.length); //拖進來的圖片的數量        var f0 = e.dataTransfer.files[0];        //console.log(f0); //文件對象 File        //從文件對象中讀取數據        var fr = new FileReader();        //fr.readAsText(f0); //從文件中讀取文本字符串        fr.readAsDataURL(f0); //從文件中讀取URL數據        fr.onload = function(){          console.log('讀取文件完成')          console.log(fr.result);          var img = new Image();          img.src = fr.result; //URL數據          container.appendChild(img);        }      }    </script>  </body>  </html></span>  

效果如下:

html5,拖拽,api

總結

以上所述是小編給大家介紹的HTML5拖拽API經典實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美精品中文字幕| 国产69精品久久久久久| 精品网站999www| 欧美性受xxxx黑人猛交| 久久久久久一区二区三区| 18一19gay欧美视频网站| 久久久久久欧美| 中文字幕免费精品一区| 欧美性理论片在线观看片免费| 久久人人爽国产| 国产日韩一区在线| 九九热视频这里只有精品| 欧美交受高潮1| 欧美一区二区大胆人体摄影专业网站| 欧洲永久精品大片ww免费漫画| 成人国产亚洲精品a区天堂华泰| 91精品国产高清自在线| 欧美国产视频日韩| 国产性猛交xxxx免费看久久| 亚洲第一区第二区| 三级精品视频久久久久| 国产精品久久久久久久久久小说| 国产精品jvid在线观看蜜臀| 日韩av色在线| 日韩av在线精品| 中日韩美女免费视频网址在线观看| 久久国产加勒比精品无码| 国产精品av在线播放| 日韩欧美在线看| 97视频在线看| 欧美激情一区二区三区久久久| 欧美成人性色生活仑片| 精品香蕉在线观看视频一| 91在线高清免费观看| 日本sm极度另类视频| 欧美激情在线一区| 狠狠久久五月精品中文字幕| 高跟丝袜一区二区三区| 91免费版网站入口| 91综合免费在线| 成人午夜黄色影院| 欧美午夜片在线免费观看| 精品中文视频在线| 国产精品视频网站| 深夜福利国产精品| 亚洲免费视频在线观看| 久久久999精品免费| 久久免费视频网| 国产精品一区二区久久| 亚洲老板91色精品久久| 亚洲电影在线观看| 色av吧综合网| 91免费人成网站在线观看18| 日韩中文字幕视频在线观看| 色狠狠久久aa北条麻妃| 久久精品国产亚洲精品2020| 欧美成人免费大片| 国产精品电影网| 成人动漫网站在线观看| 欧美精品一区二区免费| 97香蕉久久夜色精品国产| 亚洲美女av黄| 欧美日韩国产激情| 亚洲一区二区免费| 欧美激情伊人电影| 亚洲成人精品久久久| 日韩精品福利网站| 亚洲美女福利视频网站| 亚洲国产欧美自拍| 亚洲大胆人体在线| 色播久久人人爽人人爽人人片视av| 亚洲欧美日韩爽爽影院| 日韩精品视频在线免费观看| 亚洲2020天天堂在线观看| 久久久久久久久久久成人| 日本91av在线播放| 黄色一区二区三区| 91精品国产色综合久久不卡98| 91成人在线播放| 亚洲国产欧美精品| 美女扒开尿口让男人操亚洲视频网站| 亚洲伊人久久大香线蕉av| 18久久久久久| 欧美与黑人午夜性猛交久久久| 这里只有精品在线播放| 最新国产精品拍自在线播放| 九九热这里只有精品6| 色999日韩欧美国产| 国产精品18久久久久久麻辣| 91沈先生在线观看| 美日韩精品免费视频| 欧美成人午夜影院| 亚洲国产精品系列| 亚洲美女av在线| 日本一区二区三区在线播放| 国自产精品手机在线观看视频| 国产成人黄色av| 国产盗摄xxxx视频xxx69| 欧美日韩不卡合集视频| 麻豆国产va免费精品高清在线| 欧美视频一二三| 久久久久久国产免费| 国产福利视频一区二区| 日韩经典第一页| 亚洲黄在线观看| 亚洲人成电影在线| 国产精品444| 中文字幕亚洲在线| 亚洲2020天天堂在线观看| 欧美丰满老妇厨房牲生活| 国产一区二区三区视频在线观看| 夜夜嗨av色一区二区不卡| 91福利视频在线观看| 欧美激情极品视频| 欧美性生交大片免费| 一区二区三区回区在观看免费视频| 欧美日韩国产一中文字不卡| 欧美精品情趣视频| 亚洲最大的成人网| 久久中文字幕在线| 欧美一级视频一区二区| 欧美成人亚洲成人日韩成人| 欧美激情一级欧美精品| 欧美成人午夜免费视在线看片| 97在线免费观看视频| 日韩中文视频免费在线观看| 国内精久久久久久久久久人| 91日韩在线播放| 久久91精品国产91久久跳| www.亚洲一二| 欧美在线观看视频| 亚洲第一网中文字幕| 97色在线视频| 亚洲精品综合久久中文字幕| 欧美一级淫片aaaaaaa视频| 国产午夜精品一区二区三区| 亚洲精品美女网站| 欧美成人午夜视频| 狠狠躁18三区二区一区| 国产日韩精品在线播放| 久久精品国产91精品亚洲| 亚洲专区国产精品| 久久国产精品久久精品| 91色中文字幕| 日韩在线精品视频| 97人人模人人爽人人喊中文字| 欧美高清电影在线看| 欧美日韩裸体免费视频| 国产欧美在线播放| 国产一区二区三区在线免费观看| 国产精品入口日韩视频大尺度| 亚洲精选一区二区| 欧美成人午夜视频| 欧美色播在线播放| 免费av一区二区| 亚洲国产黄色片| 91色中文字幕| 在线成人激情视频| 日韩av电影国产| 91在线视频一区| 国产精品嫩草视频| 日韩av综合中文字幕| 在线观看成人黄色| 国产精品免费福利|