1. 程式人生 > >知名Html5 Canvas Javascript庫對比 (轉)

知名Html5 Canvas Javascript庫對比 (轉)

宣告:

轉載請保留。。

我一直在找一個Html5 canvas庫,可以讓我建立可互動的、帶動畫的UI介面。我的要求是:

  • 良好的文件,支援與維護,因為我想在以後的專案裡還能重用它
  • 可以輕鬆的創造複雜的圖形物件(我的工程比較複雜,可不是一個簡單的按鈕那樣的活兒),最好能支援分組和多層
  • 能幫我處理使用者互動
  • 支援觸控裝置
  • 提供用於作動態圖形的工具

我搜了一些適合的庫,想和你分享我的搜尋成果。在可用的庫的名單後面,我調查了這些庫:EaselJS,fabric.js,Paper.js,processing.js和Kinetic.js,希望能幫你做出你自己的選擇。

我找到的庫

這兒是一些迄今為止看起來還有人維護的Canvas庫:

這兒還有一些我沒有研究過的庫,因為他們沒有架在Github上,或者看起來沒人更新了:

在Github上的對比

關注 分支 問題
CAAT 336 42 17
EaselJS 1,440 203 90
fabric.js 1,059 101 38
gury 348 19 9
jCanvaScript 80 5 2
Kinetic.js 267 41 7
oCanvas 194 20 6
Paper.js 1,706 111 30
processing.js 1,276 206 N/A

最小體積對比

程式碼量 (KB)
CAAT 210
EaselJS 44
fabric.js 133
gury 11
Kinetic.js 53
oCanvas 18

不過jCanvaScript,Paper.js和processing.js在Github是沒有壓縮版

在Stackoverflow的比較

搜尋詞 標籤 # 被標記的問題 # 搜尋到的問題
CAAT N/A N/A 5
EaselJS easeljs 30 79
fabric.js fabricjs 43 78
jCanvaScript N/A N/A 6
Kinetic.js kineticjs 74 30
oCanvas N/A N/A 19
Paper.js paperjs 9 49
processing.js processing.js 117 289

gury庫在stackoverflow上沒找到,我用N/A標識了沒找到的。

對文件,教程和其他資源的研究

在選擇框架時,我更看重Github的比較。他能提供庫的開發狀態概覽以及正在用這個庫的社群。在我並不想變成某領域的專家時,我希望能依靠社群(解決問題)。

於是,我打算就文件,教程和其他資源,給出一個深入的評論。對比:EaselJSfabric.jsPaper.jsprocessing.js以及這個外來者:Kinetic.js,來做個選擇。

摘要

EaselJSfabric.jsPaper.jsprocessing.js可以看作是4個領頭者,他們有很明確的龐大使用者社群,也架設在Github上,文件完善,大量的引用(就是在SO上的問題,以及論壇),更好的是,根據SO上他們之前的問題,他們是有單元測試的。

Kinetic.js是個後來者,最近才上線Github,還有很多變數,但受到了kangax的(Fabric.js的作者)熱烈歡迎。

這4個庫都有Github地址,都基於MIT許可釋出。

EaselJS

這個庫是CreateJS 套件的一部分,是一個全功能的用來建立先進html5互動與動畫圖形庫。

特別的是,結合動畫庫(TweenJS),可以建立很複雜的動畫!如果你打算開發遊戲,你還可以用SoundJS庫和資源預載入庫(PreloadJS)搞定。

這個網站提供了一些漂亮的示例,原始碼可以和Github寶庫上找到。

這個庫看起來也能和其他庫協同工作,比如Box2d和TexturePacker.

內建對觸控裝置的支援

fabric.js

檢視官網發現,此庫貌似偏向建立“向量圖形編輯工具”。主要特色有:

  • 建立和操作(移動,縮放,旋轉…)向量圖形和文字物件
  • 匯入/匯出成SVG或反過來

總結起來就是“一個在canvas上的可互動物件模型”。

如果你的目的是建立複雜場景,動態物件,在我看來他不是正確選擇

Paper.js

這個庫是Scriptographer庫的一部分。他有個特長是其Paperscript語言,基於一個提供了對點和圖形精妙進行精妙數學操作的Javascript擴充套件——但是,他仍然沒有文件。

這個庫的強大在於,他在建立複雜向量物件和管理滑鼠互動上出類拔萃。然而,他沒有實現對移動裝置的支援,而且其動畫能力貌似被 onFrame() 這個方法限制了——每秒被呼叫60次,也允許你改變canvas的內容。

processing.js

這個庫的核心目標是建立視覺化互動

這個庫有個獨特的歷史——他是著名的Processing庫的一個介面。我說著名,不是因為我自己知道,而是因為他在多媒體藝術社群非常知名,用來進行互動式藝術創造。

請看這第一個示例,看起來此庫打算降低在canvas上建立互動式圖形動畫的學習曲線。他提供了易用的迴圈,和一個 draw() 方法,你可以簡單的建立你的視覺化互動。

我認為,因為其學習曲線低,對沒有開發能力的藝術家們是完美的,但並不是建立面向物件元件的最佳工具。

Kinetic.js

Kinetic.js本是這次比較的門外漢,因為在他的Github上看起來,他離最多人使用的那個還很遠。然而,如果搜尋”canvas library”的話,他的html5教程是排在第一位的,而且,他在SO上也有很多不錯的提問。

這個名字是個很好的線索,但這個庫在處理大量物件的時候蠻快的,因為使用了多canvas技術。

他提供了很好的文件講解和教程,包括系統的html5 canvas應用,詳細的Kinetic.js和Three.js文件。他也提供了些好用的小提示——不是針對這個庫的,有的是對於canvas。

結論

基於本篇評論,我認為我應該用EaselJS或Kinetic.js。Paper.js也不錯但是不支援觸控裝置,我敢肯定要整合這個功能並不複雜,但我更喜歡庫中本來就有的。

最後,我決定用Kinetic.js,因為:

  1. 我覺得示例程式碼不錯
  2. 作者本身寫了一個優秀的系列教程
  3. 文件和例子都很清晰易懂
  4. 我要的庫裡都有了(我並不覺得在我做到20%的時候卻需要引進另一個大庫比如TweenJS來解決個小問題會讓我高興)

請不吝分享你的評論,或者我沒提到的庫,謝謝。

—————————————————-

譯者的總結:

翻譯完了覺得這文章有點像Kinetic.js的軟廣告。不過,上面的所有庫功能都是非常強大的,日常應用毫無問題。Kinetic.js是綜合來講比較合理的一個——功能中等,體積中等。

個人覺得fabric.js最強大,體積也最大;Paper.js其次。

另外,在對比了國外的教程和我寫的教程後,不知道我寫的教程還有人看嗎?——雖然,我也是完全原創的,但我的技術可比不上外國作者,唉

Posted on