精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用Web socket和Node.js實現HTML 5畫布的實時繪圖

譯文
開發 前端
Web套接字(Web socket)和畫布(Canvas)是目前實施到瀏覽器中的兩項超酷的特性。本教程將簡要介紹這兩者是如何工作的,并且制作了基于Node.js和Web套接字的實時畫布。為了簡潔起見,我將使用CoffeeScript來編寫所有代碼。如果你青睞用傳統的JavaScript來編寫,只要看一下相應的.js文件。出于同樣的原因,我也棄用了CSS。

Web套接字(Web socket)和畫布(Canvas)是目前實施到瀏覽器中的兩項超酷的特性。本教程將簡要介紹這兩者是如何工作的,并且制作了基于Node.js和Web套接字的實時畫布。為了簡潔起見,我將使用CoffeeScript來編寫所有代碼。如果你青睞用傳統的JavaScript來編寫,只要看一下相應的.js文件。出于同樣的原因,我也棄用了CSS。

從GitHub下載代碼(https://github.com/wesbos/websocket-canvas-draw)

介紹詳細內容的屏幕播放速成教程

http://www.youtube.com/watch?feature=player_embedded&v=n7wQsLu_k00

跨設備/瀏覽器的兼容性

http://www.youtube.com/watch?v=oI9AahO9vDY&feature=player_embedded

服務器端

我們要做的第一件事就是建立一臺Web套接字服務器。為此,我們要用到Node.js和模塊Socket.io。Socket.io使得搭建和運行Web套接字服務器的任務超容易完成。它甚至為不支持原生Web套接字的瀏覽器提供了可退回到Flash的功能(Flash fallback)。在本教程中,我們將只使用支持元素的瀏覽器。

如果你之前還沒有安裝Socket.io,就要確保已安裝,為此需要往你的終端中輸入npm install socket.io。

現在,我們不妨建立Web套接字服務器。創建server.coffee文件,采用下列配置。

io = require('socket.io').listen(4000)

io.sockets.on 'connection', (socket) ->

編譯你的coffeescript,重新回到你的終端,輸入node server.js.。現在你已有了一臺通過端口4000運行的Web套接字服務器。

如果你進入到本地主機:4000,會看到下列結果:

客戶端

首先,我們不妨立馬讓index.html文件搭建和運行起來。除了一些基本的標記外,我還加入了jQuery、現在從我們這個服務器提供的Socket.io JS文件、面向拖動事件的jQuery插件以及我們自己的scripts.js文件。

  1. <!DOCTYPE HTML> 
  2. <html> 
  3. <head> 
  4.     <meta charset="UTF-8"> 
  5.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
  6.     <script type="text/javascript" src="js/jquery.event.drag-2.0.js"></script> 
  7.     <script src="http://localhost:4000/socket.io/socket.io.js"></script> 
  8.     <script type="text/javascript" src="scripts.js"></script> 
  9.     <link rel="stylesheet" href="style.css" /> 
  10.  
  11.     <title>HTML5 Canvas + Node.JS Socket.io</title> 
  12. </head> 
  13. <body> 
  14.     <article><!—我們的畫布將在此插入--></article> 
  15.  
  16.     <!-- Scripts required --> 
  17.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
  18.     <script type="text/javascript" src="js/jquery.event.drag-2.0.js"></script> 
  19.     <script src="http://localhost:4000/socket.io/socket.io.js"></script> 
  20.     <script type="text/javascript" src="scripts.js"></script> 
  21. </body> 

由于我們的服務器已搭建和運行起來,我們可以編寫用來畫到畫布的一些代碼。創建一個新文件,名為scripts.coffee。下面的所有代碼都在App.init()方法里面執行,一旦jQuery文檔準備就緒,我們就觸發該方法。

創建我們的Canvas元素

#構建我們的應用程序,它有自己的命名空間

  1. App = {}  
  2.  
  3. ###  
  4.     初始化  
  5. ###  
  6. App.init = -> 
  7.     App.canvas = document.createElement 'canvas' #創建<canvas>元素  
  8.     App.canvas.height = 400 
  9.     App.canvas.width = 800  #加大尺寸  
  10.     document.getElementsByTagName('article')[0].appendChild(App.canvas) #把它附加到DOM中  
  11.  
  12.     AppApp.ctx = App.canvas.getContext("2d") # 存儲上下文   
  13.  
  14.     # 為我們的線條畫設置一些參數  
  15.     App.ctx.fillStyle = "solid" 
  16.     App.ctx.strokeStyle = "#bada55" 
  17.     App.ctx.lineWidth = 5 
  18.     App.ctx.lineCap = "round" 
  19.  
  20.     # 繪圖函數  
  21.     App.draw = (x,y,type) -> 
  22.         if type is "dragstart"  
  23.             App.ctx.beginPath()  
  24.             App.ctx.moveTo(x,y)  
  25.         else if type is "drag"  
  26.             App.ctx.lineTo(x,y)  
  27.             App.ctx.stroke()  
  28.         else  
  29.             App.ctx.closePath()  
  30.     return  

#p#

畫到畫布函數

由于畫到畫布需要建立、移動和關閉路徑,我創建了一個短小的函數,用來連接到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/
 

【編輯推薦】

  1. 走近Node.js的異步代碼設計
  2. 使用Node.js開發多人玩的HTML 5游戲
  3. Node.js提速指南
  4. Node.js專區
  5. 使用JavaScript和Canvas寫一個游戲框架
責任編輯:陳貽新 來源: 51CTO
相關推薦

2013-03-28 14:54:36

2014-04-01 11:02:00

Node.jsWeb Socket聊天程序

2011-12-16 10:08:36

Node.js

2013-08-15 09:14:55

2020-05-29 15:33:28

Node.js框架JavaScript

2020-10-26 08:34:13

Node.jsCORS前端

2019-08-29 10:58:02

Web 開發框架

2014-07-11 14:16:15

AbsurdJSExpress

2014-10-30 10:28:55

Node.js

2014-02-11 11:21:00

html5工具

2011-05-24 15:09:11

NodeJS

2012-02-02 15:14:29

Node.js

2012-03-07 14:32:41

Node.js

2021-12-13 11:21:46

NodePython開發

2023-11-24 14:54:03

Node.jsElectronAddon

2015-07-15 12:53:05

Node.jsSocket.io遠程控制

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2021-09-10 06:50:03

Node.jsSocket端口

2019-07-09 14:50:15

Node.js前端工具
點贊
收藏

51CTO技術棧公眾號

久久综合国产精品| 日本在线免费观看| 二区在线播放| 国产精品一区二区人人爽| 99久久亚洲精品| 欧美日韩精品一区二区在线播放| 在线无限看免费粉色视频| 国产精品乱码久久久| 亚洲手机在线| 视频在线观看一区二区| 精品久久久在线观看| 国产精品18毛片一区二区| 国产精品suv一区| 国产精品久久久久无码av| 亚洲国产成人久久| 中日韩av在线播放| 成人免费图片免费观看| 亚洲国产精品二十页| 国产va免费精品高清在线| 中文字幕网站在线观看| 亚洲精品777| 亚洲高清视频在线| 一本二本三本亚洲码| 撸视在线观看免费视频| 日本va欧美va精品发布| 久久久久久中文字幕| 国产精品99久久久久久成人| 国产三级在线| 国产乱子轮精品视频| 91精品国产高清自在线| 免费看一级一片| 99热国内精品| 中文字幕日韩av电影| 精品久久久久久无码人妻| 国产亚av手机在线观看| 中文字幕第一区综合| 国产传媒一区| 成人av免费播放| 麻豆高清免费国产一区| 欧美重口另类videos人妖| 久久国产精品波多野结衣| 精品久久电影| 亚洲欧美色婷婷| 亚洲最大视频网| 在线精品国产亚洲| 日韩午夜电影在线观看| 欧美日韩一区二区三区69堂| 男人的天堂免费在线视频| 亚洲大片免费看| 国产一线二线三线女| 国产写真视频在线观看| 综合色中文字幕| 偷拍盗摄高潮叫床对白清晰| 老司机99精品99| 欧美激情一区二区三区| 99re在线| 成人午夜免费在线观看| 国产一区二区不卡在线| 97超碰人人模人人爽人人看| wwwav在线播放| 国产成人日日夜夜| 亚洲a在线播放| 在线中文字幕一区| 天堂av免费看| 国产黄色在线观看| 亚洲激情图片qvod| 大西瓜av在线| 午夜影院在线播放| 欧美日韩视频在线| 日韩免费高清在线| 成人免费无遮挡| 欧美色区777第一页| 国内av一区二区| 2020最新国产精品| 日韩av一区二区在线观看| 亚洲黄色在线网站| 精品精品久久| 欧美人与性动交a欧美精品| 久久亚洲国产成人精品性色| 中文精品视频| 国产精品网站大全| 日本妇乱大交xxxxx| 国产裸体歌舞团一区二区| 91福利视频导航| 亚洲av成人无码久久精品老人 | 一本色道久久综合无码人妻| 久久国产生活片100| 97se亚洲综合在线| 国产精品四虎| 亚洲综合精品久久| 婷婷五月综合缴情在线视频| 456成人影院在线观看| 91精品国产欧美一区二区| 国产成人av片| 俺要去色综合狠狠| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 婷婷无套内射影院| 成人在线免费电影网站| 亚洲精品一区二区三区蜜桃下载| 少妇av片在线观看| 91视频综合| 久久久久日韩精品久久久男男| 亚洲av无码乱码国产精品fc2| 国产高清成人在线| 日韩av电影免费在线观看| 高h视频在线| 亚洲在线视频网站| 久久这里只精品| 日韩在线麻豆| 欧美高清在线观看| 亚洲系列第一页| 久久久综合网站| 成年人网站国产| 免费成人高清在线视频| 日韩成人中文字幕| 好吊色视频在线观看| 免费久久精品视频| 蜜桃视频在线观看91| 91看片在线观看| 欧美日韩国产一区在线| 亚洲午夜激情影院| 精品一区二区三区的国产在线观看| 欧美高清视频在线播放| 国产精品高潮呻吟AV无码| 久久亚洲精精品中文字幕早川悠里 | 成人在线国产| 日本高清不卡在线| 精品人妻伦一区二区三区久久| 欧美激情综合在线| 无码人妻丰满熟妇区96| 我要色综合中文字幕| 久久精品电影网站| 最新国产中文字幕| 久久精品欧美一区二区三区不卡| 一区二区传媒有限公司| 深夜激情久久| 伦理中文字幕亚洲| 一区二区三区亚洲视频| 国产精品久99| 538任你躁在线精品免费| 国产探花在线精品一区二区| 欧美专区在线视频| 日本福利片高清在线观看| 欧美日韩精品在线播放| 99久久99精品| 色综合五月天| 国产精品成人aaaaa网站| 风间由美一区| 精品视频一区二区不卡| 免费看黄色的视频| 日韩av一级电影| 亚洲国产精品一区在线观看不卡| www.久久.com| 日韩视频一区在线| 91亚洲欧美激情| 亚洲伦理在线精品| 亚洲成年人在线观看| 中文字幕亚洲综合久久五月天色无吗'' | 亚洲人成伊人成综合网久久久| 亚洲 欧美 日韩 在线| 东方aⅴ免费观看久久av| 男女日批视频在线观看| 日韩中文字幕| 97精品国产91久久久久久| 国产精品无码专区av免费播放| 亚洲欧美电影院| 国产黑丝在线观看| 久久久久免费| 超碰免费在线公开| 一区视频网站| 日韩av成人在线观看| 无遮挡动作视频在线观看免费入口 | 欧美肥臀大乳一区二区免费视频| 日本美女一级视频| 欧美性猛交xxxx黑人猛交| 在线观看福利片| 毛片av一区二区| 欧美性猛交xxxx乱大交蜜桃| 国产精品一区二区三区在线观| 日韩精品视频免费看| 国产jizzjizz一区二区| 丰满少妇久久久| 国产乱人伦丫前精品视频| 欧洲成人免费aa| 69久久精品| 精品美女被调教视频大全网站| 久久国产精品免费看| 国产精品女主播av| 91人妻一区二区三区| 亚洲欧美成人综合| 青春草在线视频免费观看| 日韩三级不卡| 日韩av色在线| 91麻豆一二三四在线| 精品视频—区二区三区免费| 欧美一级淫片免费视频黄| 国产欧美一区二区三区在线看蜜臀| 不用播放器的免费av| 99成人在线| 欧美h视频在线观看| 色婷婷狠狠五月综合天色拍 | 视色,视色影院,视色影库,视色网| www.国产精品一区| 国产91九色视频| 色婷婷av在线| 日韩精品视频免费| 国产日韩在线观看一区| 午夜精品在线看| 欧美黑人性猛交xxx| 国产欧美日韩精品在线| 精品久久久久久无码人妻| 久久精品av麻豆的观看方式| 久久综合色视频| 日韩欧美综合| 精品一区日韩成人| 亚洲在线资源| 国产精品第七十二页| 国产在线xxx| 九九精品视频在线| 天堂а√在线资源在线| 亚洲天堂第二页| 日本黄色不卡视频| 日韩欧美国产麻豆| 97人妻精品一区二区三区| 在线免费观看日本一区| 亚欧洲精品在线视频| 亚洲精品老司机| 日韩人妻一区二区三区| 成人精品一区二区三区中文字幕| 一级网站在线观看| 视频一区视频二区中文字幕| 国产一区二区在线视频播放| 亚洲国产精品第一区二区三区| 蜜桃网站在线观看| 91久久久精品国产| 中文字幕中文字幕99 | 国产一区二区三区欧美| 手机在线不卡av| 亚洲成人黄色网址| 黄色www视频| 精品国产凹凸成av人导航| www.色亚洲| 欧美大片日本大片免费观看| 国产精品国产一区二区三区四区| 91精品1区2区| 亚洲精品国产精品乱码视色| 欧美日韩中文另类| 97人妻一区二区精品免费视频| 337p亚洲精品色噜噜噜| 国产精品一级视频| 欧美一级黄色大片| 亚洲精品911| 亚洲国产日韩欧美在线图片| 四虎在线视频| 亚洲老司机av| 北岛玲一区二区三区| 在线视频日韩精品| 嫩草香蕉在线91一二三区| 欧美成在线视频| 97超碰在线公开在线看免费| 久久久久久久999精品视频| 久草在线视频资源| 欧美成人免费播放| 八戒八戒神马在线电影| 国内精品久久久久影院优| 91网在线播放| 欧美—级高清免费播放| 多野结衣av一区| 国产精品成人免费视频| 亚洲伦理网站| 国产日韩久久| 精品国产精品国产偷麻豆| 日韩第一页在线观看| 亚洲青涩在线| 成年网站在线免费观看| 蜜臀久久99精品久久久画质超高清| 中文字幕55页| 91丨九色丨蝌蚪富婆spa| av永久免费观看| 一区二区三区精品在线| 日本中文字幕久久| 欧美精选午夜久久久乱码6080| 国产熟女一区二区丰满| 亚洲精品456在线播放狼人| av在线资源网| 九九视频这里只有精品| 成人欧美magnet| 国产精品中文字幕久久久| 911亚洲精品| 日韩精品一区二区三区丰满| 欧美在线影院| 国内自拍中文字幕| 久久在线91| 国偷自产av一区二区三区麻豆| 久久久国产一区二区三区四区小说 | 国产一区二区三区四区五区| 男人c女人视频| 亚洲专区欧美专区| 欧美污在线观看| 99精品欧美一区二区蜜桃免费| 国产精品96久久久久久| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 亚洲日本va午夜在线影院| 黄色激情视频在线观看| 制服丝袜亚洲色图| 天天操天天干天天干| 日韩一区二区三区国产| 亚洲风情在线资源| 亚洲精品欧美一区二区三区| 欧美色网址大全| 青青草成人免费在线视频| 免费不卡在线视频| 欧美高清性xxxx| 一区二区三区高清| 国产孕妇孕交大片孕| 国产亚洲视频中文字幕视频| 国产极品在线观看| 7777奇米亚洲综合久久| 精品国产aⅴ| 99视频在线免费播放| 国产成人高清视频| 国产肥白大熟妇bbbb视频| 偷拍日韩校园综合在线| 超碰免费在线97| 日韩视频免费观看| 国产成人午夜性a一级毛片| 欧美成人一区二区在线| 欧美激情偷拍| 天天干天天av| 国产精品免费久久久久| 波多野结衣视频免费观看| 亚洲国产免费av| av中文在线资源| 国产精品国模大尺度私拍| 欧美日本亚洲韩国国产| 91亚洲一区二区| 国产精品精品国产色婷婷| 在线视频 中文字幕| 色婷婷av一区二区三区久久| 男女在线观看视频| 亚洲一区亚洲二区| 午夜精品av| 国产又黄又猛的视频| 国产精品萝li| 国产精品人人爽| 久久在线精品视频| 另类一区二区| 色女人综合av| 久久成人18免费观看| 日韩影院一区二区| 日韩视频在线观看一区二区| 啦啦啦中文在线观看日本| 国产精品久久亚洲7777| 一本色道久久综合亚洲精品不卡| 91人妻一区二区三区| 亚洲国产精品一区二区www在线| 日本精品一二区| 日本人成精品视频在线| 精品久久视频| 波多结衣在线观看| 国产精品国产成人国产三级| 激情网站在线观看| 日韩在线视频导航| 青青久久精品| 国风产精品一区二区| 成人一级片网址| 青青青国产在线| 国产亚洲欧美一区| 成人亚洲欧美| 在线免费一区| 不卡一区二区在线| 日本va欧美va国产激情| 亚洲图片在区色| 精品国产一区二| 国产特级淫片高清视频| 亚洲国产成人私人影院tom| 国产三级自拍视频| 午夜精品久久久久久久99黑人| 激情亚洲另类图片区小说区| 欧美污视频网站| 亚洲天堂网中文字| 亚洲欧洲国产综合| 日本不卡免费高清视频| 成人激情电影在线| 日本少妇xxxx软件| 天天影视网天天综合色在线播放| 在线视频二区| 99精品国产一区二区| 在线亚洲自拍| 美女福利视频在线观看| 亚洲欧洲午夜一线一品| 电影一区中文字幕| 亚洲中文字幕无码av永久| 中文字幕在线一区免费| 香蕉av一区二区三区| 91中文字幕一区| 亚洲手机在线| 国产激情无码一区二区三区| 亚洲精品自产拍| 爱情电影网av一区二区|