如何获取被拖动项的句柄——HTML拖放API

问题描述 投票:0回答:1

我正在使用 HTML 拖放 API。拖动元素时,我想获得可拖动元素(原始元素)和被拖动元素(原始元素的可移动副本)的单独句柄。

我不知道如何在不改变另一个的情况下操纵一个。下面的示例显示了当拖动开始时两个元素如何变成红色

<!DOCTYPE HTML>
<html>
<head>
<style>
#div1 {
  width: 350px;
  height: 90px;
  padding: 10px;
  border: 1px solid #aaaaaa;
}
.red {
  background: red;
  border: 5px solid #aaaaaa;
}
#drag1 {
    height: 69px;
    width: 336px;
    border: 5px solid #aaaaaa;
}
</style>
<script>
function allowDrop(ev) {
  ev.preventDefault();
}

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

function drop(ev) {
  ev.preventDefault();
  var data = ev.dataTransfer.getData("text");
  ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">drop here</div>
<br>
<div id="drag1" draggable="true" ondragstart="drag(event)" width="336" height="69">drag me</div>

</body>
</html>

html drag-and-drop
1个回答
0
投票

如果使用

ondrag
代替
ondragstart
,可以使元素不同,但只能改变原元素的状态(被拖动的元素将是拖动前的状态,所以看起来和被拖动的元素一模一样)开始拖动之前的那一刻)。

<!DOCTYPE HTML>
<html>

<head>
  <style>
    #div1 {
      width: 350px;
      height: 90px;
      padding: 10px;
      border: 1px solid #aaaaaa;
    }
    
    .red {
      background: red;
      border: 5px solid #aaaaaa;
    }
    
    #drag1 {
      height: 69px;
      width: 336px;
      border: 5px solid #aaaaaa;
    }
  </style>
  <script>
    function allowDrop(ev) {
      ev.preventDefault();
    }

    function drag(ev) {
      ev.target.classList.add('red');
    }

    function dragstart(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));
    }

    function dragend(ev) {
      ev.target.classList.remove('red');
    }
  </script>
</head>

<body>

  <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">drop here</div>
  <br>
  <div id="drag1" draggable="true" ondrag="drag(event)" ondragstart="dragstart(event)" ondragend="dragend(event)" width="336" height="69">drag me</div>

</body>

</html>

© www.soinside.com 2019 - 2024. All rights reserved.