我一直在使用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());
现在我已经在几天内打败了我的头,无济于事。请注意:我可以使用绘图功能,只要窗口没有调整大小,每个东西都很棒,但是当页面调整大小时,绘图点就会关闭。
答案 0 :(得分: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坐标的内容