【问题标题】:Use jQuery draggable and resizable to draw elements使用 jQuery 可拖动和调整大小来绘制元素
【发布时间】:2012-10-06 14:46:57
【问题描述】:

我试图弄清楚如何使用可拖动和可调整大小的 jQuery 库来绘制 div。我找到了this 这非常好,但我真的希望这个功能可以与上述库一起使用。更具体地说,我希望能够创建一个可拖动的元素并一次拖动(调整大小)它。这可能吗?

编辑:当“创建”事件以可拖动或可调整大小发生时,也许我需要做点什么?我需要以某种方式将鼠标放在可调整大小的角落上吗?在您实际抬起鼠标然后在调整大小角上按下并拖动之前,调整大小似乎不会打开。这是我现在拥有的代码:

 $('.container').live('mousedown', function(){
    $('.container').append('<div class="gen-box"></div>');
    $('.gen-box').resizable().draggable();
 });

【问题讨论】:

标签: javascript jquery-ui jquery-ui-draggable jquery-ui-resizable


【解决方案1】:

我会以不同的方式处理这个问题——我会使用 jQueryUI selectable 组件之类的东西,它已经提供了装箱方法。它有startstop 事件,它们暴露了鼠标坐标。在此基础上,您可以使用所需的鼠标坐标在stop 事件上创建一个 div,然后将 resizable 和 draggable 添加到该 div。

反正我就是这么干的。

您的另一个选择是完全按照您正在做的事情做,并尝试使用 jQuery trigger(),如下所示:

 $('.container').live('mousedown', function(){
    $('.container').append('<div class="gen-box"></div>');
    $('.gen-box').resizable().draggable();
    $('.gen-box').trigger('mousedown'); // This may activate the resize ability, but you may need to target the resize handle, instead of the full div.
 });

这似乎应该可行,但可能存在一些问题(我从 2008 年遇到了一个线程 here)。不过,这可能有助于您走上正确的道路。祝你好运。

【讨论】:

  • 我认为你是对的。 Selectable 看起来很有希望。我现在正在玩它,但我仍然无法理解:\
【解决方案2】:

好吧,我终于想通了。我根据@lunchmeat317 的建议使用了 selectable() 。我能够在可选事件期间捕获鼠标位置:“开始”和“停止”创建一个具有正确宽度、高度和位置的 div。这是jsfiddle

【讨论】:

  • 顺便说一句,使用此方法您需要注意鼠标拖动到的方向并添加额外的逻辑。在小提琴中,您可以向右或向左拖动鼠标,它将创建一个 div,但向上拖动将不起作用,因为它没有逻辑(尚未)。
【解决方案3】:

使用jquery ui library 可以轻松制作拖动和调整大小的 div。

你可以试试这个例子。下载最新的 JQuery 和 JQuery ui 库并调整示例中的源路径。要调整大小,您可以使用 resize 函数。

<!DOCTYPE html>
<html lang="en">

  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Title</title>

    <script type="text/javascript" src="/media/js/jquery-latest.js"></script>
    <script type="text/javascript" src="/media/js/jquery-ui-latest.js"></script>

    <script type="text/javascript">
      $(document).ready(function() {        
        $( '#test' ).draggable();
      });
    </script>
  </head>

  <body>

    <div id="test" style="width: 100px; height: 50px; background-color: red;" >
      <p>Drag me</p>
    </div>

  </body>

</html>

【讨论】:

  • 感谢 Jvd。然而,这不是我遇到的问题。我需要能够对这些“拖动创建”进行排序,而不是在文档准备好时显示它们。你知道怎么做吗?
  • 你想在页面启动时隐藏 div,并在某个事件上显示它吗?
  • 不,我想动态创建它,例如通过 append() 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 2020-06-12
相关资源
最近更新 更多