[英]After starting the drag of a DOM element with draggable attribute , Could we stop dragging and exit from drag and drop?
I have to stop the drag async after the drag is started.拖动开始后,我必须停止拖动异步。 Can I add something in drag event to cancel the drag?
我可以在拖动事件中添加一些东西来取消拖动吗?
document.querySelector('#drag-elem').addEventListener('drag', function(e){ // Stop the drag e.preventDefault(); }) document.querySelector('#drag-elem').addEventListener('dragstart', function(e){ console.log('dragstart') })
<div draggable='true' id='drag-elem'>Draggable</div>
You can use a dataIsValid
flag to decide if the drop is allowed in both the ondragover
and ondrop
event handlers.您可以使用
dataIsValid
标志来决定是否允许在ondragover
和ondrop
事件处理程序中放置。 Here is an example where the data is random number between 0 and 1, which is considered valid when larger than 0.5, and the asynchronous validation takes one whole second.举个例子,数据是0到1之间的随机数,大于0.5就认为有效,异步验证需要整整一秒。 Try dragging the Source over the Target and wait for at least one second before releasing the left mouse button.
尝试将 Source 拖到 Target 上并等待至少一秒钟,然后再松开鼠标左键。
let dataIsValid = false; function validateData(data) { dataIsValid = data.value > 0.5; console.log(`Data is ${dataIsValid? "valid": "invalid"}: ${data.value.toFixed(2)}`); } function onDragStart(event) { // Create data to be transferred const data = { value: Math.random() }; event.dataTransfer.setData("text", JSON.stringify(data)); event.target.textContent = data.value.toFixed(2); // Start asynchronous validation dataIsValid = false; setTimeout(() => validateData(data), 1000); } function onDragOver(event) { if (dataIsValid) { event.preventDefault(); } } function onDrop(event) { if (dataIsValid) { event.preventDefault(); const data = JSON.parse(event.dataTransfer.getData("text")); event.target.textContent = data.value.toFixed(2); } }
div.circle { display: inline-block; width: 100px; height: 100px; border-radius: 50px; text-align: center; vertical-align: middle; line-height: 100px; font-family: Arial, Helvetica, sans-serif; } div#source { background: coral; } div#target { background: lightblue; }
<div id="source" class="circle" draggable="true" ondragstart="onDragStart(event)">Source</div> <div id="target" class="circle" ondragover="onDragOver(event)" ondrop="onDrop(event)">Target</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.