当前位置:首页 > 技术文章 > 正文内容

如何使用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实现多个元素的拖放功能的详细内容,更多请关注其它相关文章!

更多技巧请《转发 + 关注》哦!

相关文章

Ubuntu 25.04发行版登场:Linux 6.14内核,带来多项技术革新

IT之家 4 月 18 日消息,科技媒体 linuxiac 昨日(4 月 17 日)发布博文,报道称代号为 Plucky Puffin 的 Ubuntu 25.04 发行版正式上线,搭载最新 Linu...

2020年最漂亮的7个Linux发行版(最受欢迎的linux发行版)

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言对于想学习Linux的朋友们,心中一定有疑问,哪个Linux版本比较好入门,Li...

7种超轻量级的Linux发行版,能够帮助你找到适合自己的操作系统

Linux是一种非常受欢迎的开源操作系统,而且有许多版本可以选择。有时候,你需要一种超轻量级的Linux发行版,它可以在资源有限的设备上运行,并且能够快速启动。本文将介绍7种超轻量级的Linux发行版...

「图解」父子组件通过 props 进行数据交互的方法

1.组件化开发,经常有这样的一个场景,就是父组件通过 Ajax 获取数据,传递给子组件,如何通过 props 进行数据交互来实现,便是本图解的重点。2.代码的结构3.具体代码 ①在父组件 data 中...

Vue父子组件参数传递方法(vue父子组件传参方式)

在 Vue 中,父子组件之间的参数传递是常见的需求,主要通过 Props 和 自定义事件 实现。以下是详细说明和代码示例:一、父组件向子组件传递参数(Props)父组件通过 属性 向子组件传递数据,子...

面试官:聊聊你知道的Vue与React的区别

最近面到很多大公司的时候,小编都会碰到一个很尴尬的问题,很多大公司的技术栈都是React,但是小编学的是Vue,其实从本质上来说两者都是比较优秀的前端框架,所以有些面试官会问到Vue和React的区别...