javascript - 无法获得 interact.js 拖放交互以使用 Bootstrap 元素

标签 javascript jquery twitter-bootstrap drag-and-drop interact.js

我正在尝试获取 interact.js使用 Bootstrap 列表项。我有一个非常简单的设置,但不幸的是我无法让它工作。

HTML(包含两个 Bootstrap 面板的 div - 一个带有一些可拖动的列表项,另一个带有两个拖放区):

<div id="visualizer-panel">
    <div class="leftStuff panel">
        <div class="panel-heading">
            <h4 class="panel-title">Draggables</h4>
        </div>
        <div class="panel-body">
            <ul class="list-group">
                <li class="list-group-item draggable">asdf</li>
                <li class="list-group-item draggable">bbq</li>
            </ul>
        </div>
    </div>
    <div class="rightStuff panel">
        <div class="panel-heading">
            <h4 class="panel-title">Drop Areas</h4>
        </div>
        <div class="panel-body">
            <div class="dropzone">drop stuff here</div>
            <div class="dropzone">drop more stuff here</div>
        </div>
    </div>
</div>

CSS:

#visualizer-panel .leftStuff {
    float: left;
}
#visualizer-panel .rightStuff {
    float: right;
}

/* Visual cursor hint for draggable */
#visualizer-panel .draggable:hover {
    cursor: move;
}

/* Drag & Drop */
#visualizer-panel .draggable {
    -webkit-transform: translate(0px, 0px);
    transform: translate(0px, 0px);
}
#visualizer-panel .drop-active { border-color: red; }
#visualizer-panel .drag-drop.can-drop { background-color: #4e4; }
#visualizer-panel .drop-target {  background-color: #29e;  }

和 Javascript:

// Initialize Interact.js Drag & Drop
interact('.draggable').draggable({
    inertia: true,
    restrict: {
      restriction: "#visualizer-panel",
      endOnly: true,
      elementRect: { top: 0, left: 0, bottom: 1, right: 1 }
    },
    onend: function(event) {
        console.log(event);
    }
});

interact('.dropzone').dropzone({
    accept: '.draggable',
    overlap: 0.01,

    // add / remove dropzone feedback
    ondropactivate: function (event) {
        event.target.classList.add('drop-active');
    },
    ondropdeactivate: function (event) {
        event.target.classList.remove('drop-active');
    },

    // add / remove dropzone feedback
    ondragenter: function (event) {
        var draggableElement = event.relatedTarget,
            dropzoneElement = event.target;
        dropzoneElement.classList.add('drop-target');
        draggableElement.classList.add('can-drop');
    },
    ondragleave: function (event) {
        event.target.classList.remove('drop-target');
        event.relatedTarget.classList.remove('can-drop');
    },

    // drop successful
    ondrop: function (event) {
        console.log(event);
    }
});

这是上面代码的 jsfiddle 链接:http://jsfiddle.net/hf27hn0c/6/

如您所见,无法将列表项拖放到拖放区中。我知道我可能必须在拖动开始时手动从父列表中删除项目,但现在我什至无法获得各种 dragenterdragleave、或关键的 ondrop 事件才能正常工作。

有什么想法吗?谢谢。

最佳答案

interact('.dropzone').dropzone({
    accept: '.draggable',
    overlap: 0.01,
    ...

您需要在拖放区上重叠 1% 的可拖放对象才能符合放置条件。因为 draggables 没有被移动,重叠永远不会发生。

解决方案是添加一个dragmove 来移动可拖动对象或将放置区的重叠更改为'pointer'http://jsfiddle.net/hf27hn0c/7/

关于javascript - 无法获得 interact.js 拖放交互以使用 Bootstrap 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28712207/

相关文章:

javascript - Facebook 身份验证 redirect_uri 不是绝对 URI

javascript - 如何将数组与一些文本一起自动保存在 js 文件中?

javascript 映射中的 javascript 数组切片功能

javascript - 如何使用 JQ 删除/重置外部 css 样式?

css - Bootstrap @media 最小宽度

javascript - 滚动到某个 div 时更改 Logo

javascript - 双击更新传单 map 上的位置标记

jquery - 事件 Bootstrap 按钮

jquery - 如何在 jQuery .animate 完成之前停止跟踪链接?

javascript - 背景图片在 Firefox 和 IE 中不显示