我想知道如何在拖动 (dragover/dragenter) 图标/光标期间更改,例如当我 dragenter 拒绝或允许部分时。当然,我可以用光标移动绝对定位的 DOM 的一部分,但我对原生 HTML5 解决方案感兴趣。
谢谢!
我想知道如何在拖动 (dragover/dragenter) 图标/光标期间更改,例如当我 dragenter 拒绝或允许部分时。当然,我可以用光标移动绝对定位的 DOM 的一部分,但我对原生 HTML5 解决方案感兴趣。
谢谢!
你在dropEffect之后:
在 dragstart 中初始化它:
event.dataTransfer.effectAllowed = "copyMove";
在 dragenter 中更新它:
event.dataTransfer.dropEffect = "copy";
我在这里有一个独立的跨浏览器 HTML5 拖放示例:http : //jsfiddle.net/rvRhM/1/
看看 dragstart 和 dragend 事件。dm是被拖动的元素。
EventUtil.addHandler(dm, 'dragstart', function(e) {
e.dataTransfer.setData(format, 'Dragme');
e.dataTransfer.effectAllowed = effect;
var target = EventUtil.getCurrentTarget(e);
target.style.backgroundColor = 'blue';
target.style.cursor = 'move'; // You can do this or use a css class to change the cursor
return true;
});
确保在拖动结束时重置光标:
EventUtil.addHandler(dm, 'dragend', function(e) {
var target = EventUtil.getCurrentTarget(e);
target.style.backgroundColor = '';
target.style.cursor = 'default'; // Reset cursor
return true;
});
添加纯 css 解决方案,这可能对少数人有用。在 html 元素上使用这个类。
.grab {
cursor: move;
cursor: grab;
cursor: -moz-grab;
cursor: -webkit-grab;
.thumbnails-list{
cursor: pointer;
}
}
.grab:active {
cursor: grabbing;
cursor: -moz-grabbing;
cursor: -webkit-grabbing;
}
我试图实现相同的目标,但找不到一个很好的解决方案。我最后所做的是将图像设置到 dataTransfer 并在每次操作时更改其 src。这样,行为至少在浏览器之间是一致的。这是我用作参考的页面的链接:
这对我有用:
<div class="container">
<div draggable="true">
<div draggable="true">
</div>
$('.container').bind('dragover', function() {
$('body').addClass('dragging');
});
$('.container').bind('dragleave', function() {
$('body').removeClass('dragging');
});
.container > div {
cursor: grab;
}
body.dragging .container > div {
cursor: grabbing;
}