我正在用HTML和JavaScript做一个拖放系统。我会把一个任务(div
元素)从“To Do”栏拖放到“In Development”栏,反之亦然。我遇到的唯一问题是,你可以把一个任务拖放到另一个任务中,而我不会。
这是开始的情况:
这是一个拖放操作之后的结果:
现在我将防止用户将任务2拖放到任务1中。我该怎么做呢?下面你可以找到我的代码。
先谢谢你了。
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
table {
font-family: "Segoe UI", sans-serif;
border-collapse: collapse;
}
table,
th,
td {
border: 1px solid gray;
padding: 10px;
}
th {
background-color: lightgray;
}
th,
td {
width: 33.33%;
}
td {
min-height: 80px;
}
.post-it {
background-color: yellow;
padding: 10px 5px;
margin: 5px;
margin-bottom: 20px;
box-shadow: 5px 5px 5px gray;
border: 1px black solid;
}
.post-it h4 {
text-align: center;
margin: 0;
}
<table>
<tr>
<th>To Do</th>
<th>In Development</th>
<th>Done</th>
</tr>
<tr>
<td id="todo" ondrop="drop(event)" ondragover="allowDrop(event)">
<div id="task1" class="post-it" draggable="true" ondragstart="drag(event)">
<h4 draggable="false">Task 1</h4>
<p draggable="false">Lorem ipsum dolor sit amet</p>
</div>
<div id="task2" class="post-it" draggable="true" ondragstart="drag(event)">
<h4 draggable="false">Task 2</h4>
<p draggable="false">Irish skinny, grinder affogato</p>
</div>
</td>
<td id="indev" ondrop="drop(event)" ondragover="allowDrop(event)"></td>
<td id="done" ondrop="drop(event)" ondragover="allowDrop(event)"></td>
</tr>
</table>
3条答案
按热度按时间rdlzhqv91#
你可以通过在post-it div中添加一个“noDrop”类来解决这个问题,然后用这个类的测试来更新你的drop函数。下面使用jQuery来做测试,使用jQuery hasClass函数。
lg40wkob2#
在
drag
函数和drop
函数中使用ev.currentTarget
代替ev.target
。1hfyxw5xn3#
你唯一需要做的就是为你的droppable div设置一个条件。为此,修改
allowDrop
函数如下:它将检查
td
元素,并且仅在目标是td
元素时才允许删除。x一个一个一个一个x一个一个二个一个x一个一个三个一个