使用fabricjs模拟自由绘图

Rad*_*lav 3 javascript html5-canvas fabricjs

我正在开发具有白板的应用程序。白板应该像 idroo.com 一样工作。一个用户正在绘制其他用户应该能够在他的浏览器上实时看到的内容。我使用fabricjs 作为画布包装器,它有我需要的一切。但我无法在画布上模拟自由绘图。我将鼠标位置和画笔选项发送到远程客户端,并尝试通过触发鼠标移动事件来呈现它们。但它不起作用。如果身体有类似的问题,你能帮忙吗?

canvasContainer.on('mousemove', function (e) {      
    var left = canvasContainer.offset().left;
    var top = canvasContainer.offset().top;
    var x = e.pageX - left;
    var y = e.pageY - top;         
    //Send data to remote browser by socket.io or signalr
    //I need to draw on remote browser by these x and y coordinates.
    updateCursor(_connections, x, y);
});
Run Code Online (Sandbox Code Playgroud)

jan*_*usz 6

你可以这样做:

var brush = new fabric.PencilBrush(canvas);
var points = [[10,10], [20,20], [25,70],[100,300]];

brush.onMouseDown({x:points[0][0], y:points[0][1]});
for(var i=1;i<points.length;i++) {
  brush.onMouseMove({x:points[i][0], y:points[i][1]});
}
Run Code Online (Sandbox Code Playgroud)

在此处查看 plunker:https ://plnkr.co/edit/V1c1xkB29tgB2ha99CRQ ? p = preview

您可以简化用于计算 x 和坐标的代码,并这样做:

var point = canvas.getPointer(e);
Run Code Online (Sandbox Code Playgroud)

  • 调用 Brush.onMouseUp(x,y) 也可能是有意义的。所以我想你应该只将事件类型(mousedown、mousemove、mouseup)连同 x 和 y 坐标发送到你的 socket.io 客户端,并从 `brush` 调用相应的方法。 (2认同)