首页 前端知识 使用draggable实现拖拽,并携带参数

使用draggable实现拖拽,并携带参数

2024-02-20 09:02:45 前端知识 前端哥 529 688 我要收藏

在原生Js中实现

要实现拖放和携带数据,需要使用HTML5的Drag and Drop API。首先,在拖动的元素上设置draggable属性为true:

<divdraggable="true">拖动我</div>
复制

然后,在目标元素上设置ondragover和ondrop事件处理程序,以便在元素拖动到目标区域时触发:

<divondragover="allowDrop(event)"ondrop="drop(event)">放置区域</div>
复制

接下来,在拖动元素上设置ondragstart事件处理程序,以便在开始拖动时设置数据:

<divdraggable="true"ondragstart="drag(event)">拖动我</div>
复制

在drag事件处理程序中,可以调用setData方法设置要传递的数据类型和值:

functiondrag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
复制

在drop事件处理程序中,可以调用getData方法获取传递的数据类型和值:

functiondrop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
复制

为了在元素被拖放后消失,可以在drop事件处理程序中使用removeChild方法将元素从DOM中删除:

functiondrop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
var draggedElement = document.getElementById(data);
ev.target.appendChild(draggedElement);
draggedElement.parentNode.removeChild(draggedElement);
}
复制

这样,当拖动元素被放置到目标区域时,它将被移动到该区域并从原位置删除,并且可以通过getData方法获取传递的数据。

在vue中实现

在Vue中实现拖放和携带数据的方式与原生JavaScript的方式类似,但需要结合Vue的语法和事件处理方式。以下是一个简单的示例:

<template><div><divclass="drag"v-for="item in items":key="item.id":draggable="true" @dragstart="dragStart(item, $event)">
{{ item.text }}
</div><divclass="drop" @dragover.prevent @drop="drop($event)">
放置区域
</div></div></template><script>exportdefault {
data() {
return {
items: [
{ id: 1, text: '拖动我' },
{ id: 2, text: '再拖动我' },
{ id: 3, text: '再再拖动我' },
],
};
},
methods: {
dragStart(item, event) {
event.dataTransfer.setData('text/plain', item.id);
},
drop(event) {
event.preventDefault();
const itemId = event.dataTransfer.getData('text/plain');
const draggedItem = this.items.find((item) => item.id === Number(itemId));
const index = this.items.indexOf(draggedItem);
this.items.splice(index, 1);
},
},
};
</script>
复制

在上面的示例中,我们使用v-for指令将items数组中的每个元素渲染为一个可拖动的div元素,并在dragstart事件处理程序中设置要传递的数据类型和值。我们还在放置区域的div元素上设置了dragover和drop事件处理程序,以便在元素拖动到目标区域时触发,并在drop事件处理程序中获取传递的数据类型和值,并根据这些数据更新items数组,从而实现拖放和携带数据的功能。

需要注意的是,我们在dragover事件处理程序中调用了prevent方法来防止浏览器默认的拖放行为。此外,我们在拖放过程中没有直接删除元素,而是更新了items数组,这样可以更好地与Vue的响应式数据绑定机制配合使用,从而实现更高效的更新和渲染。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/2342.html
标签
评论
还可以输入200
共0条数据,当前/页
发布的文章

AJAX(二)jQuery

2024-03-05 09:03:04

jQuery操作DOM(3)

2024-03-05 09:03:36

jQuery - 获取内容和属性

2024-03-05 09:03:34

深拷贝浅拷贝方法总结

2024-03-05 09:03:27

JQuery简介与解析

2024-03-01 12:03:31

Java Web(十)--jQuery

2024-03-05 09:03:24

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!