javascript - 使用 jQuery 的 Html 5 嵌套拖放

标签 javascript jquery html drag-and-drop

您好,我已经使用 html5 拖放创建了一些演示。我有嵌套的可拖动容器。当我尝试在子容器上拖动元素时,它会将元素附加到两个容器上。我该如何修复该部分?请帮助我。

这是我的例子`

html

<div id="div1">
  container 1
  <div id="div2">
    container 2
  </div>
</div>
<br>
<img id="drag1" src="http://www.w3schools.com/html/img_logo.gif" width="336" height="69">

jquery

  $(document).ready(function() {
  var drag1 = `<img src="http://www.w3schools.com/html/img_logo.gif"  width="336" height="69">`

  $("#div1").on("dragover", function(e) {
    $(this).css('background', 'yellow');

    e.preventDefault();
    e.stopPropogation();
  });

  $("#div1").on("dragleave", function(e) {
    $(this).css('background', 'none');

    e.preventDefault();
    e.stopPropogation();
  });

  $("#div2").on("dragover", function(e) {
    $(this).css('background', 'yellow');

    e.preventDefault();
    e.stopPropogation();
  });

  $("#div2").on("dragleave", function(e) {
    $(this).css('background', 'red');

    e.preventDefault();
    e.stopPropogation();
  });

  $("#drag1").on("dragstart", function(e) {
    e.originalEvent.dataTransfer.setData("Text", e.target.id);
  });

  $("#div1").on("drop", function(e) {
    e.preventDefault();

    var data = e.originalEvent.dataTransfer.getData("Text");
    data === 'drag1' && $(this).append(drag1);
  });

  $("#div2").on("drop", function(e) {
    e.preventDefault();

    var data = e.originalEvent.dataTransfer.getData("Text");
    data === 'drag1' && $(this).append(drag1);
  });
});

CSS

  #div1 {
     min-width: 350px;
     min-height: 70px;
     padding: 40px;
     border: 1px solid #aaaaaa;
   }

   #div2 {
     width: 350px;
     min-height: 70px;
     padding: 10px;
     border: 1px solid #aaaaaa;
     background: red;
   }

jsfiddle Example

如果我想拖动子容器,它应该只放在该容器上,但在父容器上我不知道如何停止拖动事件。

感谢您的帮助。

最佳答案

这是您的解决方案: http://jsfiddle.net/43xky7ot/

1.) 这不是传播,而是传播e.stopPropagation()

2.) 放入 div2 时需要停止冒泡: $("#div2").on("drop", function(e) {e.stopPropagation();})

$(document).ready(function() {
  var drag1 = `<img src="http://www.w3schools.com/html/img_logo.gif"  width="336" height="69">`

  $("#div1").on("dragover", function(e) {
    $(this).css('background', 'yellow');

    e.preventDefault();
    e.stopPropagation();
  });

  $("#div1").on("dragleave", function(e) {
    $(this).css('background', 'none');

    e.preventDefault();
    e.stopPropagation();
  });

  $("#div2").on("dragover", function(e) {
    $(this).css('background', 'yellow');

    e.preventDefault();
    e.stopPropagation();
  });

  $("#div2").on("dragleave", function(e) {
    $(this).css('background', 'red');

    e.preventDefault();
    e.stopPropagation();
  });

  $("#drag1").on("dragstart", function(e) {
    e.originalEvent.dataTransfer.setData("Text", e.target.id);
  });

  $("#div1").on("drop", function(e) {
    e.preventDefault();

    var data = e.originalEvent.dataTransfer.getData("Text");

    data === 'drag1' && $(this).append(drag1);
  });

  $("#div2").on("drop", function(e) {
    e.preventDefault();
    e.stopPropagation();
    console.log('div2 dropped');

    var data = e.originalEvent.dataTransfer.getData("Text");

    data === 'drag1' && $(this).append(drag1);
  });
});

关于javascript - 使用 jQuery 的 Html 5 嵌套拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59476020/

相关文章:

html - 元素从父元素继承样式,即使以其他方式显式定义也是如此

javascript - 如何在 UWP JavaScript 应用程序中显示状态栏?

javascript - 无法通过 onclick 属性将 Guid 传递给 Javascript 函数

javascript - jQuery live 无法按预期工作

javascript - 将 JSON 加载到时间图中

javascript - 在我的例子中如何正确使用Javascript 'this'?

javascript - 如果检查了 php 条件,则通过 JQuery 将类添加到元素

javascript - 除非选中指定数量的复选框,否则停止提交表单

javascript - 如何设置空值或 null 值在 Jquery 更改中不起作用

css - 使用 CSS 在 Drupal 7 中排列字段显示