用HTML5原生實現拖放或排序

AleciaBrent 8年前發布 | 14K 次閱讀 HTML5 前端技術

來自: http://ourjs.com/detail/56af218c88feaf2d031d2465

原生拖放

拖放是一種很常見的功能,現在這個功能已經成為Html5標準的一部分。通過html5只需要簡單幾行代碼即可實現拖放,比如下面這個例子,你可以將此圖片上下拖放。

示例代碼

<script>
function allowDrop(ev) {
    ev.preventDefault();
}
function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    ev.target.appendChild(document.getElementById(data));
}
</script>

<div class="dragdrop" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <div class="dragdrop" ondrop="drop(event)" ondragover="allowDrop(event)"> <img id="drag1" src="/img/ad_ourjs.jpg" draggable="true" ondragstart="drag(event)"> </div></pre>

代碼步驟

第一步: 要讓一個元素可拖放

需要設置 draggable 屬性

<img draggable="true">

第二步: 拖放什么

在 ondragstart 事件中通過 dataTransfer.setData 設置拖放的元素

function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
}

在這種情況下,是通過傳遞被拖放對象的ID來操作的,所以類型是"text"

第三步: 拖放到什么地方

通過 ondragover實現, 通常情況下,元素可能會被拖放到其它地方,當一個容器允許放置時,只需要在ondragover事件中 preventDefault 即可

function allowDrop(ev) {
    ev.preventDefault();
}

第四步: 放置

在drop事件中將對象"轉移"到容器中

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    ev.target.appendChild(document.getElementById(data));
}

這里通過appendChild實現轉移拖放對象,同理可通過放置在不同位置實現排序。

相關事件

在拖放對象上觸發的事件

ondragstart - 當用戶開始拖放時

ondrag - 當用戶正在拖放時

ondragend - 當用戶拖放結束時

在放置對象(容器)上觸發的事件

ondragenter - 當拖放對象進入容器時(首次)

ondragover - 當拖放對象經過容器時

ondragleave - 當拖放對象離開窗口時

ondrop - 當拖放對象釋放到容器中時

DataTransfer

標準屬性

DataTransfer.dropEffect 拖放的操作類型: copy、move、link 或 none (復制、移動創建鏈接等)

DataTransfer.effectAllowed 播放允許的類型: 比如有些容器只能復制,有些只允許移動等

DataTransfer.files 存放一些拖放的本地文件,如果沒有拖放文件,則此列表為空

DataTransfer.items 只讀 DataTransferItemList 對象

DataTransfer.types 只讀 dragstart事件中指定的拖放類型

標準方法

DataTransfer.clearData() 清除指定類型的拖放數據

DataTransfer.getData() 獲取指定類型的數據

DataTransfer.setData() 設置指定類型的數據

DataTransfer.setDragImage() 設置拖放時的自定義圖標

支持: IE9及以上

參考:

http://www.w3schools.com/html/html5_draganddrop.asp

http://www.w3schools.com/jsref/event_ondragstart.asp

https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer

</div>

 本文由用戶 AleciaBrent 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!