检测画布上的变化

时间:2012-06-27 07:37:17

标签: jquery html5 node.js canvas drawing

我正在使用canvas和node.js创建一个小型绘图应用程序。 可以说有很多用户连接到我的应用程序 - 用户A,用户B等。

当用户A在画布上绘制任何内容时,我想让其他用户知道用户A通过在其他用户的画布上输出绘图来绘制内容。

我所获得的是在canvas元素上附加click事件。它的确有效,但问题是只有当用户只需点击一下即可完成绘图时,它才有效。我希望绘图在运行时与其他用户共享,如逐像素更改。是否有像.canvaschange()这样的画布的事件?

点击事件的代码是 -

$("#imageTemp").click(function(){
      var can = document.getElementById("imageView");
      var img = can.toDataURL("image/png");
      socket.emit('emit_draw', img, function (data){
        console.log('Emit Broadcast draw', data);
      });
});

2 个答案:

答案 0 :(得分:0)

您在调用实际绘图基元时是否没有发出绘图消息的原因?这是您要分享的绘图内容,而不是点击次数?你甚至可以根据相同类型的消息做自己的绘图(在本地监听相同的消息,只根据这些消息进行绘制)。

您可能希望做的另一件事是避免过多的网络流量;将绘图事件捕获到某种队列中,并且只有在收到最后一次添加到队列后至少1秒钟(或其他任何时间)发出(通过网络)消息。

答案 1 :(得分:0)

我想确认你使用了

在客户端

$("#imageTemp").click(function(){
  var can = document.getElementById("imageView");
  var img = can.toDataURL("image/png");
  socket.emit('emit_draw', img);

});

在服务器端

io.sockets.on('connection', function (socket) {
    socket.on('emit_draw',function(img){
         socketioId = socket.id;
         socket.broadcast.emit('drawed',socketioId,img);
    });

并在客户端保存每个用户的套接字ID,并包括

   socket.on('drawed',function(friendId,img){
         // handle your picture
    });