HTML 5 拖放功能 - 删除掉落的项目
HTML 5 Drag & Drop Functionality - Remove Dropped Item
我快到了。我正在创建拖放功能,我遇到的最后一部分是找到一种干净的方法来删除已删除的项目。
黄色的div是可拖动的。红色 div 是可丢弃的。当黄色 div 被拖到红色 div 上面时,红色 div 变成蓝色。
当黄色 div 被放下时,蓝色变成绿色表示它已经被放下。
在这一步之后,我想简单地删除黄色的div或者style.display = 'none'。
这是一个片段,除了删除黄色 div:
function dragOver(ev, id) {
ev.preventDefault();
document.getElementById(id).style.background = 'blue';
}
function stopDrop(ev, id){
ev.preventDefault();
document.getElementById(id).style.background = 'red';
}
function dragStart(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function dropped(ev, id) {
ev.preventDefault();
document.getElementById(id).style.background = 'green';
}
div{padding:10px; margin:10px;}
div:nth-child(even){background:yellow;}
div:nth-child(odd){background:red;}
<div id="drop" ondrop="dropped(event, this.id)" ondragover="dragOver(event, this.id)" ondragleave="stopDrop(event, this.id);" ondragend="disableDrop(event);">drop here</div>
<div id="drag" draggable="true" ondragstart="dragStart(event)">drag this</div>
另一个问题:我正在向事件列表器传递参数 (this.id),以便稍后可以找到该元素以更改颜色。有没有办法简单地传递整个对象本身?我试过 'this' 而不是 this.id 但它没有用。谢谢。
https://jsfiddle.net/mcsab3aa/5/
function dragOver(ev, id) {
ev.preventDefault();
document.getElementById(id).style.background = 'blue';
}
function stopDrop(ev, id) {
ev.preventDefault();
document.getElementById(id).style.background = 'red';
}
function dragStart(ev) {
ev.dataTransfer.setData('text/html', ev.target.id);
}
function dropped(ev, id) {
var id = ev.dataTransfer.getData("text/html");
var elem = document.getElementById(id);
elem.parentElement.removeChild(elem);
}
您只需要添加 text/html 与文本
您只是在更改可放置对象的背景,而不是实际移动可拖动对象。如果要移动它,请将以下行添加到 dropped 函数中:
var data = ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
如果你只想改变draggable的显示,试试这个:
var data = ev.dataTransfer.getData("Text");
document.getElementById(data).style.display = 'none';
编辑:
关于id,你不需要将它传递给函数。您可以从 ev.target.id
之类的事件中获取它,或者直接使用 target
。也编辑了下面的代码。
===
修改后的代码:
function dragOver(ev) {
ev.preventDefault();
ev.target.style.background = 'blue';
}
function stopDrop(ev){
ev.preventDefault();
ev.target.style.background = 'red';
}
function dragStart(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function dropped(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("Text");
//ev.target.appendChild(document.getElementById(data));
document.getElementById(data).style.display = 'none';
ev.target.style.background = 'green';
}
div{padding:10px; margin:10px;}
div:nth-child(even){background:yellow;}
div:nth-child(odd){background:red;}
<div id="drop" ondrop="dropped(event, this.id)" ondragover="dragOver(event, this.id)" ondragleave="stopDrop(event, this.id);" ondragend="disableDrop(event);">drop here</div>
<div id="drag" draggable="true" ondragstart="dragStart(event)">drag this</div>
我快到了。我正在创建拖放功能,我遇到的最后一部分是找到一种干净的方法来删除已删除的项目。
黄色的div是可拖动的。红色 div 是可丢弃的。当黄色 div 被拖到红色 div 上面时,红色 div 变成蓝色。
当黄色 div 被放下时,蓝色变成绿色表示它已经被放下。
在这一步之后,我想简单地删除黄色的div或者style.display = 'none'。
这是一个片段,除了删除黄色 div:
function dragOver(ev, id) {
ev.preventDefault();
document.getElementById(id).style.background = 'blue';
}
function stopDrop(ev, id){
ev.preventDefault();
document.getElementById(id).style.background = 'red';
}
function dragStart(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function dropped(ev, id) {
ev.preventDefault();
document.getElementById(id).style.background = 'green';
}
div{padding:10px; margin:10px;}
div:nth-child(even){background:yellow;}
div:nth-child(odd){background:red;}
<div id="drop" ondrop="dropped(event, this.id)" ondragover="dragOver(event, this.id)" ondragleave="stopDrop(event, this.id);" ondragend="disableDrop(event);">drop here</div>
<div id="drag" draggable="true" ondragstart="dragStart(event)">drag this</div>
另一个问题:我正在向事件列表器传递参数 (this.id),以便稍后可以找到该元素以更改颜色。有没有办法简单地传递整个对象本身?我试过 'this' 而不是 this.id 但它没有用。谢谢。
https://jsfiddle.net/mcsab3aa/5/
function dragOver(ev, id) {
ev.preventDefault();
document.getElementById(id).style.background = 'blue';
}
function stopDrop(ev, id) {
ev.preventDefault();
document.getElementById(id).style.background = 'red';
}
function dragStart(ev) {
ev.dataTransfer.setData('text/html', ev.target.id);
}
function dropped(ev, id) {
var id = ev.dataTransfer.getData("text/html");
var elem = document.getElementById(id);
elem.parentElement.removeChild(elem);
}
您只需要添加 text/html 与文本
您只是在更改可放置对象的背景,而不是实际移动可拖动对象。如果要移动它,请将以下行添加到 dropped 函数中:
var data = ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
如果你只想改变draggable的显示,试试这个:
var data = ev.dataTransfer.getData("Text");
document.getElementById(data).style.display = 'none';
编辑:
关于id,你不需要将它传递给函数。您可以从 ev.target.id
之类的事件中获取它,或者直接使用 target
。也编辑了下面的代码。
===
修改后的代码:
function dragOver(ev) {
ev.preventDefault();
ev.target.style.background = 'blue';
}
function stopDrop(ev){
ev.preventDefault();
ev.target.style.background = 'red';
}
function dragStart(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function dropped(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("Text");
//ev.target.appendChild(document.getElementById(data));
document.getElementById(data).style.display = 'none';
ev.target.style.background = 'green';
}
div{padding:10px; margin:10px;}
div:nth-child(even){background:yellow;}
div:nth-child(odd){background:red;}
<div id="drop" ondrop="dropped(event, this.id)" ondragover="dragOver(event, this.id)" ondragleave="stopDrop(event, this.id);" ondragend="disableDrop(event);">drop here</div>
<div id="drag" draggable="true" ondragstart="dragStart(event)">drag this</div>