0

我一直在使用 RaphealJS 创建一个矢量绘图工具,我已经完成了所有的绘图工作

当我调整浏览器窗口的大小并尝试绘制鼠标指针离开正在绘制的位置时,我的问题就出现了。

我在浏览器上使用鼠标移动事件并画线,就像这样

$(document).mousemove(function(e){
    if (IE) {
      var dh = $("#details").height();
      var dw = $("#details").width();
          xx = e.offsetX;
          yy = e.offsetY;
    } else {
       var offset = $("#workcanvas").offset();
       xx = e.pageX - offset.left;
       yy = e.pageY - offset.top;
    }
    if (lineObject != null) {
        lineObject.updateEnd(xx, yy);
    } else {
        lineObject = Line(xx, yy, xx, yy, MasterCanvas);
   }
});

我创建了我的画布和背景图像

var MasterCanvas = Raphael($("#workcanvas").attr("id"));

var MasterBGImage = MasterCanvas.image(imgPath, 0, 0, $("#workcanvas").width(),$("#workcanvas").height());

MasterCanvas.setViewBox(0, 0, $("#workcanvas").width(), $("#workcanvas").height(), true);

在我的窗口调整大小事件中,我尝试了这个

MasterCanvas.setSize($("#workcanvas").width(), $("#workcanvas").height());

现在我已经为此努力了几天,但无济于事。请注意:我可以绘图功能工作,只要窗口不调整大小,一切都很好,但是当页面调整大小时,绘图点关闭。

4

1 回答 1

0

以防万一其他人有这个问题,原来是 viewBox 问题,我不得不根据 viewBox 坐标而不是屏幕来计算鼠标位置,所以我的原始代码变为:

 $(document).mousemove(function(e){

    var uupos = MasterCanvas.canvas.createSVGPoint();
    uupos.x = e.clientX;
    uupos.y = e.clientY;
    var ctm = MasterCanvas.canvas.getScreenCTM();
    if (ctm = ctm.inverse())
    uupos = uupos.matrixTransform(ctm);
    x = uupos.x;
    y = uupos.y;

    if (lineObject != null) {
        lineObject.updateEnd(x, y);
    } else {
        lineObject = Line(x, y, x, y, MasterCanvas);
   }
});

编辑: 看起来这个解决方案只是 SVG,它在 IE8 中不起作用,这是我的要求 - 任何想法。

VML中是否有类似viewBox坐标的东西

于 2013-07-18T19:34:32.923 回答