您好,欢迎访问一九零五行业门户网

如何使用HTML5实现多个元素的拖放功能

通过使用html5的拖放功能我们可以拖放html页面元素。在上一篇文章中,我们介绍了有关于可以拖放单个元素的代码。在接下来的这篇文章中,我们将来介绍关于允许拖放多个元素的代码。
话不多说,我们直接看示例
示例一:使用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('del'); delbox.addeventlistener('dragover', ondragover, false); delbox.addeventlistener('drop', ondrop, false); var elems = document.queryselectorall('ul#list1 > li'); for (var i = 0; i < elems.length; i++) { el = elems[i]; el.setattribute('draggable', 'true'); el.addeventlistener('dragstart', ondragstart, false); } } function ondragstart(e) { e.datatransfer.effectallowed = 'copy'; e.datatransfer.setdata('text', this.id); } function ondragover(e) { e.preventdefault(); } function ondrop(e) { if (e.stoppropagation) e.stoppropagation(); var eid = e.datatransfer.getdata('text'); 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('del'); delbox.addeventlistener('dragover', ondragover, false); delbox.addeventlistener('drop', ondrop, false);
调用queryselectorall方法以获取ul标记中的li元素。for循环反复处理中获取的元素数组,并将每个元素的“draggable”属性设置为true。此过程将其设置为可拖动对象。它还分配了一个dragstart事件。
var elems = document.queryselectorall('ul#list1 > li'); for (var i = 0; i < elems.length; i++) { el = elems[i]; el.setattribute('draggable', 'true'); el.addeventlistener('dragstart', ondragstart, false); }
拖动列表项时,将调用以下ondragstart函数。调用datatransfer对象的setdata方法以在datatransfer对象中存储元素的id。
function ondragstart(e) { e.datatransfer.effectallowed = 'copy'; e.datatransfer.setdata('text', 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('text'); var elem = document.getelementbyid(eid); elem.parentnode.removechild(elem); }
运行结果:
使用web浏览器显示上述html文件。将显示如下所示的效果。
可以拖动页面底部列表中的项目。比如拖动“企鹅”这一项,将其拖动到删除区域,然后下面列表项中就没有第三项“企鹅”了,具体效果如下图所示
拖动其他项都是一样的效果,五项都可以删除。
以上就是如何使用html5实现多个元素的拖放功能的详细内容。
其它类似信息

推荐信息