使用此代码显示拖动消息但不显示拖放消息。当我拖动第一个元素时,并没有在视觉上被拖动,而是触发了 dragstart 事件
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<section draggable="true" id="origen" style="height: 50px; width: 50px; border-color: green; border-style: solid;">origen</section>
<section draggable="true" id="destino" style="height: 200px; width: 200px; border-color: blue; border-style: solid;">destino</section>
<script>
window.addEventListener("load",carga);
var origen = document.getElementById('origen');
var destino = document.getElementById('destino');
function carga(e){
origen.addEventListener('dragstart',function(e){
e.preventDefault();
e.dataTransfer.setData("Text",origen.outerHTML);
console.log("dragstart");
},false);
destino.addEventListener('drop',function(e){
e.preventDefault();
//origen.innerHTML = e.dataTransfer.getData("Text");
console.log('dropped');
},false);
}
</script>
</body>
</html>
最佳答案
您正在使用 e.preventDefault()
取消 dragstart 事件,这就是元素未被拖动的原因。
但是,您必须取消放置目标的 dragover
事件,以便允许其他元素放置到它上面。 (有关为什么会出现这种情况的更多信息,请参见 here)
window.addEventListener("load",carga);
var origen = document.getElementById('origen');
var destino = document.getElementById('destino');
function carga(e){
origen.addEventListener('dragstart',function(e){
//e.preventDefault();
e.dataTransfer.setData("Text",origen.outerHTML);
console.log("dragstart");
},false);
destino.addEventListener('dragover',function(e){
e.preventDefault();
});
destino.addEventListener('drop',function(e){
e.preventDefault();
//origen.innerHTML = e.dataTransfer.getData("Text");
console.log('dropped');
},false);
}
<section draggable="true" id="origen" style="height: 50px; width: 50px; border-color: green; border-style: solid;">origen</section>
<section draggable="true" id="destino" style="height: 200px; width: 200px; border-color: blue; border-style: solid;">destino</section>
关于javascript - 掉落事件没有发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47205594/