1. 程式人生 > >簡單自學web前端——H5 拖放

簡單自學web前端——H5 拖放

H5新特性——拖放

  拖放(Drag和drop)是 HTML5 標準的組成部分,拖放是一種常見的特性,即抓取物件以後拖到另一個位置。在 HTML5 中,拖放是標準的一部分,任何元素都能夠拖放,非常的好用和重要的,接下來我就簡單介紹一下。

拖放的過程:
    拖動開始——>拖動過程——>拖動結束
拖放用到的相關函式:
    被拖放的元素:
        (1)ondragstart:源物件開始被拖動
        (2)ondrag:源物件被拖動過程中(滑鼠可能在移動也可能未移動)
        (3)ondragend:源物件被拖動結束 
    目的物件:
        (1)ondragenter:目標物件被源物件拖動著進入
        (2)ondragover:目標物件被源物件拖動著懸停在上方
        (3)ondragleave:源物件拖動著離開了目標物件
        (4)ondrop:源物件拖動著在目標物件上方釋放/鬆手

拖放的簡單步驟
1、設定元素為可拖放
    首先,為了使元素可拖動,把draggable屬性設定為true。
2、設定被拖動的函式
    新增ondragstart事件,這個屬性會呼叫了一個函式,drag(event),它規定了被拖動的資料。
    函式中的dataTransfer.setData()方法設定被拖資料的資料型別和值。
    例子:
    function drag(ev)
    { 
        ev.dataTransfer.setData("Text",ev.target.id);
    }
    傳送資料的資料型別是 "Text",值是被拖動元素的id。
3、設定目的物件的函式
    (1)放到何處
        新增ondragover事件,這個屬性規定在何處放置被拖動的資料。
        預設地,無法將資料/元素放置到其他元素中。
        這要通過呼叫ondragover事件的 event.preventDefault()方法: 
        function allowDrop(ev)
        {
            ev.preventDefault();
        }
    (2)進行放置
        新增ondrop事件,當放置被拖資料時,會發生ondrop事件。
        ondrop 屬性呼叫了一個函式,drop(event):
        function drop(ev)
        {
            ev.preventDefault();
            var data=ev.dataTransfer.getData("Text");
            ev.target.appendChild(document.getElementById(data));
        }
        重點:
        呼叫preventDefault()來避免瀏覽器對資料的預設處理(drop事件的預設行為是以連結形式開啟)。
        通過 dataTransfer.getData("Text") 方法獲得被拖的資料。該方法將返回在 setData() 方法中設定為相同型別的任何資料。被拖資料是被拖元素的id。
        最後一行程式碼是把被拖元素追加到放置元素(目標元素)中。

自己寫的一個菜譜選單的簡單的小例子,與大家分享下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>拖拽</title>
    <script type="text/javascript">
        function drag(ev)
        {
            ev.dataTransfer.setData("Text",ev.target.id);
        }
        function
allowDrop(ev) {
ev.preventDefault(); } function drop(ev) { ev.preventDefault(); var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); }
</script> <style type
="text/css">
body p{ margin: 0px; padding: 0px; border:0px; } .caipu{ width: 1000px; height: 500px; border: solid 1px blue; overflow:auto; } td{ padding: 10px; } .caidan{ width: 200px; height: 500px; border: solid 1px blue; margin-left: 50px; overflow:auto; } .caipu, .caidan{ display: inline-block; } </style> </head> <body> <div class="div1"> <h1>菜譜</h1> <div class="caipu"> <table> <tr> <td> <div draggable="true" ondragstart="drag(event)" id="drag1" style="background-image: url(./img/food1.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;"> <p style="padding-top: 150px;">炒土豆————10元</p> </div> </td> <td> <div draggable="true" ondragstart="drag(event)" id="drag2" style="background-image: url(./img/food2.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;"> <p style="padding-top: 150px;">炒土豆————10元</p> </div> </td> <td> <div draggable="true" ondragstart="drag(event)" id="drag3" style="background-image: url(./img/food2.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;"> <p style="padding-top: 150px;">炒土豆————10元</p> </div> </td> <td> <div draggable="true" ondragstart="drag(event)" id="drag4" style="background-image: url(./img/food3.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;"> <p style="padding-top: 150px;">炒土豆————10元</p> </div> </td> <td> <div draggable="true" ondragstart="drag(event)" id="drag5" style="background-image: url(./img/food4.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;"> <p style="padding-top: 150px;">炒土豆————10元</p> </div> </td> </tr> </table> </div> </div> <div class="div2"> <h1>選單</h1> <div class="caidan" ondrop="drop(event)" ondragover="allowDrop(event)"> </div> </div> </body> </html>

結果截圖:
可以將左邊菜譜中的div 拖放到右邊的選單的div中。
這裡寫圖片描述

希望對大家有用,如果有錯誤可以指出來,大家互相學習!