【问题标题】:AngularJS - draggable bootstrap modalAngularJS - 可拖动的引导模式
【发布时间】:2016-04-16 17:17:35
【问题描述】:

我正在为模态框使用 AngularJS 指令,以使它们可拖动。

This 是指令。

在演示中,您可以清楚地看到,如果您拖动它(尤其是左右拖动),它会比鼠标慢。我理解为什么会发生这种情况(JavaScript 计算相对于它的起始位置的位置,所以在我的 1920x1080 屏幕中,它在 x 轴上从 -1200px 到 1920px)。而且我知道有必要使用偏移量而不是位置,但经过多次尝试我未能做到这一点。

这是相关的 JavaScript 代码:

element.on('mousedown', function (event) {
  // Prevent default dragging of selected content
  event.preventDefault();
  startX = event.screenX - x;
  startY = event.screenY - y;
  $document.on('mousemove', function mousemove(event) {
      y = event.screenY - startY;
      x = event.screenX - startX;
      element.css({
         top: y + 'px',
         left: x + 'px'
      });
   });
});

我怎样才能让它依靠偏移量和鼠标一起移动而不慢?

【问题讨论】:

  • 你做错了什么,你正在移动“一切”。如果您注释掉“mouseup”事件,您可以使用 devtools 看到您正在移动模态窗口的容器。我猜你只想移动内部元素。

标签: javascript jquery angularjs twitter-bootstrap draggable


【解决方案1】:

试试这个:http://plnkr.co/edit/QxIdGj。我已经硬编码了 2 个值,你不应该这样做。您的“错误”是您将可拖动指令放在错误的元素中。我将可拖动指令添加到<div class="modal-content">,我认为这是您想要移动的元素。

我也把你的element.css({改成了

element.css({
        top: event.clientY - 30 + 'px',
        left: event.clientX - 10 + 'px'
      });

它使用的是鼠标的实际位置.clientX/Y,无需进一步计算。

【讨论】:

  • 您建议的拖动效果良好且可靠,但有一个问题:它忽略了拖动的位置。 (例如,如果我尝试从模态标题的中间拖动,它会“跳”到我的鼠标坐标,这很奇怪。)有没有办法解决这个问题?我试图将源代码中的内容(考虑到这一点)混合到您的解决方案中,但体验很糟糕。
猜你喜欢
  • 2015-03-12
  • 2012-09-16
  • 2017-12-17
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 2012-04-11
相关资源
最近更新 更多