当我使用HTML拖放API时,拖动不起作用

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

这是我的代码:

var dragged

    document.addEventListener("drag", function (event) {
    }, false)

    document.addEventListener("dragstart", function (event) {
      dragged = event.target
      event.target.style.opacity = .5
    }, false)

    document.addEventListener("dragend", function (event) {
      event.target.style.opacity = ""
    }, false)

    document.addEventListener("dragover", function (event) {
      event.preventDefault()
    }, false)

    document.addEventListener("dragenter", function (event) {
      if (event.target.className == "dropzone") {
        event.target.style.background = "purple"
      }

    }, false)

    document.addEventListener("dragleave", function (event) {
      if (event.target.className == "dropzone") {
        event.target.style.background = ""
      }

    }, false)

    document.addEventListener("drop", function (event) {
      event.preventDefault()
      if (event.target.className == "dropzone") {
        event.target.style.background = ""
        dragged.parentNode.removeChild(dragged)
        event.target.appendChild(dragged)
      }

    }, false)
   #draggable {
      width: 200px;
      height: 20px;
      text-align: center;
      background: white;
    }

    .dropzone {
      width: 200px;
      height: 20px;
      background: blueviolet;
      margin-bottom: 10px;
      padding: 10px;
    }
  <div class="dropzone ">
    <div id="draggable" draggable="true" ondragstart="event.dataTransfer.setData('text/plain',null)">
      this is draggable
    </div>
  </div>
  <div class="dropzone"></div>
  <div class="dropzone"></div>
  <div class="dropzone"></div>

我希望将文本转换为其他div容器。 drag text into other div

drag text into other div

但我发现我可以拖动div container.just像这样

error

虽然设置draggable ='false',我仍然可以拖动div容器。

<div class="dropzone " draggable="false">
<div id="draggable" draggable="true"ondragstart="event.dataTransfer.setData('text/plain',null)">
    this is draggable
</div>
</div><div class="dropzone" draggable="false">
</div><div class="dropzone" draggable="false">
</div><div class="dropzone" draggable="false"></div>

我使用chrome,我在控制台中看不到任何错误。

javascript html html5
1个回答
0
投票

你在user-select: none;课上缺少.dropzone。问题是当你第一次拖动.dropzone时,它正在选择.dropzone和可拖动的文本。在user-select: none;上使用.dropzone,它不会选择dropzone div。

试试看。

var dragged

    document.addEventListener("drag", function (event) {
    }, false)

    document.addEventListener("dragstart", function (event) {
      dragged = event.target
      event.target.style.opacity = .5
    }, false)

    document.addEventListener("dragend", function (event) {
      event.target.style.opacity = ""
    }, false)

    document.addEventListener("dragover", function (event) {
      event.preventDefault()
    }, false)

    document.addEventListener("dragenter", function (event) {
      if (event.target.className == "dropzone") {
        event.target.style.background = "purple"
      }

    }, false)

    document.addEventListener("dragleave", function (event) {
      if (event.target.className == "dropzone") {
        event.target.style.background = ""
      }

    }, false)

    document.addEventListener("drop", function (event) {
      event.preventDefault()
      if (event.target.className == "dropzone") {
        event.target.style.background = ""
        dragged.parentNode.removeChild(dragged)
        event.target.appendChild(dragged)
      }

    }, false)
#draggable {
      width: 200px;
      height: 20px;
      text-align: center;
      background: white;
    }

    .dropzone {
      width: 200px;
      height: 20px;
      background: blueviolet;
      margin-bottom: 10px;
      padding: 10px;
      user-select: none;
    }
<div class="dropzone ">
    <div id="draggable" draggable="true" ondragstart="event.dataTransfer.setData('text/plain',null)">
      this is draggable
    </div>
  </div>
  <div class="dropzone"></div>
  <div class="dropzone"></div>
  <div class="dropzone"></div>
© www.soinside.com 2019 - 2024. All rights reserved.