如何在使用dojo / dnd / Moveable时禁用/停止拖动操作?

时间:2015-11-02 10:55:30

标签: javascript dojo

我使用dojo/dnd/Moveable在页面上拖动div,与下面的示例类似。

在用户拖动'move'时运行的事件div期间我需要应用一些逻辑(在我的实例中我需要检查一些鼠标坐标),如果逻辑无效我需要停止拖动div。

我尝试使用dojo.dnd.manager.stopDrag()但没有成功。

我想知道:

  • 如何停止/禁用拖动操作?

工作代码示例将不胜感激。感谢。

https://jsfiddle.net/mbrhb7nn/

    require(["dojo/dnd/Moveable", "dojo/dom", "dojo/on", "dojo/domReady!"],
function(Moveable, dom, on){
  on(dom.byId("doIt"), "click", function(){
    var dnd = new Moveable(dom.byId("dndOne"));
              dnd.on('Move', function (event) {
                // add some logic here and stop drag
            }.bind(this));

  });
});

1 个答案:

答案 0 :(得分:1)

我能够使用constrainedMoveable中的dojo/dnd/move来解决我的问题。

基本上可以设置一个"区域"在拖动允许的情况下,我使用了constrainedMoveable,因为我需要动态计算"区域"

实际上dojo/dnd/move提供了几个专门的Movables:

<强> constrainedMoveable

用于约束移动到动态计算的框。

注意:函数约束(必须被覆盖)并且必须返回具有l,t,w,h的以下属性的对象(left / top / width / height)。

<强> boxConstrainedMoveable

可用于约束移动到预定义的框。

<强> parentConstrainedMoveable

可用于通过节点父节点的边界来约束移动。

更多信息可以是found here

这里的工作示例: https://jsfiddle.net/mbrhb7nn/5/

require(["dojo/dnd/move", "dojo/dom", "dojo/on", "dojo/domReady!"],

function (move, dom, on) {
            var dnd = new move.constrainedMoveable(dom.byId("dndOne"));
            dnd.constraints = function (event) {
                // defines the area where dragging is allowed
                return {
                        l: 0,
                        t: 0,
                        w: 300,
                        h: 300
                    };
            }

});