jam*_*day 5 html javascript dom-events
我试图在JS和HTML中构建一个可重新排序的列表.(尝试不使用jQuery ui)我似乎无法弄清楚为什么只有dragstart和dragend事件在拖动列表项时触发.任何人都知道为什么其他事件没有解雇?
<ul>
<li draggable="true" class="drag">1111111</li>
<li draggable="true" class="drag">222222</li>
<li draggable="true" class="drag">333333</li>
<li draggable="true" class="drag">444444</li>
</ul>
<script type="text/javascript">
var drags = document.querySelectorAll('.drag');
[].forEach.call(drags, function(drag) {
drag.addEventListener('dragstart', handleDragStart, false);
drag.addEventListener('dragenter', handleDragEnter, false);
drag.addEventListener('dragover', handleDragOver, false);
drag.addEventListener('dragleave', handleDragLeave, false);
drag.addEventListener('dragend', handleDragEnd, false);
});
function handleDragStart(e){
console.log('handleDragStart');
}
function handleDragEnter(e){
console.log('handleDragEnter');
}
function handleDragOver(e){
console.log('handleDragOver');
}
function handleDragLeave(e){
console.log('handleDragLeave');
}
function handleDragEnd(e){
console.log('handleDragEnd');
}
</script>
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,它已经在Chrome中运行.在Firefox中,你需要设置dataTransfer的dragstart,你需要做的e.preventDefault(),使元素有效的放置目标.在这之后一切都开始工作:
var drags = document.querySelectorAll('.drag');
[].forEach.call(drags, function(drag) {
drag.addEventListener('dragstart', handleDragStart, false);
drag.addEventListener('dragenter', handleDragEnter, false);
drag.addEventListener('dragover', handleDragOver, false);
drag.addEventListener('dragleave', handleDragLeave, false);
drag.addEventListener('dragend', handleDragEnd, false);
drag.addEventListener('drop', handleDragEnd, false);
});
function handleDragStart(e) {
console.log('dragstart ' + e.target.innerText);
e.dataTransfer.setData('text/plain', 'This text may be dragged')
}
function handleDragEnter(e) {
console.log('dragenter ' + e.target.innerText);
e.preventDefault();
}
function handleDragOver(e) {
console.log('dragover ' + e.target.innerText);
e.preventDefault();
}
function handleDragLeave(e) {
console.log('dragleave ' + e.target.innerText);
}
function handleDragEnd(e) {
console.log('dragend ' + e.target.innerText);
e.preventDefault();
}Run Code Online (Sandbox Code Playgroud)
注意:我还添加了一个drop处理程序,以便Firefox在您删除某些内容时不会尝试加载URL.