【发布时间】:2022-01-19 01:50:18
【问题描述】:
我正在设置一个视图,可以将表格行拖到另一个 div 内的另一个表格中。在拖动一行时,我通过更改背景颜色突出显示可放置区域。但是,当在可放置 div 内的元素上拖动元素时,背景颜色会出现闪烁。
我已经在 JSFiddle (link) 中使用以下代码复制了它:
HTML
<h3>
Drag item from some stuff 2 to some stuff 1
</h3>
<div id="table1-wrapper" class="table-wrapper" ondragover="dragOver(event)" ondragleave="dragLeave(event)">
<table >
<tbody>
<tr draggable="true">
<td>some stuff 1</td>
</tr>
<tr draggable="true">
<td>some stuff 1</td>
</tr>
<tr draggable="true">
<td>some stuff 1</td>
</tr>
</tbody>
</table>
</div>
<div id="table2-wrapper" class="table-wrapper" ondragover="dragOver(event)" ondragleave="dragLeave(event)">
<table >
<tbody>
<tr draggable="true">
<td>some stuff 2</td>
</tr>
<tr draggable="true">
<td>some stuff 2</td>
</tr>
<tr draggable="true">
<td>some stuff 2</td>
</tr>
</tbody>
</table>
</div>
JS
function dragOver(ev) {
document.getElementById('table1-wrapper').style.backgroundColor = 'gray';
}
function dragLeave(ev) {
document.getElementById('table1-wrapper').style.backgroundColor = null;
}
CSS
.table-wrapper {
border: 1px solid black;
}
关于如何修复故障的任何想法?
【问题讨论】:
-
我花了一些时间研究这个问题。看起来这个问题是由一些不是
table-wrapper而不是在表包装器内部的区域引起的,并且这些区域不会冒泡ondragover事件。我认为非 jquery 解决方案需要一些不同的逻辑,例如使用dragstart事件在覆盖整个元素的 dropareas 上创建覆盖,因此注册任何ondragover事件 -
我今天又看了一些,发现了这个问题:stackoverflow.com/questions/7110353/… 其中的一个答案让我尝试用
#table1-wrapper * { pointer-events: none; }更新我的小提琴的 CSS 似乎解决了它:)
标签: javascript html css drag-and-drop