3
尽管通过在线教程来了解原生HTML5 drag'n'drop我不明白为什么'drop'事件不会为我的基本html页面启动。为什么'drop'事件不会在此网页上触发?
小提琴是在这里 - https://jsfiddle.net/carlv/0yeuce3u/
代码如下。 HTML:
<div id="wrapper">
<div id="fixedWidth">
<div id="modulesBlock">
<div id="mod1" class="module" draggable="true" ></div>
<div id="mod2" class="module" draggable="true" ></div>
<div id="mod3" class="module" draggable="true" ></div>
<div id="mod4" class="module" draggable="true" ></div>
<div id="mod5" class="module" draggable="true" ></div>
<div id="mod6" class="module" draggable="true" ></div>
<div id="mod7" class="module" draggable="true" ></div>
<div id="mod8" class="module" draggable="true"></div>
<div id="mod9" class="module" draggable="true" ></div>
<div id="mod10" class="module" draggable="true"></div>
</div>
</div>
<div id="theRest">
<div id="contentBlock">
<div class="target" id="target1" ></div>
<div class="target" id="target2" ></div>
</div>
</div>
</div>
和JavaScript来处理事件如下:
function moduleDragStart(ev) {
console.log(ev.target.id);
ev.dataTransfer.setData("text", ev.target.id);
}
function handleDrop(e) {
e.preventDefault();
console.log('drop onto --'+e.target.id);
}
function handleDragEnter(e) {
console.log('target dragenter ='+e.target.id);
e.preventDefault();
this.classList.add('over');
}
function handleDragEnd(e) {
[].forEach.call(cols, function (col) {
col.classList.remove('over');
});
}
function handleDragLeave(e) {
this.classList.remove('over');
}
var cols = document.querySelectorAll('.target');
[].forEach.call(cols, function(col) {
col.addEventListener('dragenter', handleDragEnter, false);
col.addEventListener('dragleave', handleDragLeave, false);
col.addEventListener('dragend', handleDragEnd, false);
col.addEventListener('drop', handleDrop, false);
});
var mods = document.querySelectorAll('.module');
[].forEach.call(mods, function(mod){
mod.addEventListener('dragstart',moduleDragStart,false);
});
当我试图将一个模块块(在小提琴红色)拖动到目标(在小提琴白色)块,而我可以看到dragenter和dragleave事件触发,出于某种原因drop事件不会触发目标元素上的drop事件侦听器。有任何想法吗 ?
请注意,我从山坳移动'dragend'事件国防部 –
非常感谢您的及时帮助 - 我会在界! :P – user1517566