javascript - jQuery 拖拽和绘制

标签 javascript jquery drag

我正在尝试构建一个 jQuery 插件,允许您拖动和绘制矩形(或带边框的 div),但我不知道该怎么做。我不知道目前有谁具备这种能力,所以我不知道在哪里寻找如何做到这一点的示例。

如何在 jQuery 中实现拖拽和绘图?

最佳答案

仔细想想,此类事情的基础知识非常简单:

  • 收听mousedown某个容器上的事件(可能是整个文档);
    • 使用event中的鼠标坐标将绝对定位的元素放置在鼠标的位置处。对象( e.pageXe.pageY );
    • 开始收听mousemove事件更改widthheight对象(基于鼠标坐标);
  • mouseup分离 mousemove 的事件事件监听器。

前面提到的绝对放置元素是,例如 <div>有边框和 background: transparent .

更新:这是一个示例:

$(function() {
    var $container = $('#container');
    var $selection = $('<div>').addClass('selection-box');

    $container.on('mousedown', function(e) {
        var click_y = e.pageY;
        var click_x = e.pageX;

        $selection.css({
          'top':    click_y,
          'left':   click_x,
          'width':  0,
          'height': 0
        });
        $selection.appendTo($container);

        $container.on('mousemove', function(e) {
            var move_x = e.pageX,
                move_y = e.pageY,
                width  = Math.abs(move_x - click_x),
                height = Math.abs(move_y - click_y),
                new_x, new_y;

            new_x = (move_x < click_x) ? (click_x - width) : click_x;
            new_y = (move_y < click_y) ? (click_y - height) : click_y;

            $selection.css({
              'width': width,
              'height': height,
              'top': new_y,
              'left': new_x
            });
        }).on('mouseup', function(e) {
            $container.off('mousemove');
            $selection.remove();
        });
    });
});

演示:http://jsbin.com/ireqix/226/

关于javascript - jQuery 拖拽和绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8884803/

相关文章:

javascript - JavaScript 库是否应该使用已弃用的注解?

javascript - 如果值等于 Jquery Unfocus 字段

javascript - 调整 html 元素的高度以填充固定页眉和页脚之间的剩余空间的正确方法是什么?

css - 如何停止在移动设备上滚动以及为什么翻译似乎停止了滚动?

delphi - 如何在TListView.OnColumnDragged中找到哪一列被拖动?

javascript - 如何在 iPhone 上拖动 'div' 元素

发送 header 后PHP重定向?

javascript - 如何通过使用 Javascript 更改 CSS 值来移动/定位 DIV 容器?

javascript - JQuery,为同一事件添加两个处理程序

asp.net-mvc-3 - 请参阅 Controller 中的验证摘要