【问题标题】:Unable to drag and drop an image over another image in JS?无法在 JS 中将图像拖放到另一个图像上?
【发布时间】:2020-06-27 16:26:25
【问题描述】:

我正在用 JS 编写代码,将图像拖放到另一个图像上。但我无法得到想要的结果。在放下图像时,它突然消失了。我已经提到了以前的问题,但找不到有用的。有人帮我理解这个问题。

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 class="col3 col-sm-12 col-md-4" id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
  <img src="https://picsum.photos/id/10/100/100" draggable="true" ondragstart="drag(event)" id="drag1">
</div>

<div class="col4 col-sm-12 col-md-4" id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">   
  <img src="https://picsum.photos/id/1/100/100" alt="gown4">
</div>

【问题讨论】:

    标签: javascript html css drag-and-drop


    【解决方案1】:

    试试这个

     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));
    }
    #div1, #div2 {
      float: left;
      width: 100px;
      height: 35px;
      margin: 10px;
      padding: 10px;
      border: 1px solid black;
    }
    <!DOCTYPE HTML>
    <html>
    <head>
    
    </head>
    <body>
     
    
    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
      <img src="https://www.w3schools.com/html/img_w3slogo.gif" draggable="true" ondragstart="drag(event)" id="drag1" width="88" height="31">
    </div>
    
    <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)" style="background:url(https://www.w3schools.com/images/w3certified_logo_250.png);background-repeat:no-repeat;background-size:cover;">  </div>
    
    </body>
    </html>

    【讨论】:

      【解决方案2】:

      event.target 返回最高元素,在您的情况下是 img 元素。所以发生的事情是您将拖动的图像附加到第二个图像中,而不是像预期的那样附加到 div 中。

      您可以做的是将要放入的元素作为函数的第二个参数传递,以确保放入所需的容器而不是某个子元素。

      像这样:

      function allowDrop(ev){
         ev.preventDefault();
      }
      function drag(ev){
         ev.dataTransfer.setData("text", ev.target.id);
         console.log(ev.target.id);
      }
      function drop(ev, el){
      console.log(ev);
         ev.preventDefault();
         var data = ev.dataTransfer.getData("text");
         el.appendChild(document.getElementById(data));
      }
      <div class="col3 col-sm-12 col-md-4" id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
        <img src="https://picsum.photos/id/10/100/100" draggable="true" ondragstart="drag(event)" id="drag1">
      </div>
      
      <div class="col4 col-sm-12 col-md-4" id="div2" ondrop="drop(event, this)" ondragover="allowDrop(event)">   
        <img src="https://picsum.photos/id/1/100/100" alt="gown4">
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多