gpt4 book ai didi

javascript - 使用纯 javascript 拖放并再次拖动

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:49 24 4
gpt4 key购买 nike

我正在尝试从一列简单地拖放到另一列。我正在复制该元素,以便右侧的列表可以包含左侧元素的多个版本。别担心,我会在实际追加之前设置唯一 ID。

不过,我也希望用户能够拖出框来删除同一个对象。但是一旦 DIV 被放置到位(即一旦它在 column2 中),它就不能再被拖动。最初的拖放工作正常。

我找到的解决方案处理 jQuery ui。我正在构建一个 angularJS 应用程序,对使用完整的 jQuery 或任何其他插件不感兴趣。

帮助!

示例代码:

<div id="column1">    
<div class="dragme" draggable="true" ondragstart="drag(event)">Item1</div>
<div class="dragme" draggable="true" ondragstart="drag(event)">Item1</div>
</div>

<div id="column2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

<script>
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
var newEl = $(document.getElementById(data)).clone()[0];
newEl.id = newEl.id + (+new Date());
ev.target.appendChild(newEl);
}
</script>

更新

问题似乎不是拖放引起的。任何动态添加的内容都不会拖拽。我在控制台中对此进行了测试。

仅供引用...下面的代码在这里工作得很好,问题最终是我的拖放是在一个可拖动的容器中。

function allowDrop(ev) {
ev.preventDefault();
}

function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}

function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
var origThing = document.getElementById(data);
var newThing = origThing.cloneNode(true);
ev.target.appendChild(newThing);
}
.thing {
width: 100px;
height: 2em;
padding: 0.5em;
margin: 0.5em;
background: rgba(0,0,0,0.8);
color: white;
font-family: sans-serif;
}
.col {
width: 130px;
height: 450px;
padding: 1em;
border: 1px solid;
border-radius: 5px;
position: relative;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div class="col" id="col1">
<div class="thing" draggable="true" ondragstart="drag(event)" id="thing1">THING 1</div>
<div class="thing" draggable="true" ondragstart="drag(event)" id="thing2">THING 2</div>
<div class="thing" draggable="true" ondragstart="drag(event)" id="thing3">THING 3</div>
<div class="thing" draggable="true" ondragstart="drag(event)" id="thing4">THING 4</div>
</div>
<div class="col" id="col2" ondrop="drop(event)" ondragover="allowDrop(event)">

</div>

最佳答案

这是一种纯 JavaScript 方法,可以在窗口周围拖动动态创建的 div。

var divs=[];
var draggingIndex;
var isDown=false;
var startX,startY;

// add some divs dynamically
addDiv(50,50,100,75,'blue','batch1');
addDiv(250,50,50,38,'green','batch1');

// listen to mouse events
window.onmousedown=(function(e){handleMouseDown(e);});
window.onmousemove=(function(e){handleMouseMove(e);});
window.onmouseup=(function(e){handleMouseUp(e);});


function addDiv(x,y,w,h,bk,classname){
var div=document.createElement('div');
div.style.width=w+'px';
div.style.height=h+'px';
div.className=classname;
div.style.position='absolute';
div.style.left=x+'px';
div.style.top=y+'px';
div.style.background=bk;
divs.push({div:div,w:w,h:h});
document.body.appendChild(div);
}


function handleMouseDown(e){
// tell the browser we're handling this event
e.preventDefault();
e.stopPropagation();
// get mouse position
startX=parseInt(e.clientX);
startY=parseInt(e.clientY);
// Is any div under the mouse?
draggingIndex=undefined;
for(var i=0;i<divs.length;i++){
var d=divs[i];
var x=parseInt(d.div.style.left);
var y=parseInt(d.div.style.top);
if(startX>x && startX<x+d.w && startY>y && startY<y+d.h){
draggingIndex=i;
isDown=true;
break;
}
}
}

function handleMouseUp(e){
// tell the browser we're handling this event
e.preventDefault();
e.stopPropagation();
isDown=false;
}

function handleMouseMove(e){
if(!isDown){return;}
// tell the browser we're handling this event
e.preventDefault();
e.stopPropagation();
// get mouse position
mouseX=parseInt(e.clientX);
mouseY=parseInt(e.clientY);
// move the dragging div by the distance the mouse has moved
var dragging=divs[draggingIndex].div;
var dx=mouseX-startX;
var dy=mouseY-startY;
startX=mouseX;
startY=mouseY;
dragging.style.left=(parseInt(dragging.style.left)+dx)+'px';
dragging.style.top=(parseInt(dragging.style.top)+dy)+'px';
}
body{ background-color: ivory; }
.batch1{border:1px solid red; }

关于javascript - 使用纯 javascript 拖放并再次拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39133751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com