jQuery拖动和绘制

And*_*rew 20 javascript jquery drag

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

如何在jQuery中实现拖放?

PPv*_*PvG 49

当你想到它时,这类事情的基础很简单:

  • 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();
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

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

  • 为了跟随任何人,我用不同方向拖动的解决方案更新了你的答案. (5认同)
  • 我需要一些像这样的快速html图像映射器(矩形只适合我的需要).如上所述包含双向拖动更改,并输出html图像映射源.http://jsbin.com/ireqix/91 (2认同)