您好,登錄后才能下訂單哦!
這篇文章主要介紹“HTML5中實(shí)現(xiàn)拖放功能的代碼怎么寫(xiě)”,在日常操作中,相信很多人在HTML5中實(shí)現(xiàn)拖放功能的代碼怎么寫(xiě)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”HTML5中實(shí)現(xiàn)拖放功能的代碼怎么寫(xiě)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
關(guān)于HTML5中的拖放
拖放(Drag 和 Drop)是一種常見(jiàn)的特性,即抓取對(duì)象以后拖到另一個(gè)位置,在 HTML5 中,拖放是標(biāo)準(zhǔn)的組成部分。在HTML5中用戶(hù)可以使用鼠標(biāo)選擇一個(gè)可拖動(dòng)元素,將元素拖動(dòng)到一個(gè)可放置元素,并通過(guò)釋放鼠標(biāo)按鈕放到這些元素。在拖動(dòng)操作期間,可拖動(dòng)元素的半透明表示跟隨鼠標(biāo)指針。
如果我們希望元素可以被拖動(dòng),那么需要將其 draggable屬性設(shè)為true (a標(biāo)簽draggable默認(rèn)是true)
拖放的事件
在進(jìn)行拖放操作的不同階段會(huì)觸發(fā)數(shù)種事件,拖拽事件的dataTransfer屬性存放了拖放操作中的相關(guān)數(shù)據(jù)。
dragstart | 作用于[源元素],當(dāng)一個(gè)元素開(kāi)始被拖拽的時(shí)候觸發(fā),用戶(hù)拖拽的元素需要附加dragstart事件。在這個(gè)事件中,監(jiān)聽(tīng)器將設(shè)置與這次拖拽相關(guān)的信息,例如拖動(dòng)的數(shù)據(jù)和圖像。 |
dragenter | 作用于[源元素],當(dāng)拖拽中的鼠標(biāo)進(jìn)入一個(gè)元素的時(shí)候觸發(fā)。這個(gè)事件的監(jiān)聽(tīng)器需要指明是否允許在這個(gè)區(qū)域釋放鼠標(biāo)。如果沒(méi)有設(shè)置監(jiān)聽(tīng)器,或者監(jiān)聽(tīng)器沒(méi)有進(jìn)行操作,則默認(rèn)不允許釋放。 |
dragover | 作用于[目標(biāo)元素],當(dāng)拖拽中的鼠標(biāo)移動(dòng)經(jīng)過(guò)一個(gè)元素的時(shí)候觸發(fā)。 |
dragleave | 作用于[目標(biāo)元素],當(dāng)拖拽中的鼠標(biāo)離開(kāi)元素時(shí)觸發(fā)。可以作為可釋放反饋的高亮或插入標(biāo)記去除。 |
drag | 作用于[源元素],事件在元素被拖動(dòng)時(shí)觸發(fā)。 |
drop | 作用于[目標(biāo)元素],在拖拽操作結(jié)束釋放時(shí)于釋放元素上觸發(fā)。 |
dragend | 作用于[源元素],拖拽源在拖拽操作結(jié)束時(shí)觸發(fā),不管操作成功與否。 |
(在拖拽的時(shí)候只會(huì)觸發(fā)拖拽的相關(guān)事件,鼠標(biāo)事件,例如mousemove,是不會(huì)觸發(fā)的)
DataTransfer 對(duì)象
在處理拖放操作時(shí),我們需要用到 DataTransfer 對(duì)象來(lái)保存被拖動(dòng)的數(shù)據(jù)。 DataTransfer 可以保存一項(xiàng)或多項(xiàng)數(shù)據(jù)、一種或者多種數(shù)據(jù)類(lèi)型。
屬性
dropEffect | dropEffect [String]指定實(shí)際的放置效果,可能的值: copy: 復(fù)制到新的位置 move: 移動(dòng)到新的位置 link: 建立一個(gè)源位置到新位置的鏈接 none: 禁止放置(禁止任何操作) |
effectAllowed | [String]指定拖動(dòng)時(shí)被允許的效果,可能的值: copy: 復(fù)制到新的位置. move:移動(dòng)到新的位置 . link:建立一個(gè)源位置到新位置的鏈接. copyLink: 允許復(fù)制或者鏈接. copyMove: 允許復(fù)制或者移動(dòng). linkMove: 允許鏈接或者移動(dòng). all: 允許所有的操作. none: 禁止所有操作. uninitialized: 缺省值(默認(rèn)值), 相當(dāng)于 all. |
files | 包含一個(gè)在數(shù)據(jù)傳輸上所有可用的本地文件列表。如果拖動(dòng)操作不涉及拖動(dòng)文件,此屬性是一個(gè)空列表。 |
types | 保存一個(gè)被存儲(chǔ)數(shù)據(jù)的類(lèi)型列表作為第一項(xiàng),順序與被添加數(shù)據(jù)的順序一致。如果沒(méi)有添加數(shù)據(jù)將返回一個(gè)空列表。 |
方法
void addElement(Element element) | 設(shè)置拖動(dòng)源。通常不需要改變這項(xiàng),如果修改這項(xiàng)將會(huì)影響拖動(dòng)的哪個(gè)節(jié)點(diǎn)和dragend事件的觸發(fā)。默認(rèn)目標(biāo)是被拖動(dòng)的節(jié)點(diǎn) |
void clearData(String type) | 刪除與給定類(lèi)型關(guān)聯(lián)的數(shù)據(jù)。類(lèi)型參數(shù)是可選的。如果類(lèi)型為空或未指定,將刪除所有類(lèi)型相關(guān)聯(lián)的數(shù)據(jù)。如果不存在指定類(lèi)型的數(shù)據(jù),或數(shù)據(jù)傳輸不包含任何數(shù)據(jù),此方法將沒(méi)有任何效果。 |
String getData(String type) | 獲得給定類(lèi)型的數(shù)據(jù),如果給定類(lèi)型的數(shù)據(jù)不存在或者數(shù)據(jù)轉(zhuǎn)存沒(méi)有包涵數(shù)據(jù),方法將返回一個(gè)空字符串。 |
void setData(String type,String data) | 為一個(gè)給定的類(lèi)型設(shè)置數(shù)據(jù)。如果該數(shù)據(jù)類(lèi)型不存在,它將添加到的末尾,這樣類(lèi)型列表中的最后一個(gè)項(xiàng)目將是新的格式。如果已經(jīng)存在的數(shù)據(jù)類(lèi)型,替換相同的位置的現(xiàn)有數(shù)據(jù)。就是,當(dāng)更換相同類(lèi)型的數(shù)據(jù)時(shí),不會(huì)更改類(lèi)型列表的順序。 |
void setDragImage(DOMElement image,long x,long y) | 自定義一個(gè)期望的拖動(dòng)時(shí)的圖片。大多數(shù)情況下,這項(xiàng)不用設(shè)置,因?yàn)楸煌蟿?dòng)的節(jié)點(diǎn)被創(chuàng)建成默認(rèn)圖片。 image 要用作拖動(dòng)反饋圖像元素 x 圖像內(nèi)的水平偏移量. y 像內(nèi)的垂直偏移量. |
瀏覽器支持
Internet Explorer 9+、Firefox、Opera 12、Chrome 以及 Safari 5+
演示代碼
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Drag & Drop</title> <style type="text/css"> .box { display: inline-block; width: 100px; height: 100px; border: 1px solid #ccccff; background-color: #ccccff; text-align: center; line-height: 100px; } .bin { width: 200px; height: 200px; padding: 10px; border: 1px solid #ccccff; overflow: hidden; float: left; } </style> </head> <body> <div style="display: table;"> <div class="bin"> <div class="box" draggable="true">可拖拽元素</div> </div> <div class="bin"> </div> </div> <script type="text/javascript"> var bins = document.querySelectorAll('.bin'); var boxs = document.querySelectorAll('.box'); var drag = null; for (var i = 0; i < boxs.length; i++) { var box = boxs[i]; box.onselectstart = function() { return false; }; box.ondragstart = function(e) { e.dataTransfer.effectAllowed = 'move'; e.dataTransfer.setData('text/plain', e.target.outerHTML); e.dataTransfer.setDragImage(e.target, 0, 0); drag = this; return true; }; box.ondragend = function(e) { drag = null; return false }; } for (var i = 0; i < bins.length; i++) { var bin = bins[i]; //當(dāng)拖曳元素進(jìn)入目標(biāo)元素 bin.ondragover = function(e) { e.preentDefault(); return true; }; //拖拽元素在目標(biāo)元素上移動(dòng) bin.ondragenter = function(e) { this.style.backgroundColor = '#eeeeff'; return true; }; //拖拽元素在目標(biāo)元素上離開(kāi) bin.ondragleave = function(e) { this.style.backgroundColor = '#fff'; return true; }; //拖拽的元素在目標(biāo)元素上同時(shí)鼠標(biāo)放開(kāi) bin.ondrop = function(e) { if (drag) { drag.parentNode.removeChild(drag); this.appendChild(drag); } this.style.backgroundColor = '#fff'; return false; }; } document.body.ondrop = function(e) { e.preventDefault(); e.stopPropagation(); } </script> </body> </html>
到此,關(guān)于“HTML5中實(shí)現(xiàn)拖放功能的代碼怎么寫(xiě)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。