我想根据某些条件取消 HTML5 拖动操作。我试图搜索这个,但没有发现任何有用的东西。似乎没有办法使用 JavaScript 取消 HTML5 拖放。return
ing false
in thedragstart
似乎没有做任何事情。有任何想法吗?
问问题
11562 次
3 回答
5
event.preventDefault()
您可以通过调用事件处理程序来取消它。例如这应该工作:
<p id="p1" draggable="true" ondragstart="dragstart_handler(event);">This element is draggable.</p>
<script>
var enableDragDrop = true;
function dragstart_handler(ev) {
if (!enableDragDrop) {
ev.preventDefault();
}
console.log("dragStart");
}
</script>
于 2018-11-26T14:22:49.550 回答
0
我认为您需要做一些棘手的事情才能使其正常工作,因为我不知道如何阻止来自 js 的拖动,但是您可以使用, 和mousedown
标志mousedown
来伪造拖动mouseup
isDragging
一些代码看起来像:
var isDragging = false
var fakeDraggingElement
var currentDragging
$('#item').mousedown(function(e){
e.preventDefault()
isDragging = true
currentDragging = this
//change your cursor and make it loos like dragging
$('#parent').css({cursor: 'move'})
//fake dragging element
fakeDraggingElement = $(this).clone().css({
opacity:0.5,
position:'absolute',
top:e.pageY+offsetY, //parent offset
left:e.pageX+offsetX,//parent offset
}).appendTo(parent)
}).mousemove(function(e){
if(!isDragging){
return
}
fakeDraggingElement.css({
top:e.pageY+offsetY, //parent offset
left:e.pageX+offsetX,//parent offset
})
}).mousedown(function(e){
if(!isDragging){
return
}
cancleDrag()
//your old drop
ondrop(currentDragging,e.target)
})
function cancleDrag(){
isDragging = false
$(currentDragging).remove()
currentDragging = undefined
}
于 2018-04-27T01:56:25.177 回答
-2
编辑:明白了。它有点迂回,但有效。利用拖动事件是可取消的鼠标事件这一事实,取消它会停止所有进一步的拖动操作。根据您的条件创建一个拖动事件并调用preventDefault()
. 以下将在 3 秒后取消它:
setTimeout(function(){document.getElementById("drag").ondrag = function(e){
e.preventDefault();
this.ondrag = null;
return false;
};},3000);
首先要注意,ondrag
取消后我清除所有事件,如果需要其他ondrag
事件可能需要调整,其次,这确实取消了拖动的所有部分,因此之后您不会收到ondragend
事件,如图所示jsfiddle:http:
//jsfiddle.net/MaxPRafferty/aCkbR/
来源:HTML5 规范:http ://www.w3.org/html/wg/drafts/html/master/editing.html#dndevents
于 2013-08-01T16:15:35.980 回答