Javascript 我有两个盒子和一张照片。用户可以在两个框之间拖动图片。我如何分辨图片是从哪个框中拖出的?
我有两个盒子和一张照片。用户可以在两个框之间拖动图片。我如何分辨图片是从哪个框中拖出的?我试着查看图片的父元素,但没有成功,因为HTML没有改变,我想Javascript 我有两个盒子和一张照片。用户可以在两个框之间拖动图片。我如何分辨图片是从哪个框中拖出的?,javascript,html,css,Javascript,Html,Css,我有两个盒子和一张照片。用户可以在两个框之间拖动图片。我如何分辨图片是从哪个框中拖出的?我试着查看图片的父元素,但没有成功,因为HTML没有改变,我想 功能allowDrop(ev){ ev.preventDefault(); } 功能阻力(ev){ ev.dataTransfer.setData(“文本”,ev.target.id); } 功能降音器(ev){ ev.preventDefault(); var data=ev.dataTransfer.getData(“文本”); var
功能allowDrop(ev){
ev.preventDefault();
}
功能阻力(ev){
ev.dataTransfer.setData(“文本”,ev.target.id);
}
功能降音器(ev){
ev.preventDefault();
var data=ev.dataTransfer.getData(“文本”);
var nodeCopy=document.getElementById(数据).cloneNode(真);
nodeCopy.id=“newId”;
setAttribute(“样式”,“位置:绝对;左侧:“+ev.x+”px;顶部:“+ev.y+”px;变换:平移”(“+nodeCopy.width/2+”px,-“+nodeCopy.height/2+”px)”);
ev.target.appendChild(nodeCopy);
}
功能下降(ev){
if(document.getElementById('picture').parentElement.id=='bluebox'){
警报(“您从蓝色框中拖出!”);
ev.preventDefault();
var data=ev.dataTransfer.getData(“文本”);
var nodeCopy=document.getElementById(数据).cloneNode(真);
nodeCopy.id=“newId”;
setAttribute(“样式”,“位置:绝对;左侧:“+ev.x+”px;顶部:“+ev.y+”px;变换:平移”(“+nodeCopy.width/2+”px,-“+nodeCopy.height/2+”px)”);
ev.target.appendChild(nodeCopy);
}else if(document.getElementById('picture').parentElement.id=='redbox')){
警报(“您从红色框中拖出!”);
ev.preventDefault();
var data=ev.dataTransfer.getData(“文本”);
var nodeCopy=document.getElementById(数据).cloneNode(真);
nodeCopy.id=“newId”;
setAttribute(“样式”,“位置:绝对;左侧:“+ev.x+”px;顶部:“+ev.y+”px;变换:平移”(“+nodeCopy.width/2+”px,-“+nodeCopy.height/2+”px)”);
ev.target.appendChild(nodeCopy);
}
}
* {
保证金:0;
填充:0;
}
.盒子{
显示:块;
高度:300px;
宽度:300px;
背景色:红色;
}
B.第二箱{
显示:块;
高度:300px;
宽度:300px;
背景颜色:浅蓝色;
}
在您正在运行的代码中:
var nodeCopy = document.getElementById(data).cloneNode(true);
我认为这是复制根元素(原始元素的引用)并复制其原始细节,这意味着所有元素都源自蓝框-
请尝试使用克隆节点,而不是使用克隆节点
(一)
创建元素div并将其附加到用户通过拖放输入提供的位置
(二)
为元素编写strick html并使用incertAdjacenthtml
看一看这篇关于从源元素创建原始克隆元素的文章
我希望这有助于您调试
Wally在您正在运行的代码中:
var nodeCopy = document.getElementById(data).cloneNode(true);
我认为这是复制根元素(原始元素的引用)并复制其原始细节,这意味着所有元素都源自蓝框-
请尝试使用克隆节点,而不是使用克隆节点
(一)
创建元素div并将其附加到用户通过拖放输入提供的位置
(二)
为元素编写strick html并使用incertAdjacenthtml
看一看这篇关于从源元素创建原始克隆元素的文章
我希望这有助于您调试
Wally在drop()
函数中,您可以获得a参数ev
。使用ev.toElement.id
,您可以从中获得目标的id
。您只需检查id
是否有目标:
功能allowDrop(ev){
ev.preventDefault();
}
功能阻力(ev){
ev.dataTransfer.setData(“文本”,ev.target.id);
}
功能降音器(ev){
ev.preventDefault();
var data=ev.dataTransfer.getData(“文本”);
var nodeCopy=document.getElementById(数据).cloneNode(真);
nodeCopy.id=“newId”;
setAttribute(“样式”,“位置:绝对;左侧:“+ev.x+”px;顶部:“+ev.y+”px;变换:平移”(“+nodeCopy.width/2+”px,-“+nodeCopy.height/2+”px)”);
ev.target.appendChild(nodeCopy);
}
功能下降(ev){
如果在drop()
函数上(ev.toElement.id=='redbox'){/,您将获得一个参数ev
。您可以使用ev.toElement.id
从这个参数中获得目标的id
。您只需检查id
是否有目标:
功能allowDrop(ev){
ev.preventDefault();
}
功能阻力(ev){
ev.dataTransfer.setData(“文本”,ev.target.id);
}
功能降音器(ev){
ev.preventDefault();
var data=ev.dataTransfer.getData(“文本”);
var nodeCopy=document.getElementById(数据).cloneNode(真);
nodeCopy.id=“newId”;
setAttribute(“样式”,“位置:绝对;左侧:“+ev.x+”px;顶部:“+ev.y+”px;变换:平移”(“+nodeCopy.width/2+”px,-“+nodeCopy.height/2+”px)”);
ev.target.appendChild(nodeCopy);
}
功能下降(ev){
如果(ev.toElement.id='redbox'){/Helllo,堆栈溢出社区
见德国人对我提出的类似问题的回答:
他们的密码我放在TryIt上了:
为了更好地回答这个问题,他们的答案有所不同:
我删除了整个“蓝盒子”的东西,因为最终它是不必要的
我希望这能帮助那些遇到与我相同问题的人
--Matty,OP你好,堆栈溢出社区
参见德语对我提出的类似问题的回答: