如何基于鼠标移动事件在SVG中绘制矩形

时间:2013-03-23 05:26:42

标签: svg jquery-svg

我创建了SVG图表。我想在该图表中执行缩放。对于缩放我需要绘制矩形,即选择标记,以选择区域放大图表。如何在鼠标移动事件中绘制矩形。

1.触发事件触发。 (标记的起始位置)

2.开始拖动(触发鼠标移动事件) - >在那种情况下需要根据鼠标移动绘制矩形

  1. drop(触发鼠标按下事件) - >清除矩形
  2. 请参阅下面的截图。

    enter image description here

    如何根据鼠标移动绘制矩形?

    谢谢,

    希瓦

1 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案:

在SVG结束时(以这种方式将在所有元素上绘制)添加这样的矩形

<rect id="zoom_area" x=0 y=0 width=0 height=0 onmouseup="endDrag(evt)" style="fill: white; stroke:black; stroke-width:2px; opacity:0.5"/>

在您的网格上添加活动onmouseup="endDrag(evt)"onmousemove="moveMouse(evt)"

现在javascript:

var zoom_box = {};

function startDrag(evt){
    var offset = $("#bounds_grid").offset(); // Take the offset from the grid, change the ID as you need.
    evt.stopPropagation();
    zoom_box["start_x"] = evt.clientX-offset.left;
    zoom_box["start_y"] = evt.clientY-offset.top;
    zoom_box["boxing"] = true;
    $('#zoom_area').attr("x",zoom_box["start_x"]);
    $('#zoom_area').attr("y",zoom_box["start_y"]);
}

function endDrag(evt){
    var offset = $("#bounds_grid").offset();
    evt.stopPropagation();
    zoom_box["end_x"] = evt.clientX-offset.left;
    zoom_box["end_y"] = evt.clientY-offset.top;
    zoom_box["boxing"] = false;

    $('#zoom_area').attr("width",0);
    $('#zoom_area').attr("height",0);
}

function moveMouse(evt){
    var offset = $("#bounds_grid").offset();
    evt.stopPropagation();
    if(zoom_box["boxing"]){
        zoom_box["end_x"] = evt.clientX-offset.left;
        zoom_box["end_y"] = evt.clientY-offset.top;
        $('#zoom_area').attr("width",(zoom_box["end_x"]-zoom_box["start_x"]));
        $('#zoom_area').attr("height",(zoom_box["end_y"]-zoom_box["start_y"]));
    }
}

小心偏移:以这种方式从文档边缘开始偏移

相关问题