javascript - 我有2个盒子和一张照片。用户可以在两个框之间拖动图片。如何判断图片是从哪个框拖出来的?

标签 javascript html css

我有 2 个盒子和一张照片。用户可以在两个框之间拖动图片。如何判断图片是从哪个框拖出来的?我尝试查看图片的父元素,但这不起作用,因为我猜 HTML 没有改变。

<!DOCTYPE html>
<html>

<head>
  <script>
    function allowDrop(ev) {
      ev.preventDefault();
    }

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

    function dropone(ev) {
      ev.preventDefault();
      var data = ev.dataTransfer.getData("text");
      var nodeCopy = document.getElementById(data).cloneNode(true);
      nodeCopy.id = "newId";
      nodeCopy.setAttribute("style", "position:absolute; left:" + ev.x + "px;top:" + ev.y + "px;transform:translate(-" + nodeCopy.width / 2 + "px,-" + nodeCopy.height / 2 + "px)");
      ev.target.appendChild(nodeCopy);
    }

    function drop(ev) {
      if (document.getElementById('picture').parentElement.id == 'bluebox') {
        alert("YOU DRAGGED FROM THE BLUE BOX!");
        ev.preventDefault();
        var data = ev.dataTransfer.getData("text");
        var nodeCopy = document.getElementById(data).cloneNode(true);
        nodeCopy.id = "newId";
        nodeCopy.setAttribute("style", "position:absolute; left:" + ev.x + "px;top:" + ev.y + "px;transform:translate(-" + nodeCopy.width / 2 + "px,-" + nodeCopy.height / 2 + "px)");
        ev.target.appendChild(nodeCopy);
      } else if (document.getElementById('picture').parentElement.id == 'redbox') {
        alert("YOU DRAGGED FROM THE RED BOX!");
        ev.preventDefault();
        var data = ev.dataTransfer.getData("text");
        var nodeCopy = document.getElementById(data).cloneNode(true);
        nodeCopy.id = "newId";
        nodeCopy.setAttribute("style", "position:absolute; left:" + ev.x + "px;top:" + ev.y + "px;transform:translate(-" + nodeCopy.width / 2 + "px,-" + nodeCopy.height / 2 + "px)");
        ev.target.appendChild(nodeCopy);
      }
    }
  </script>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    
    .box {
      display: block;
      height: 300px;
      width: 300px;
      background-color: red;
    }
    
    .boxtwo {
      display: block;
      height: 300px;
      width: 300px;
      background-color: lightblue;
    }
  </style>
</head>

<body>

  <span id="redbox" class="box" ondrop="drop(event)" ondragover="allowDrop(event)"></span>

  <br />

  <span id="bluebox" class="boxtwo" ondrop="drop(event)" ondragover="allowDrop(event)">
      <div id="picture" ondrop="drop(event)">
          <img src="https://www.w3schools.com/html/img_w3slogo.gif" draggable="true" ondragstart="drag(event)" id="drag1" width="88" height="31">
      </div>
    </span>
</body>

</html>

或者,在此处查看 TryIt:https://www.w3schools.com/code/tryit.asp?filename=GBYRXSX3L0PP

提前致谢!

最佳答案

在您正在运行的代码中:

var nodeCopy = document.getElementById(data).cloneNode(true);

我相信这是复制根元素(原始元素的引用)并复制其原始细节,这意味着所有元素都源自蓝色框 -

可以尝试代替使用克隆节点

1)

创建一个元素 div 并将其附加到用户通过拖放输入提供的位置

2)

为元素编写严格的 html 并使用 incertAdjacenthtml https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML

查看这篇关于从源元素创建原始克隆元素主题的文章

How do I correctly clone a JavaScript object?

希望这可以帮助您调试!

沃利

关于javascript - 我有2个盒子和一张照片。用户可以在两个框之间拖动图片。如何判断图片是从哪个框拖出来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60251506/

相关文章:

html - 两个div之间的轻微透明空间

html - 相对定位的 parent 不作为绝对定位的 child 的 anchor

html - 使用 calc() 进行列对齐

javascript - 如何在替换为新元素之前删除 HTML 标签?

javascript - 通过 JavaScript 动态创建和打印 h1 标签

javascript - 删除 DOM 元素的属性

javascript - 在jquery中连续向右移动div

html - Joomla 博客并列两个类别

javascript - Google App Script postMessage 与收件人窗口的来源不匹配

javascript - 如何在本地开发 npm 模块