Javascript draggable 我需要引用初始拖动的对象,以便我可以交换

标签 javascript html drag-and-drop

我需要的功能是当您拖动一个元素并将其放到另一个元素上时,它们会交换位置。

我想写一个这样的交换函数。

function swapElements(obj1, obj2) {
    // create marker element and insert it where obj1 is
    var temp = document.createElement("div");
    obj1.parentNode.insertBefore(temp, obj1);

    // move obj1 to right before obj2
    obj2.parentNode.insertBefore(obj1, obj2);

    // move obj2 to right before where obj1 used to be
    temp.parentNode.insertBefore(obj2, temp);

    // remove temporary marker node
    temp.parentNode.removeChild(temp);
}

因此,作为参数,我需要传递初始的拖动元素,然后在 drop 上传递拖放的元素。

  var self = this;

  // drag start
  myNode.addEventListener("dragstart", function(e) {
    this.classList.add('dragstart');
    e.dataTransfer.setData('from', this.innerHTML);
  }, false);

  // drop event
  myNode.addEventListener("drop", function(e) {
    if (e.preventDefault) e.preventDefault(); 
    if (e.stopPropagation) e.stopPropagation();
    this.classList.remove('dragover');

    var obj1 = e.dataTransfer.getData('from');

    // user has dropped lets do the swap
    self.swapElements(obj1, this);

  }, false);

所以对于上面我正在做的是使用 dataTransfer 但这实际上并没有引用初始节点,它只是克隆了 HTML。

所以我的问题是如何引用初始拖动节点以便运行我的交换函数?

最佳答案

您可以为两个事件处理程序使用公共(public)变量,并将被拖动的元素存储在其中。

var dragged;

myNode.addEventListener("dragstart", function(e) {
    this.classList.add('dragstart');
    dragged=e.target;
  }, false);

 myNode.addEventListener("drop", function(e) {
    if (e.preventDefault) e.preventDefault(); 
    if (e.stopPropagation) e.stopPropagation();
    this.classList.remove('dragover');
    self.swapElements(dragged, e.target);

  }, false);

关于Javascript draggable 我需要引用初始拖动的对象,以便我可以交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36004829/

相关文章:

javascript - 使用 JavaScript 在 div 内使用鼠标事件绘制直线

javascript - 使用 PHP 迭代 HTML 数组

javascript - jQuery 加载后不运行 "if"

java - GWT-DnD(拖放)布局问题

javascript - 使用 JavaScript 使用透明图像创建可扩展叠加层

html - CSS 3 列布局,高度灵活的侧边栏,SEO 代码顺序 : CONTENT-LEFT-RIGHT

javascript - 无法触发 drop 事件(是的,我在拖拽中阻止了 Default() )

javascript - 为什么用css3动画换背景图片会出现淡出效果?

javascript - Jquery拖放改变div内容

android - 通过拖放可重新排序的 ListView