2016-11-14 2 views
0

I Anwendung entwickle, die Whiteboard hat. Whiteboard sollte wie idroo.com funktionieren. Ein Benutzer zeichnet etwas, das ein anderer Benutzer in Echtzeit in seinem Browser sehen kann. Ich benutze Fabricjs als Canvas Wrapper und es hat alles was ich brauche. Aber ich kann kein freies Zeichnen auf Leinwand emulieren. Ich sende Mausposition und Pinseloptionen an den Remote-Client und versuche, sie zu rendern, indem ich Mausbewegungsereignisse abfange. Aber es funktioniert nicht. Wenn ein Körper simialiar Problem hat, können Sie bitte helfen?mit fabricjs freie Zeichnung emulieren

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); 
}); 
+1

Haben Sie versucht, das Ereignis von der Mausbewegung zu übergeben und dann canvas.trigger zu verwenden, um das Ereignis auszulösen o n im Zielbereich? – Ben

+0

ja. Ich versuchte es. Aber ich kann das Ereignisobjekt nicht zu json serialisieren, um es zu senden. – Radislav

+0

Was läuft bei der Serialisierung falsch? – Ben

Antwort

2

Sie können etwas tun:

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]}); 
} 

See Plunker hier: https://plnkr.co/edit/V1c1xkB29tgB2ha99CRQ?p=preview

Sie Ihren Code für die Berechnung der x und Koordinaten vereinfachen können und tun es wie folgt aus:

var point = canvas.getPointer(e); 
+0

Danke für Ihre Antwort! Ich werde versuchen, es dich wissen zu lassen. – Radislav

+2

Es wäre wahrscheinlich sinnvoll, brush.onMouseUp (x, y) ebenfalls aufzurufen. Ich denke, Sie sollten einfach die Art des Ereignisses (mousedown, mousemove, mouseup) zusammen mit x & y-Koordinaten an Ihre socket.io-Clients senden und entsprechende Methoden von 'brush' aufrufen. – janusz

+0

Ja, es funktioniert. Aber es beginnt nach 10-20 Sekunden des Zeichnens langsam zu werden. Und Monitorleistung zeigen CPU-Verbrauch ... Weißt du warum? – Radislav