首頁  >  文章  >  web前端  >  H5的拖放功能詳解

H5的拖放功能詳解

php中世界最好的语言
php中世界最好的语言原創
2018-03-27 09:59:462891瀏覽

這次帶給大家H5的拖放功能詳解,實現H5拖放功能的注意事項有哪些,下面就是實戰案例,一起來看一下。

關於HTML5中的拖曳

拖曳(Drag 和Drop)是一種常見的特性,即抓取物件以後拖到另一個位置,在HTML5 中,拖放是標準的組成部分。在HTML5中使用者可以使用滑鼠選擇一個可拖曳元素,將元素拖曳到一個可放置元素,並透過釋放滑鼠按鈕放到這些元素。在拖曳操作期間,可拖曳元素的半透明表示跟隨滑鼠指標。

如果我們希望元素可以被拖曳,那麼需要將其draggable屬性設為true (a標籤draggable預設為true)

拖曳的事件

在進行拖曳操作的不同階段會觸發數種事件,拖曳事件的dataTransfer屬性存放了拖曳操作中的相關資料。

dragstart 作用於[來源元素],當一個元素開始被拖曳的時候觸發,使用者拖曳的元素需要附加dragstart事件。在這個事件中,監聽器將設定與這次拖曳相關的訊息,例如拖曳的資料和影像。
dragenter 作用於[來源元素],當拖曳中的滑鼠進入一個元素的時候觸發。這個事件的監聽器需要指明是否允許在這個區域釋放滑鼠。如果沒有設定監聽器,或監聽器沒有進行操作,則預設不允許釋放。
dragover 作用於[目標元素],當拖曳中的滑鼠移動經過一個元素的時候觸發。
dragleave 作用於[目標元素],當拖曳中的滑鼠離開元素時觸發。可作為可釋放回饋的高亮或插入標記去除。
drag 作用於[來源元素],事件會在元素拖曳時觸發。
drop 作用於[目標元素],在拖曳操作結束釋放時於釋放元素上觸發。
dragend 作用於[來源元素],拖曳來源在拖曳操作結束時觸發,不管操作成功與否。

(在拖曳的時候只會觸發拖曳的相關事件,滑鼠事件,例如mousemove,是不會觸發的)

DataTransfer 物件

在處理拖曳操作時,我們需要用到DataTransfer 物件來保存被拖曳的資料。 DataTransfer 可以保存一項或多項資料、一種或多種資料類型
屬性

dropEffect dropEffect    
           [String]指定實際的置入效果,可能的值:
           copy: 複製到新的位置
           move: 移至新的位置
           link: 建立一個來源位置到新位置的連結
           none: 禁止放置(禁止任何動作)
effectAllowed [String]指定拖曳時被允許的效果,可能的值:
           copy: 複製到新的位置.
           move:移動到新的位置 .
           link:建立一個來源位置到新位置的連結.
           copyLink: 允許複製或連結.
           copyMove: 允許複製或移動.
           linkMove: 允許連結或移動.
           all: 允許所有的操作.
           none: 禁止所有作業.
           uninitialized: 預設值(預設值), 相當於 all.
files #包含一個在資料傳輸上所有可用的本機檔案清單。如果拖曳操作不涉及拖曳文件,此屬性是空列表。
types 保存一個被儲存資料的類型清單作為第一項,順序與被新增資料的順序一致。如果沒有新增資料將傳回一個空列表。

方法

void addElement(Element element) 設定拖曳來源。通常不需要改變這項,如果修改這項將會影響拖曳的哪個節點和dragend事件的觸發。預設目標是被拖曳的節點
void clearData(String type) 刪除與給定類型關聯的資料。類型參數是可選的。如果類型為空或未指定,將刪除所有類型相關聯的資料。如果不存在指定類型的數據,或數據傳輸不包含任何數據,此方法將沒有任何效果。
String getData(String type) 獲得給定類型的數據,如果給定類型的資料不存在或資料轉存沒有包涵數據,方法將傳回一個空字串。
void setData(String type,String data) #為一個給定的類型設定資料。如果該資料類型不存在,它將添加到的末尾,這樣類型清單中的最後一個項目將是新的格式。如果已經存在的資料類型,請替換相同的位置的現有資料。就是,當更換相同類型的資料時,不會更改類型清單的順序。
void setDragImage(DOMElement image,long x,long y) 自訂一個期望的拖曳時的圖片。大多數情況下,這項不用設置,因為被拖曳的節點被創建成預設圖片。
           image 用作拖曳回饋影像元素
           x 影像內的水平偏移.
y 像內的垂直偏移.

瀏覽器支援

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>
    <p style="display: table;">
        <p class="bin">
            <p class="box" draggable="true">可拖拽元素</p>
        </p>
        <p class="bin"> </p>
    </p>
    <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 = &#39;move&#39;;
                e.dataTransfer.setData(&#39;text/plain&#39;, 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];
            //当拖曳元素进入目标元素
            bin.ondragover = function(e) {
                e.preentDefault();
                return true;
            };
            //拖拽元素在目标元素上移动
            bin.ondragenter = function(e) {
                this.style.backgroundColor = &#39;#eeeeff&#39;;
                return true;
            };
            //拖拽元素在目标元素上离开
            bin.ondragleave = function(e) {
                this.style.backgroundColor = &#39;#fff&#39;;
                return true;
            };
            //拖拽的元素在目标元素上同时鼠标放开
            bin.ondrop = function(e) {
                if (drag) {
                    drag.parentNode.removeChild(drag);
                    this.appendChild(drag);
                }
                this.style.backgroundColor = &#39;#fff&#39;;
                return false;
            };
        }
        document.body.ondrop = function(e) {
            e.preventDefault();
            e.stopPropagation();
        }
    </script>
</body>
</html>

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

H5合成海報詳解

#Drag事件編輯器實作拖曳上傳圖片效果

以上是H5的拖放功能詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn