javascript - HTML5 拖放以重新排列网格中的小部件?

标签 javascript html drag

我有一个由假想的小部件网格组成的仪表板,该网格有 2 行,每行有 3 个槽。我希望用户能够将一段内容拖到另一个插槽,然后它会替换插槽中已有的内容(将其推到右侧,可能会脱离网格)。我正在使用此代码来处理拖放。如何检测碰撞并移动目标插槽中的小部件?

<script type="text/javascript">
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));
}
</script>

每个网格槽都是这样的:

<div id="gridslot" ondrop="drop(event)" ondragover="allowDrop(event)"/>
<div id="widget" draggable="true" ondragstart="drag(event)"/>Some Content</div>
</div>

最佳答案

这是伪代码

function setContent(targetCell, content) {
    if (targetCell is off the grid)
        return;

    if (targetCell.content is not empty) {
        // we need to shift the targets content to the right
        setContent(targetCell.nextCellToTheRight, targetcell.content);
    }

    targetCell.content = content;
}

请注意,它会递归地将内容向右移动以腾出空间,必要时可能会移动整行。

关于javascript - HTML5 拖放以重新排列网格中的小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11171875/

相关文章:

JavaScript;具有相同来源的选项卡/窗口之间的通信

javascript - 隐藏输入字段,直到选择特定下拉值

python - 可拖动线在 Matplotlib 中相互选择

flutter - 如何检测 GestureDetector 是否悬停在 Flutter 中?

java - 将 JPanel 拖入 JFrame

javascript - 如何仅使用javascript基于数组索引上传图像?

javascript - jQuery - 使用类加载设置数量的元素

javascript - 使用 d3.js 的水平条形图出现错误

javascript - 检查 javascript 源是否使用了禁止的函数

javascript - Vue.js 通过单击相邻元素来获取元素的 html 值