javascript - 这个拖放式 javascript 代码有什么问题?
问题描述
我花了大约 3 个小时来解决这个问题,但我仍然不知道究竟是什么导致了这种行为。我正在尝试编写一个浏览器游戏,其中您有库存和设备选项卡。当我将物品 div 从库存移动到设备选项卡 div 时,一切正常,但是一旦我尝试将其移回库存,所有物品都会堆叠在鼠标光标上。我通过将设备库存 div 移动为设备标签 div 的子级来解决它。但我仍然不确定是什么导致了这个问题。我希望我解释得很好。我有这个 HTML 代码
<div id="equipmenttab" >
<div class="leftitems">
<div class="dragcontainer" id="helm" ></div>
<div class="dragcontainer" id="neck"></div>
<div class="dragcontainer" id="shoulder"></div>
<div class="dragcontainer" id="cape"></div>
<div class="dragcontainer" id="chest"></div>
<div class="dragcontainer" id=""></div>
<div class="dragcontainer" id=""></div>
<div class="dragcontainer" id="wrist"></div>
</div>
<div class="rightitems">
<div class="dragcontainer" id="glove"></div>
<div class="dragcontainer" id="waist"></div>
<div class="dragcontainer" id="legs"></div>
<div class="dragcontainer" id="feet"></div>
<div class="dragcontainer" id="ring"></div>
<div class="dragcontainer" id="ring"></div>
<div class="dragcontainer" id="trinket"></div>
<div class="dragcontainer" id="trinket"></div>
</div>
<div class="bottomitems">
<div class="dragcontainer" id="mainhand"></div>
<div class="dragcontainer" id="offhand"></div>
<div class="dragcontainer" id="wand"></div>
</div>
</div>
<div class="inventory-container">
<div class="dragcontainer inventory" ><div id="12" class="item helm"
draggable="true"></div></div>
<div class="dragcontainer inventory" ><div id="13" class="item
chest" draggable="true"></div></div>
<div class="dragcontainer inventory" ><div id="156" class="item
legs" draggable="true"></div></div>
<div class="dragcontainer inventory" ></div>
<div class="dragcontainer inventory" ></div>
<div class="dragcontainer inventory" ></div>
<div class="dragcontainer inventory" ></div>
<div class="dragcontainer inventory" ></div>
<div class="dragcontainer inventory" ></div>
<div class="dragcontainer inventory" ></div>
</div>
和这个javascript代码
var draggeditem;
var items = document.getElementsByClassName("item");
for (i=0;i < items.length; i++){
items[i].addEventListener("dragstart", function(){
draggeditem=event.target.id;
//event.dataTransfer.setData("text", event.target.id);
draggedItemClassName = event.target.className;
draggedItemClassName = draggedItemClassName.split(" ");
console.log(event.dataTransfer.getData('text'));
});
}
var containers = document.getElementsByClassName('dragcontainer');
for (i=0; i < containers.length; i++) {
containers[i].addEventListener("drop", function(){
event.preventDefault();
var data = event.dataTransfer.getData("text");
if(hoveredItemId == draggedItemClassName[1]){
event.target.appendChild(document.getElementById(draggeditem));
draggeditem = null;
console.log(draggeditem);
}
else if(hoveredItemClassName[1] == 'inventory'){
event.target.appendChild(document.getElementById(draggeditem));
draggeditem = null;
console.log(draggeditem);
}
});
containers[i].addEventListener("dragover", function(){
hoveredItemId = event.target.id;
hoveredItemClassName = event.target.className;
hoveredItemClassName = hoveredItemClassName.split(" ");
console.log(hoveredItemClassName[1]);
event.preventDefault();
});
}
解决方案
推荐阅读
- c# - AuthorizeView 策略:Blazor 页面未显示
- typescript - 如何处理 Firestore DataConverter 中的引用?
- mongodb - 如何在 Alpine 3.11 上安装 MongoDB 4.4
- solr - 如何对术语 json faceting solr 的加权平均字段进行排序
- android - 改造 - 当应用程序处于后台/关闭时不调用 API 调用
- windows - Windows 上的 Ansible 身份验证
- python - 为什么我无法使用 Python 和 Selenium 找到 html 元素?
- javascript - 如何同时删除数组中的两个元素?
- java - AWS toolkit for Eclipse - 安装问题
- c - 将值传递给函数参数中的 void 指针