javascript - 这个新的重复拖放指令有什么问题?

标签 javascript html css angularjs angularjs-directive

我有这个 jsfiddle,它使用 angularjs 指令来拖放一个白色方 block 。

Fiddle 1

我添加了另一个绿色方 block 并复制了指令。不能再在第二个 jsfiddle 中拖放方 block 。代码有什么问题? Fiddle 2

我改变的地方是; 在 HTML 中

<div class="shapeX" ng-draggableX='dragOptions'></div>

在 CSS 中,

.shapeX
{
    position: absolute;
    width : 40px;
    height: 40px;
    background-color: green;
}

在javascript中(只需复制并粘贴原始指令并重命名),

.directive('ngDraggableX', function($document) {
  return {
    restrict: 'A',
    scope: {
      dragOptions: '=ngDraggable'
    },
    link: function(scope, elem, attr) {
      var startX, startY, x = 0, y = 0,
          start, stop, drag, container;

      var width  = elem[0].offsetWidth,
          height = elem[0].offsetHeight;

      // Obtain drag options
      if (scope.dragOptions) {
        start  = scope.dragOptions.start;
        drag   = scope.dragOptions.drag;
        stop   = scope.dragOptions.stop;
        var id = scope.dragOptions.container;
        if (id) {
            container = document.getElementById(id).getBoundingClientRect();
        }
      }

      // Bind mousedown event
      elem.on('mousedown', function(e) {
        e.preventDefault();
        startX = e.clientX - elem[0].offsetLeft;
        startY = e.clientY - elem[0].offsetTop;
        $document.on('mousemove', mousemove);
        $document.on('mouseup', mouseup);
        if (start) start(e);
      });

      // Handle drag event
      function mousemove(e) {
        y = e.clientY - startY;
        x = e.clientX - startX;
        setPosition();
        if (drag) drag(e);
      }

      // Unbind drag events
      function mouseup(e) {
        $document.unbind('mousemove', mousemove);
        $document.unbind('mouseup', mouseup);
        if (stop) stop(e);
      }

      // Move element, within container if provided
      function setPosition() {
        if (container) {
          if (x < container.left) {
            x = container.left;
          } else if (x > container.right - width) {
            x = container.right - width;
          }
          if (y < container.top) {
            y = container.top;
          } else if (y > container.bottom - height) {
            y = container.bottom - height;
          }
        }

        elem.css({
          top: y + 'px',
          left:  x + 'px'
        });
      }
    }
  }
})

最佳答案

只需修改以下内容:

<div class="shapeX" ng-draggableX='dragOptions'></div>

<div class="shapeX" ng-draggable-x='dragOptions'></div>

scope: {
  dragOptions: '=ngDraggable'
},

scope: {
  dragOptions: '=ngDraggableX'
},

关于javascript - 这个新的重复拖放指令有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078185/

相关文章:

javascript - fs.openSync 在将 stdout 写入文件时添加额外的换行符

html - Bootstrap 3 中的响应式嵌入不起作用

html - 如何将 "login"按钮右对齐?

html - -webkit-transition 在 HTML4 transitional 中工作正常但在 HTML5 中不行?

javascript - 如何知道 iframe 何时出现?

javascript - MSIE 为 Ajax 请求返回状态代码 1223

javascript - 不能修改 DOM 元素的类

鼠标悬停时的 jQuery 图像 PULSE 动画,淡入另一个图像

javascript - 使用 Jaxer 时定义对象

javascript - 如果另一个元素具有此元素,如何将 css 标签放入该元素中