javascript - 拖放系统重叠掉落的 div 元素

标签 javascript css

尝试将灰色框放在任何列中,如果您在列中放置太多,这些框最终会相互重叠。我如何进行验证以阻止这种情况发生?我希望每个盒子都在彼此的下方,彼此之间有 X 像素的间隙。

下面不是这些框的完整代码。如果您想查看完整的源代码,请使用该网站。

function dragInfo(event) {
    event.dataTransfer.setData("Info", event.target.id);
}


function allowDrop(event) {
    event.preventDefault();
}

function drop(event) {
    event.preventDefault();
    var data = event.dataTransfer.getData("Info");
    event.target.appendChild(document.getElementById(data));
    console.log(data);
}

function drag_drop(event) {
    event.preventDefault();
}
.columnContent {
    padding-top: 5px;
    width: 129px;
    height: auto;
    text-align: center;
    margin: 3px;
    border-radius: 20px;
    flex-direction: column;
}


.dropBox {
    display: inline-block;
    position: relative;
    height: 140px;
    width: 120px;
    border: 2px dashed;
    background-color: lightgray;
    cursor: move;
    box-sizing: border-box;
    z-index: 1;
}
    <div class="columnContent" id="c1" ondrop="drop(event)" ondragover="allowDrop(event)">
        <p>Customer's order</p>
        <div class="dropBox" ondragover="allowDrop(event)" ondragstart="dragInfo(event)" id="dp1" draggable="true">
            <p id="para1">Drag file here</p>
            <div class="leftAlign">
                <img src="pdf.jpg" id="pdfImg" style="visibility: hidden">
                <p1 id="pdfInfo"></p1>
                <br>
            </div>
            <input id="txt1" placeholder="Customer's code" style="visibility: hidden">
            <br>
            <input id="txt2" placeholder="Customer's size" style="visibility: hidden">
            <br>
            <input id="txt3" placeholder="Customer's DD" style="visibility: hidden">
            <br>
            <button id="btn" style="visibility: hidden">Save</button>
    </div>
</div>
<div class="columnContent" id="c2" ondrop="drop(event)" ondragover="allowDrop(event)">
    <p>Planned</p>
</div>

最佳答案

我将 HTML 代码更改为:

<div class="columnContent" id="c2" ondrop="drop(event, this)" ondragover="allowDrop(event)">
    <p>Planned</p>
</div>

this 作为第二个参数传递给 drop 函数。

然后将 JavaScript 更改为以下内容:

function drop(event, el) {
    event.preventDefault();
    var data = event.dataTransfer.getData("Info");
    el.appendChild(document.getElementById(data));
    console.log(data);
}

为元素添加选项作为第二个参数。然后使用传递的元素作为要追加的元素。


下面是完整的片段

function dragInfo(event) {
    event.dataTransfer.setData("Info", event.target.id);
}

function allowDrop(event) {
    event.preventDefault();
}

function drop(event, el) {
    event.preventDefault();
    var data = event.dataTransfer.getData("Info");
    el.appendChild(document.getElementById(data));
    console.log(data);
}

function drag_drop(event) {
    event.preventDefault();
}
.columnContent {
    padding-top: 5px;
    width: 129px;
    height: auto;
    text-align: center;
    margin: 3px;
    border-radius: 20px;
    flex-direction: column;
}

.dropBox {
    display: inline-block;
    position: relative;
    height: 140px;
    width: 120px;
    border: 2px dashed;
    background-color: lightgray;
    cursor: move;
    box-sizing: border-box;
    z-index: 1;
}
    <div class="columnContent" id="c1" ondrop="drop(event)" ondragover="allowDrop(event)">
        <p>Customer's order</p>
        <div class="dropBox" ondragover="allowDrop(event)" ondragstart="dragInfo(event)" id="dp1" draggable="true">
            <p id="para1">Drag file here</p>
            <div class="leftAlign">
                <img src="pdf.jpg" id="pdfImg" style="visibility: hidden">
                <p1 id="pdfInfo"></p1>
                <br>
            </div>
            <input id="txt1" placeholder="Customer's code" style="visibility: hidden">
            <br>
            <input id="txt2" placeholder="Customer's size" style="visibility: hidden">
            <br>
            <input id="txt3" placeholder="Customer's DD" style="visibility: hidden">
            <br>
            <button id="btn" style="visibility: hidden">Save</button>
    </div>
</div>
<div class="columnContent" id="c2" ondrop="drop(event, this)" ondragover="allowDrop(event)">
    <p>Planned</p>
</div>

关于javascript - 拖放系统重叠掉落的 div 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46906080/

相关文章:

javascript - 将数据从 javascript 文件导入到 VB.Net 页面

javascript - 如何在 Chart.js 的工具提示中键入字符串?

css - 如何在 Bootstrap v4 中为表格指定响应式列宽

html - 更改 :hover – what other ways are there? 上图标图像的颜色

html - 何时以及为何使用显示内联 block

CSS Transform scale - 图像仍然占用空间

javascript - JSONP 使用 Google Apps 脚本的 ContentService?

javascript - 主屏幕应用程序(android)facebook登录打开浏览器

javascript - 如何从html页面中的url获取参数并将其显示在文本区域中?

css - ngx-international-phone-number 无法添加样式