纯使用javascript的div标签拖放功能
我需要使用纯Javascript创建嵌套的拖放功能(请不要使用Jquery或其他插件) 其想法是将多个div标记作为组,并能够将该div标记/组拖动到另一个div标记/组的顶部,以在其自身(作为该组的子级)中创建一个子组。允许的子组的最大级别为4。为了说明我在说什么,请看这个Jquery插件嵌套排序示例,它准确地定义了我要查找的内容 另一个类似的例子: 我需要开发与上述示例完全相同的代码,但仅使用纯老式javascript,请不要建议使用任何Jquery代码 这是我目前正在做的工作,但是我现在被卡住了,不知道如何让子分组功能发挥作用。请帮忙 我的工作演示: 我的工作演示+代码: 编辑: 让我更详细地举例说明代码。StartDrag和StopDrag包含功能背后的主要逻辑。基本上,当用户拖动div标记时,我当前正在为要拖动放置的项在现有div标记的顶部或下方创建一个容器,但是当我使用相同的功能在另一个容器中创建该容器时(通过创建子组),我得到一个错误。这意味着,可能是我在以错误的方式处理问题,可能是我的逻辑错误,或者代码有其他问题 组div标记的HTML标记:纯使用javascript的div标签拖放功能,javascript,Javascript,我需要使用纯Javascript创建嵌套的拖放功能(请不要使用Jquery或其他插件) 其想法是将多个div标记作为组,并能够将该div标记/组拖动到另一个div标记/组的顶部,以在其自身(作为该组的子级)中创建一个子组。允许的子组的最大级别为4。为了说明我在说什么,请看这个Jquery插件嵌套排序示例,它准确地定义了我要查找的内容 另一个类似的例子: 我需要开发与上述示例完全相同的代码,但仅使用纯老式javascript,请不要建议使用任何Jquery代码 这是我目前正在做的工作,但是我现在
<div class="dragContainerUsed">
<div id="a7b94a42-fb00-4011-bd5a-4b48e6e578c5" class="dragPanel">
<input type="hidden" value="1|fa7989d7-1708-4a90-9bf6-c91f6cef6952" />
<div onmousedown="startDrag(event, this.parentNode)" class="dragPanelHeader">
<div style="margin-left:4px; margin-top:3px; float:left;">1 - Group 1<span id="gta7b94a42-fb00-4011-bd5a-4b48e6e578c5"></span></div>
</div>
</div>
<div class=\"dragSubContainerUnUsed\"></div>
</div>
<div class="dragContainerUnUsed"></div>
1-第1组
所以我想要发生的是,当用户拖动另一个div到div dragsubcontainer的顶部时,它应该被放置在该子容器中
开始拖动时,我创建一个数组来存储所有容器和子容器:
containers = new Array();
subContainers = new Array();
containers.push(dragTarget);
for (i = 0; i < divs.length; i++) {
if (divs[i].className.toLowerCase() == "dragcontainerunused") {
containers.push(divs[i]);
}
}
for (i = 0; i < divs.length; i++) {
if (divs[i].className.toLowerCase() == "dragSubcontainerunused") {
subContainers.push(divs[i]);
}
}
containers=newarray();
子容器=新数组();
容器.推送(牵引目标);
对于(i=0;i
目前我遇到的问题是函数onDrag
和stopDrag
,我不知道如何让分包商通过来创建子组
例如,如果我将组3拖动到组2的顶部,我希望组3是2的子组,如下所示:
我应该能够在每个子组中添加最多4个组,最多4个子组。
这样地:
最后,最多只能有4个级别的子组
这样地:
请尽你所能提供帮助,如果你能发现问题,请告诉我,或者如果我的代码需要更改逻辑,请告诉我,即使你可以完全重新编写/创建你自己的新代码以使此应用程序正常工作,也将不胜感激。几天来,我一直在努力解决这个问题,任何和所有的帮助都将得到极大的接受…如果您愿意,我也会发布代码,但我认为如果您尝试并实现它,这种方法本身会起作用。这就是方法
将该项添加为listitem
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");
ev.target.appendChild(document.getElementById(data));
}
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
</div>"
<img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69">`
功能allowDrop(ev){
ev.preventDefault();
}
功能阻力(ev)
{
ev.dataTransfer.setData(“文本”,ev.target.id);
}
功能下降(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData(“文本”);
ev.target.appendChild(document.getElementById(数据));
}
"
`
我一直在做这件事,几个月前就完成了。但是我忘了这篇文章。所以我决定为其他可能正在寻找答案的人发布完整的解决方案
整个代码太长,无法在此处发布,但下面是代码的链接:
演示:所以问题需要在问题中包含代码,而不是在外部站点上。到底是什么问题?这听起来像是
dragNode.parentNode.removeChild(dragNode);dropNode.appendChild(dragNode)的一个简单例子
。我的问题是,我正在试图找出在我的代码中创建子分组所需的逻辑/代码。目前,您可以拖放每个单独的组,但我希望能够将一个组拖到彼此之间/拖到彼此之间,同时在其内部创建最多级别为4个子组的子组。我认为如果你自己发现了问题,并问了一些更具体的问题(也许更短?)好吧,就是这样,我在上面使用子容器发布的代码是我创建子分组时最想做的,但是当我实现它时,它打破了现有的拖放工作方式,这意味着我可能没有正确的方法。我会诚实地问,不带jquery的情况下如何做,是不是?”我如何在纯html中创建可操作的3d图像?我不知道css/js/jquery或java/flash。我以前也尝试过类似的方法,但可能我对整个DOM操作的了解有点有限,因为我是初学者。您是否可以在我的代码中进行更改()或者为您的解决方案发布一个工作代码。非常感谢您的帮助亲爱的先生!!您有机会