我只使用HTML5拖放。我已经用JQuery UI做过了,但现在需要清除HTML5 API。
就像我刚才说的:只有dragstart才会开火。剩下的事情我都不知道。在dragstart函数中,一切似乎都正常:event.dataTransfer获取数据,我检查了它。
代码如下:
$('#widget')
.attr('draggable', 'true')
.on('dragstart', function(event) {
event.preventDefault();
event.dataTransfer.effectAllowed = "move";
event.dataTransfer.setData('text/html', $(this).attr('id'))
event.dataTransfer.setDragImage(event.target, 24, 32);
console.log('Im draggable');
console.log(event.dataTransfer.getData('text/html'));
})
.on('dragend', function(event) {
event.preventDefault();
/*$(this).css('top', event.pageX + "px");
event.dataTransfer.getData('text/html');*/
console.log('dragend');
});
$('#widget_dest')
.click(function(event) {
console.log("click widget_dest");
})
.on('dragenter', function(event) {
event.preventDefault();
console.log("dragenter");
})
.on('dragover', function(event) {
event.preventDefault();
console.log("dragover");
})
.on('drop', function(event) {
event.preventDefault();
event.stopPropagation();
console.log("drop");
var data = event.dataTransfer.getData('text/html');
$(this).append($('#' + data));
$('#' + data).css('top', event.pageX + 'px');
});
});
我得到的唯一日志是:dragstart(正确的数据)和click函数。
我特意插入了click finction来检查Widget的属性是否正确。单击事件激发,其余事件不激发。
我会非常感谢你的帮助
胜利者
最佳答案
您不应该在event.preventDefault()
中使用dragstart
。这个例子很好:http://jsfiddle.net/noziar/Q3eh3/4/
另外,即使我在大多数地方删除了event.preventDefault()
,也要注意在dragover
中这是必要的,否则drop
可能不会触发(至少在Chrome中)。
另外,我不确定如何读取/设置event.dataTransfer
上的属性,因为jQuery事件没有dataTransfer
属性-您可以使用originalEvent
来读取/设置属性。
这是我的代码:
HTML格式:
<div id="widget">I'm a widget</div>
<div id="widget_dest">
<span id="widget_box_title">Drag widgets into this box</span>
</div>
CSS:
#widget_dest {
position:absolute;
top: 40px;
border-style:solid;
border-width:1px;
}
#widget {
color:green;
}
#widget_box_title {
color:red;
}
JS公司:
$('#widget')
.attr('draggable', 'true')
.on('dragstart', function(event) {
var original = event.originalEvent;
original.dataTransfer.effectAllowed = "move";
original.dataTransfer.setData('Text', $(this).attr('id'))
original.dataTransfer.setDragImage(event.target, 24, 32);
console.log('Im draggable');
console.log(original.dataTransfer.getData('Text'));
})
.on('dragend', function(event) {
$(this).css('top', event.pageX + "px");
event.originalEvent.dataTransfer.getData('Text');
console.log('dragend');
});
$('#widget_dest')
.click(function(event) {
console.log("click widget_dest");
})
.on('dragenter', function(event) {
console.log("dragenter");
})
.on('dragover', function(event) {
event.preventDefault();
console.log("dragover");
})
.on('drop', function(event) {
console.log("drop");
var data = event.originalEvent.dataTransfer.getData('Text');
$(this).append($('#' + data));
});
关于javascript - 在HTML5中,只有dragstart会触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23858737/