gpt4 book ai didi

javascript - 如何启用跨表格单元格和行的 div 拖动和调整大小

转载 作者:行者123 更新时间:2023-12-03 08:10:24 26 4
gpt4 key购买 nike

更新

我认为 Jquery 是解决我的问题的唯一方法。所以让演示工作将会有很大的帮助。谢谢。

我正在尝试创建一个调度程序类型的应用程序。

SCREENSHOT

我需要能够垂直调整彩色 div 的大小,并将它们拖动到表格中的任何行/单元格。

示例。将调整大小的橙色 div 拖到其下方的行中。

IMAGE

或者在这种情况下,如果我调整绿色 div 的大小,则需要将黄色 div 插入其下方的行中。

IMAGE 2

拖动 div 是不言自明的。

我有一个工作沙箱 DEMO

我确实在网上找到了一个 fiddle ,它完全满足我的需要,但它使用 Jquery,如果可能的话,我宁愿不使用它。 FIDDLE OF WHAT I AM LOOKING FOR

   $(function() {
$(".drop").sortable({
connectWith: "td",
placeholder: "ui-state-highlight"
}).disableSelection();
});

$(function() {
$(".resize").resizable({
grid: [50, 0],
handles: 'e'
});
});

最佳答案

普通 JS 解决方案

你说:

I did find a fiddle online that has exactly what I need, but ituses jQuery and I would prefer not to use it if possible.

我尝试使用 vanilla JS ( HTML Drag and Drop API ) 复制上面提到的 fiddle 的输出。这是我能得到的最接近的结果。

注意:如果您想垂直调整框大小,请将 resize:horizo​​ntal; 更改为 resize:vertical;

请参阅下面的代码片段。

document.addEventListener('DOMContentLoaded', (event) => {
var dragSrcEl = null;

function handleDragStart(e) {
dragSrcEl = this;

e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/html', this.innerHTML);
}

function handleDragOver(e) {
if (e.preventDefault) {
e.preventDefault();
}

e.dataTransfer.dropEffect = 'move';

return false;
}

function handleDragEnter(e) {
this.classList.add('over');
}

function handleDragLeave(e) {
this.classList.remove('over');
}

function handleDrop(e) {
if (e.stopPropagation) {
e.stopPropagation();
}

if (dragSrcEl != this) {
dragSrcEl.innerHTML = this.innerHTML;
this.innerHTML = e.dataTransfer.getData('text/html');
}

return false;
}

function handleDragEnd(e) {
items.forEach(function(item) {
item.classList.remove('over');
});
}

let items = document.querySelectorAll('.container .drop');
items.forEach(function(item) {
item.addEventListener('dragstart', handleDragStart, false);
item.addEventListener('dragenter', handleDragEnter, false);
item.addEventListener('dragover', handleDragOver, false);
item.addEventListener('dragleave', handleDragLeave, false);
item.addEventListener('drop', handleDrop, false);
item.addEventListener('dragend', handleDragEnd, false);
});
});
table {
height: 100px;
}

td {
height: 68px;
width: 150px;
border: gray thin solid;
}

.resize {
top: 10px;
width: 50px;
height: 50px;
float: left;
border: #002DA4 thin solid;
border-radius: 8px;
text-align: center;
border-right-color: red;
position: absolute;
overflow: hidden;
resize: horizontal;
z-index: 1;
}

td.drop {
position: relative;
width: 60px;
}
<!DOCTYPE html>
<html lang='en'>

<head>
<meta charset='UTF-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>Document</title>
</head>

<body>
<div>
<table cellspacing='3'>
<tr>
<th>8am</th>
<th>9am</th>
<th>10am</th>
<th>11am</th>
<th>12n</th>
<th>1pm</th>
<th>2pm</th>
<th>3pm</th>
<th>4pm</th>
<th>5pm</th>
</tr>

<tbody class='container'>
<tr>
<td class='drop'>
<div draggable='true' class='resize'>Session A</div>
</td>
<td draggable='true' class='drop'>
<div draggable='true' class='resize'>Session B</div>
</td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
</tr>

<tr>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
<td draggable='true' class='drop'></td>
</tr>
</tbody>
</table>
</div>
</body>

</html>

关于javascript - 如何启用跨表格单元格和行的 div 拖动和调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71011071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com