HTML5拖动;拖动时删除更改图标/光标

时间:2012-04-12 07:47:22

标签: javascript html5 drag-and-drop

我想知道如何在拖拽(dragover / dragenter)图标/光标期间更改,例如当我用来拒绝或允许部分时。 当然,我可以使用光标移动一部分绝对定位的DOM,但我对原生HTML5解决方案感兴趣。

谢谢!

5 个答案:

答案 0 :(得分:24)

您在dropEffect之后:

在dragstart中初始化它:

event.dataTransfer.effectAllowed = "copyMove";

在dragenter中更新:

event.dataTransfer.dropEffect = "copy";

答案 1 :(得分:9)

我在这里有一个独立的crossbrowser 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;
});

答案 2 :(得分:4)

添加纯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;
    }

答案 3 :(得分:1)

我试图达到同样目的,但却找不到一个好的解决方案。我最后做的是将图像设置到dataTransfer并使用每个动作更改其src。这样,至少在浏览器中行为是一致的。这是我用作参考的页面的链接:

https://kryogenix.org/code/browser/custom-drag-image.html

答案 4 :(得分:0)

这对我有用:

<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;
}