我有一些div作为dropzones,还有一些作为draggable对象。
<div class="container">
<div class="drop"></div>
<div class="drop"></div>
<div class="drop"></div>
</div>
<div class="container">
<div class="drag" id="drag-a" draggable="true">box a</div>
<div class="drag" id="drag-b" draggable="true">box b</div>
<div class="drag" id="drag-c" draggable="true">box c</div>
</div>
<style>
.drop {
border: 1px solid #000;
height: 40px;
margin: 5px;
width: 200px;
}
.drag {
background: #000;
color: #fff;
display: inline-block;
margin: 5px;
padding: 5px;
user-select: none;
}
</style>
<script>
$(document).ready(function () {
$('.drop').on('dragover', function(e){
e.preventDefault();
});
$('.drag').on('dragstart', function(e) {
e.originalEvent.dataTransfer.setData('Text', e.target.id);
});
$('.drop').on('drop', function(e) {
e.preventDefault();
var data = e.originalEvent.dataTransfer.getData('Text');
e.target.appendChild(document.getElementById(data));
});
});
</script>
使用原生HTML5拖放和jQuery,工作正常。现在,我想将删除区域限制为一个项目。不可能再把一个丢到这个区域,但我不知道怎么做。
有没有可能两个可拖动的盒子交换了位置?
您只需要删除该元素的事件处理程序,在jQuery中,您可以使用'. off()。
$('.drop').on('drop', function(e) {
e.preventDefault();
var data = e.originalEvent.dataTransfer.getData('Text');
e.target.appendChild(document.getElementById(data));
// add this line
$(this).off('dragover drop');
});
$(document).ready(function () {
$('.drop').on('dragover', function(e){
e.preventDefault();
});
$('.drag').on('dragstart', function(e) {
e.originalEvent.dataTransfer.setData('Text', e.target.id);
});
$('.drop').on('drop', function(e) {
e.preventDefault();
var data = e.originalEvent.dataTransfer.getData('Text');
e.target.appendChild(document.getElementById(data));
$(this).off('dragover drop');
});
});
.drop {
border: 1px solid #000;
height: 40px;
margin: 5px;
width: 200px;
}
.drag {
background: #000;
color: #fff;
display: inline-block;
margin: 5px;
padding: 5px;
user-select: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="drop"></div>
<div class="drop"></div>
<div class="drop"></div>
</div>
<div class="container">
<div class="drag" id="drag-a" draggable="true">box a</div>
<div class="drag" id="drag-b" draggable="true">box b</div>
<div class="drag" id="drag-c" draggable="true">box c</div>
</div>