javascript - 使用开关拖放更改图像
问题描述
我正在开发我的游戏,但我遇到了一些问题......
1.如果图像在.room类中,它有另一个 src,但如果你把它放在.items类中,它应该变成一个图标。如果你再次将它拖到.room,它会转回来。
2.有很多不同的图像,所以我想要一个开关。如果拖动的 objekt 正在拖动到.items图像应该改变。所以图像的 id 应该去 switch 并检查 id 和 case 是否相同。scr 应该来自图标。
3.如果可能的话,我想在 local.storage 中保护图像的 id,以便我可以在下一页中使用 objekt
<html>
<head>
<style>
.room {
width: 500px;
height: 150px;
margin: 10px;
padding: 10px;
border: 1px solid black;
}
.items {
width: 500px;
height: 150px;
margin: 10px;
padding: 10px;
border: 1px solid black;
}
</style>
<script>
function allowDrop(ev) {
if (ev.target.className === "items") {
ev.target.style.border = "3px dashed black";
}
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("img", ev.target.id);
}
function dragleave(ev) {
if (ev.target.className === "items") {
ev.target.style.border = "0px dashed transparent";
}
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("img");
ev.target.style.border = "0px dashed transparent";
if (ev.target=="[object HTMLImageElement]"){
ev.target = ev.target.parentNode;
}
else {
ev.target.appendChild(document.getElementById(data));
}
if (ev.target.id === ev.dataTransfer.getData("ori")) {
return;
}
var image = document.createElement("img");
image.id =
image.draggable = true;
image.addEventListener('dragstart', drag);
if (ev.target.className === 'items') {
icon();
} else if (ev.target.className === 'room') {
room();
}
var originEle = document.getElementById(ev.dataTransfer.getData("ori"));
originEle.outerHTML = '';
delete originEle;
ev.target.appendChild(image);
}
function icon(){
switch(image.id) {
case "teddy": image.src="pic/Icons/teddy.png";break;
case "book": image.src="pic/Icons/Buch.png";break;
}
}
function room(){
switch(image.id) {
case "teddy": image.src= "pic/Home/HomeRoom_booksL.png";break;
case "booksR": image.src= "pic/Home/HomeRoom_buch.png";break;}
}
function reset(){
var container = document.getElementById("field");
container.innerHTML= html;
}
var html;
window.onload = function(){
html = document.getElementById('field').innerHTML;
};
</script>
</head>
<body>
<h2>Drag and Drop</h2>
<div>
<div class="room" ondrop="drop(event)" ondragover="allowDrop(event)">
</div>
<h2>items</h2>
<div class="items" ondrop="drop(event)" ondragover="allowDrop(event)">
<img id="book" src="pic/Icons/Buch.png" draggable="true" ondragstart="drag(event)" id="drag1">
<img id="teddy" alt="booksL"src="pic/Home/HomeRoom_teddy.png" id="drag2" draggable="true" ondragstart="drag(event)" >
</div>
</div>
</body>
</html>
解决方案
关于第三个问题 - 保存到 localStorage:将下面的代码添加到您的 drop 函数中。
localStorage.setItem("name", data);
推荐阅读
- typescript - 为什么没有关于通用接口错误实现的消息
- scala - Scala 没有这样的元素例外
- sql - 如何在 bigquery 数据表中添加计算列?
- python-3.x - 基于主列表自动排序文件
- java - 类数组的编译时初始化,其中包含一个整数数组
- c++ - 在 C 或 C++ 中,如何防止头文件中以前的#define 影响以后包含的另一个头文件?
- javascript - react-native:后退按钮处理程序
- javascript - discord.js 权限模块不断打印未定义
- go - 如何使用按位运算符将任何负值转换为零?
- mule - Mulesoft IBM MQ 连接器在 Mule 3.9 中的发布-消费操作等效?