效果:请问这个实现列表里的只能拖动一次,不能重复?
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#members {
width: 200px;
}
#left {
border: 2px dashed black;
width: 150px;
height: 200px;
float: left;
}
#right {
border: 2px dashed black;
width: 150px;
height: 200px;
float: left;
margin-left: 20px;
}
.validTarget {
background-color: skyblue;
}
.enterTarget {
background-color: yellow;
}
</style>
</head>
<body>
<ul id="members">
<li draggable="true">Brian Albers</li>
<li draggable="true">Frank Salim</li>
<li draggable="true">Jenifer Clark</li>
<li draggable="true">John Kemble</li>
<li draggable="true">Lorraine Gaunce</li>
<li draggable="true">Mark Wang</li>
<li draggable="true">Morgan Stephen</li>
<li draggable="true">Peter Lubbers</li>
<li draggable="true">Vanessa Combs</li>
<li draggable="true">Vivian Lopez</li>
</ul>
<ul id="left"></ul>
<ul id="right"></ul>
<script>
var lis = document.querySelectorAll("#members > li");
//console.log(lis);
var left = document.getElementById("left");
var right = document.getElementById("right");
for (var i = 0; i < lis.length; i++) {
lis[i].ondragstart = function (e) {
left.className = "validTarget";
right.className = "validTarget";
e.dataTransfer.setData("text/plain", e.target.innerText);
}
lis[i].ondragend = function () {
left.className = null;
right.className = null;
}
}
function handleDragEnter(e) {
e.preventDefault();
}
function handleDragLeave() {
this.className = "validTarget";
}
function handleDragOver(e) {
this.className = "enterTarget";
e.preventDefault();
}
left.ondragenter = handleDragEnter;
right.ondragenter = handleDragEnter;
left.ondragover = handleDragOver;
right.ondragover = handleDragOver;
left.ondragleave = handleDragLeave;
right.ondragleave = handleDragLeave;
left.ondrop = handleDrop;
right.ondrop = handleDrop;
function handleDrop(e) {
var newli = document.createElement("li");
newli.innerText = e.dataTransfer.getData("text/plain");
this.appendChild(newli);
}
</script>
</body>
</html>
你做个标记就好了,通过标记来判断。
定义一个变量,没有拖动的时候设置一个初值,拖动以后改掉,通过if语句判断实现。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#members {
width: 200px;
}
#left {
border: 2px dashed black;
width: 150px;
height: 200px;
float: left;
}
#right {
border: 2px dashed black;
width: 150px;
height: 200px;
float: left;
margin-left: 20px;
}
.validTarget {
background-color: skyblue;
}
.enterTarget {
background-color: yellow;
}
</style>
</head>
<body>
<ul id="members">
<li draggable="true">Brian Albers</li>
<li draggable="true">Frank Salim</li>
<li draggable="true">Jenifer Clark</li>
<li draggable="true">John Kemble</li>
<li draggable="true">Lorraine Gaunce</li>
<li draggable="true">Mark Wang</li>
<li draggable="true">Morgan Stephen</li>
<li draggable="true">Peter Lubbers</li>
<li draggable="true">Vanessa Combs</li>
<li draggable="true">Vivian Lopez</li>
</ul>
<ul id="left"></ul>
<ul id="right"></ul>
<script>
var dragobj;
var lis = document.querySelectorAll("#members > li");
//console.log(lis);
var left = document.getElementById("left");
var right = document.getElementById("right");
for (var i = 0; i < lis.length; i++) {
lis[i].ondragstart = function (e) {
left.className = "validTarget";
right.className = "validTarget";
dragobj = this;
e.dataTransfer.setData("text/plain", e.target.innerText);
}
lis[i].ondragend = function () {
left.className = null;
right.className = null;
}
}
function handleDragEnter(e) {
e.preventDefault();
}
function handleDragLeave() {
this.className = "validTarget";
}
function handleDragOver(e) {
this.className = "enterTarget";
e.preventDefault();
}
left.ondragenter = handleDragEnter;
right.ondragenter = handleDragEnter;
left.ondragover = handleDragOver;
right.ondragover = handleDragOver;
left.ondragleave = handleDragLeave;
right.ondragleave = handleDragLeave;
left.ondrop = handleDrop;
right.ondrop = handleDrop;
function handleDrop(e) {
if (dragobj.getAttribute("no-drag")=="1") return;
var newli = document.createElement("li");
newli.innerText = e.dataTransfer.getData("text/plain");
this.appendChild(newli);
dragobj.setAttribute("no-drag","1");
}
</script>
</body>
</html>