【发布时间】:2017-01-01 04:55:38
【问题描述】:
我正在尝试从一列到另一列进行简单的拖放。我正在复制元素,以便右侧的列表可以在左侧有多个版本的元素。别担心,我在实际追加之前设置了唯一 ID。
但是,我也希望用户能够从盒子中拖出以删除相同的对象。但是一旦 DIV 被放置到位(即一旦它在第 2 列中),就不能再次拖动它。初始拖放工作正常。
我发现处理 jQuery ui 的解决方案。我正在构建一个 angularJS 应用程序,并且对使用完整的 jQuery 或任何其他插件不感兴趣。
救命!
示例代码:
<div id="column1">
<div class="dragme" draggable="true" ondragstart="drag(event)">Item1</div>
<div class="dragme" draggable="true" ondragstart="drag(event)">Item1</div>
</div>
<div id="column2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<script>
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");
var newEl = $(document.getElementById(data)).clone()[0];
newEl.id = newEl.id + (+new Date());
ev.target.appendChild(newEl);
}
</script>
更新
似乎不是拖放导致问题。任何动态添加的内容都不会拖动。我在控制台中对此进行了测试。
仅供参考...下面的代码在这里工作得很好,问题最终是我的拖放是在一个可拖动的容器中。
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");
var origThing = document.getElementById(data);
var newThing = origThing.cloneNode(true);
ev.target.appendChild(newThing);
}
.thing {
width: 100px;
height: 2em;
padding: 0.5em;
margin: 0.5em;
background: rgba(0,0,0,0.8);
color: white;
font-family: sans-serif;
}
.col {
width: 130px;
height: 450px;
padding: 1em;
border: 1px solid;
border-radius: 5px;
position: relative;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div class="col" id="col1">
<div class="thing" draggable="true" ondragstart="drag(event)" id="thing1">THING 1</div>
<div class="thing" draggable="true" ondragstart="drag(event)" id="thing2">THING 2</div>
<div class="thing" draggable="true" ondragstart="drag(event)" id="thing3">THING 3</div>
<div class="thing" draggable="true" ondragstart="drag(event)" id="thing4">THING 4</div>
</div>
<div class="col" id="col2" ondrop="drop(event)" ondragover="allowDrop(event)">
</div>
【问题讨论】:
-
在
ondragstart事件中多做一些事情,在ondragend事件中少做其他事情。 -
请确认:您只想要一个仅用于 JS 的解决方案来使用鼠标拖动(和重新拖动)div ——仅此而已?如果是的话,我会用一些我已经闲逛的代码发布答案。
-
是的,马克。那是我最大的问题......我找不到任何 JS 唯一的解决方案。请看下面我的回答。我真正的问题是委托,但也请发表您的答案。
标签: javascript html angularjs drag-and-drop