首頁  >  文章  >  web前端  >  如何使用HTML5實作多個元素的拖放功能

如何使用HTML5實作多個元素的拖放功能

不言
不言原創
2018-12-01 14:52:085029瀏覽

透過使用HTML5的拖放功能我們可以拖放HTML頁面元素。在上一篇文章中,我們介紹了有關於可以拖放單一元素的程式碼。在接下來的這篇文章中,我們將介紹關於允許拖放多個元素的程式碼。

如何使用HTML5實作多個元素的拖放功能

話不多說,我們直接看範例

#範例一:使用UL標記拖放多個元素

程式碼如下:

ListDragDrop.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
  <link rel="stylesheet" href="ListDragDrop.css"/>
  <script>
    function load() {      
      var delbox = document.getElementById(&#39;del&#39;);
      delbox.addEventListener(&#39;dragover&#39;, onDragOver, false);
      delbox.addEventListener(&#39;drop&#39;, onDrop, false);      
      var elems = document.querySelectorAll(&#39;ul#list1 > li&#39;);      
      for (var i = 0; i < elems.length; i++) {
        el = elems[i];
        el.setAttribute(&#39;draggable&#39;, &#39;true&#39;);
        el.addEventListener(&#39;dragstart&#39;, onDragStart, false);
      }
    }    
function onDragStart(e) {
      e.dataTransfer.effectAllowed = &#39;copy&#39;;
      e.dataTransfer.setData(&#39;text&#39;, this.id);
    }    
function onDragOver(e) {
      e.preventDefault();
    }    
function onDrop(e) {
      if (e.stopPropagation) e.stopPropagation();      
      var eid = e.dataTransfer.getData(&#39;text&#39;);      
      var elem = document.getElementById(eid);
      elem.parentNode.removeChild(elem);
    }  
</script>
</head>
<body onload="load();">
   <div id="del">删除</div>
    <ul id="list1">
      <li id="1">海豚</li>
      <li id="2">鲸鱼</li>
      <li id="3">企鹅</li>
      <li id="4">北极熊</li>
      <li id="5">雪狐</li>
    </ul>
    </ul>
</body>
</html>

ListDragDrop.css

#del{
  width:120px;  
  height:60px;  
  border: solid 2px #ff6a00;
  }
ul#list1 > li {
  display: block;  
  width: 150px;  
  border: 1px solid #808080;
  }

說明:

##在載入頁面時執行載入功能。 load函數中的以下程式碼將dragover和drop事件指派給[Delete]的div。當元素被拖曳到Delete框時,會呼叫onDragOver函數,當它被刪除時,會呼叫onDrop函數。

var delbox = document.getElementById(&#39;del&#39;);
  delbox.addEventListener(&#39;dragover&#39;, onDragOver, false);
  delbox.addEventListener(&#39;drop&#39;, onDrop, false);

呼叫querySelectorAll方法以取得ul標記中的li元素。 for循環重複處理中所取得的元素數組,並將每個元素的「draggable」屬性設為true。此過程將其設定為可拖曳物件。它還分配了一個dragstart事件。

var elems = document.querySelectorAll(&#39;ul#list1 > li&#39;);  
for (var i = 0; i < elems.length; i++) {
    el = elems[i];
    el.setAttribute(&#39;draggable&#39;, &#39;true&#39;);
    el.addEventListener(&#39;dragstart&#39;, onDragStart, false);
  }

拖曳清單項目時,將會呼叫下列onDragStart函數。呼叫dataTransfer物件的setData方法以在dataTransfer物件中儲存元素的ID。

function onDragStart(e) {
      e.dataTransfer.effectAllowed = &#39;copy&#39;;
      e.dataTransfer.setData(&#39;text&#39;, this.id);
    }

當在拖放區域中拖曳清單中的項目時,將會呼叫下列onDragOver函數。由於DragOver沒有特別的處理,因此它呼叫PreventDefault方法來取消事件。

function onDragOver(e) {
      e.preventDefault();
    }

如果清單的項目在拖放區域內被刪除,則可以呼叫onDrop函數。呼叫stopPropagation方法取消事件的處理。然後,我們從dataTransfer物件中取得ID。透過取得ID,您可以獲得丟棄區域中丟棄的元素。呼叫getElementById方法並從ID中取得LI標記的物件。透過使用取得的LI物件的paerntNode屬性存取父節點,呼叫removeChild方法,刪除被丟棄的清單的項目。

function onDrop(e) {      
if (e.stopPropagation) e.stopPropagation();      
var eid = e.dataTransfer.getData(&#39;text&#39;);      
var elem = document.getElementById(eid);
      elem.parentNode.removeChild(elem);
    }

運行結果:

使用網頁瀏覽器顯示上述HTML檔案。將顯示如下所示的效果。

如何使用HTML5實作多個元素的拖放功能

可以拖曳頁面底部清單中的項目。例如拖曳「企鵝」這一項,將其拖曳到刪除區域,然後下面清單項目中就沒有第三項「企鵝」了,具體效果如下圖所示

如何使用HTML5實作多個元素的拖放功能

如何使用HTML5實作多個元素的拖放功能

拖曳其他項目都是一樣的效果,五項都可以刪除。

以上是如何使用HTML5實作多個元素的拖放功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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