简体   繁体   English

开始拖动具有draggable 属性的DOM 元素后,是否可以停止拖动并退出拖放?

[英]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标志来决定是否允许在ondragoverondrop事件处理程序中放置。 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.

相关问题 jQuery UI拖放元素(当可拖动容器发生溢出时)在将其拖放到可拖动对象时被斩断 - jquery ui drag/drop element chopped off when dragging over droppables, only if draggable container has an overflow 拖动图片,但从可拖动的图像中删除名称元素 - Drag picture but drop name element from a draggable image JS 禁用拖放(draggable 属性) - JS Disable drag and drop (draggable attribute) jQuery拖放:拖动一个封闭元素 - jQuery Drag & Drop: Dragging an enclosing element 拖放后的JQuery:事件中的多次拖放 - Multiple drag and drop in JQuery: event after dragging 在拖动一个jqueryUI可拖动元素时,触发对其他多个元素的拖动 - On dragging one jqueryUI draggable element trigger drag on other multiple elements 如何拖放元素并与可拖动元素交换元素 position - How to drag and drop element and also swap the element with draggable element position Kendo Draggable-暂时从拖动事件处理程序中暂停拖动 - Kendo draggable - suspend dragging temporarily from drag event handler 自动拖动“ .draggable”元素 - Automatic drag an “.draggable” element jQuery Draggable - 创建可拖动并开始拖动html5本机Drag and Drop api事件 - jQuery Draggable - Create draggable and start dragging on html5 native Drag And Drop api event
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM