Add/remove class 基于可拖动的状态 div
Add/remove class based on state of draggable div
我设置了可拖动的 div,允许用户将数据类别拖到 table。由于数据的性质,我们需要给用户一个信号,告诉他们可以将数据放到哪里。
我想在页面其他地方的特定 div 中添加一个“突出显示”class,以向用户显示可以删除这些类别数据的位置。
下面的代码将新的 class 正确地添加到 div 中,但是当可拖动的 div 在没有完成拖动的情况下被放下时, class 不是删除。我觉得我错过了一些简单的东西。
<script>
var columnsDrop = document.getElementById("columnsDrop");
var rowsDrop = document.getElementById("rowsDrop");
var filtersDrop = document.getElementById("filtersDrop");
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
columnsDrop.classList.add("highlight");
rowsDrop.classList.add("highlight");
filtersDrop.classList.add("highlight");
}
function drop(ev) {
ev.target.appendChild(document.getElementById(data));
columnsDrop.classList.remove("highlight");
rowsDrop.classList.remove("highlight");
filtersDrop.classList.remove("highlight");
}
</script>
通过一些实验和额外阅读,我能够自己解决这个问题。
<script>
const pill = document.querySelector('.filters__pill');
const dropIcons = document.querySelectorAll('.drop__icon');
pill.addEventListener('dragstart', dragStart);
pill.addEventListener('dragend', dragEnd);
dropIcons.forEach(i => {
i.addEventListener('dragenter', dragEnter)
i.addEventListener('dragover', dragOver);
i.addEventListener('dragleave', dragLeave);
i.addEventListener('drop', drop);
});
function dragStart() {
dropIcons.forEach(i => {
i.classList.remove('disabled');
i.classList.remove('hidden');
});
pills.forEach(p => {
p.classList.add('disabled');
});
}
function dragEnd() {
dropIcons.forEach(i => {
i.classList.add('disabled');
i.classList.add('hidden');
});
pills.forEach(p => {
p.classList.remove('disabled');
});
}
</script>
我设置了可拖动的 div,允许用户将数据类别拖到 table。由于数据的性质,我们需要给用户一个信号,告诉他们可以将数据放到哪里。
我想在页面其他地方的特定 div 中添加一个“突出显示”class,以向用户显示可以删除这些类别数据的位置。
下面的代码将新的 class 正确地添加到 div 中,但是当可拖动的 div 在没有完成拖动的情况下被放下时, class 不是删除。我觉得我错过了一些简单的东西。
<script>
var columnsDrop = document.getElementById("columnsDrop");
var rowsDrop = document.getElementById("rowsDrop");
var filtersDrop = document.getElementById("filtersDrop");
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
columnsDrop.classList.add("highlight");
rowsDrop.classList.add("highlight");
filtersDrop.classList.add("highlight");
}
function drop(ev) {
ev.target.appendChild(document.getElementById(data));
columnsDrop.classList.remove("highlight");
rowsDrop.classList.remove("highlight");
filtersDrop.classList.remove("highlight");
}
</script>
通过一些实验和额外阅读,我能够自己解决这个问题。
<script>
const pill = document.querySelector('.filters__pill');
const dropIcons = document.querySelectorAll('.drop__icon');
pill.addEventListener('dragstart', dragStart);
pill.addEventListener('dragend', dragEnd);
dropIcons.forEach(i => {
i.addEventListener('dragenter', dragEnter)
i.addEventListener('dragover', dragOver);
i.addEventListener('dragleave', dragLeave);
i.addEventListener('drop', drop);
});
function dragStart() {
dropIcons.forEach(i => {
i.classList.remove('disabled');
i.classList.remove('hidden');
});
pills.forEach(p => {
p.classList.add('disabled');
});
}
function dragEnd() {
dropIcons.forEach(i => {
i.classList.add('disabled');
i.classList.add('hidden');
});
pills.forEach(p => {
p.classList.remove('disabled');
});
}
</script>