龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

用Web socket和Node.js实现HTML 5画布的实时绘图(1)(2)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
画到画布函数 由于画到画布需要建立、移动和关闭路径,我创建了一个短小的函数,用来连接到jQuery拖动开始事件和拖动事件。 #绘图函数 App.draw =(x,y,t

画到画布函数

由于画到画布需要建立、移动和关闭路径,我创建了一个短小的函数,用来连接到jQuery拖动开始事件和拖动事件。

  1. # 绘图函数  
  2. App.draw = (x,y,type) -> 
  3.     if type is "dragstart"  
  4.         App.ctx.beginPath()  
  5.         App.ctx.moveTo(x,y)  
  6.     else if type is "drag"  
  7.         App.ctx.lineTo(x,y)  
  8.         App.ctx.stroke()  
  9.     else  
  10.         App.ctx.closePath()  
  11. return  

设置客户端Web套接字

由于我们已将文件添加到http://localhost:4000/socket.io/socket.io.js,我们就能创建一个对象,以便通过该对象发送数据。只编写了几行代码,我们就创建了App.socket对象,并且绑定到名为“draw”的任何入站Web套接字事件。我们稍后对此会有介绍。

  1. # 套接字!  
  2. App.socket = io.connect('http://localhost:4000')  
  3.  
  4. App.socket.on 'draw', (data) -> 
  5.     App.draw(data.x,data.y,data.type)  

画布绘图事件

激动人心的一刻就出现在这里。现在我们想把几个事件绑定到我们的元素。其工作方式是,有人在画布上绘图时,我们立即使用draw()函数,画到当前画布上,并且使用socket.io的emit,通过Web套接字发送x和y坐标。稍后我们会看一下这个事件的服务器端部分,看看服务器如何将该数据发送到所有打开的窗口。

  1. ###  
  2.     绘图事件  
  3. ###  
  4. $('canvas').live 'drag dragstart dragend', (e) -> 
  5.     type = e.handleObj.type  
  6.     offset = $(this).offset()  
  7.  
  8.     ee.offsetX = e.layerX - offset.left  
  9.     ee.offsetY = e.layerY - offset.top  
  10.     x = e.offsetX  
  11.     y = e.offsetY  
  12.     App.draw(x,y,type)  
  13.     App.socket.emit('drawClick', { x : x, y : y, type : type})  
  14.     return 

回到服务器端

由于我们知道通过Web套接字发送x、y和事件类型,我们需要在服务器端进行一番处理。我们要做的就是,把该数据回过头来发送到浏览器打开的另外每个人。

我们更新后的server.coffee文件现在看来像这样。我们先等待连接事件,然后等待由浏览器发送的“drawClick”事件。发送完毕后,我们把数据发送到浏览器打开的另外每个人。我们之前编写的服务器端脚本然后就会绘制画布。

  1. io = require('socket.io').listen(4000)  
  2.  
  3. io.sockets.on 'connection', (socket) -> 
  4.     socket.on 'drawClick', (data) -> 
  5.         socket.broadcast.emit 'draw',{ x : data.x, y : data.y, type: data.type}  
  6.         return  
  7.     return 

你现在需要重启Web套接字服务器,因为我们已对它作了改动。按Control-c命令即可终止它,输入node server.js即可重启它。

开始绘图!

一旦你完全了解了这一切的工作原理,就可以在支持Web套接字和画布的任何Web浏览器(截至截稿时包括Chrome、Firefox、Safari、Opera和IE9)中打开你的index.html文件。访问http://caniuse.com/#search=canvas,即可获得更多的支持信息。

补充说明

由于这是一个非常基本的演示,存在几个局限性,不过再编写一点代码,就很容易克服。目前,画布只支持每次一个人绘图;如果两个或多个人同时绘图,画布就会被零星地绘制。另外,添加工具方面肯定也有很大的改进余地,比如缺少画笔、颜色、橡皮檫和PNG导出。

原文:http://wesbos.com/html5-canvas-websockets-nodejs/
 

精彩图集

赞助商链接