SegmentFault 技術周刊 Vol.20 - 用 Canvas 畫個星空
原文閱讀:SegmentFault 技術周刊 Vol.20 - 用 Canvas 畫個星空
SegmentFault 曾舉辦過一個社區官方的比賽「30 行 js 你能做出什麼?」,產生了好些有意思的代碼,大本鐘、瀑布粒子、模擬 loading 等各種精巧的實現。
這期周刊主題,便是受此啟發——你能用 Canvas 畫布做出什麼?有人用它來加工 HTML5 的特效,有人用它來製作城市地圖,有人用它來做頁面遊戲,還有人用它來畫日月江河。跟隨本期周刊,把屏幕當做畫板,來進入 Canvas 的世界!
<canvas id="introCanvas" width_="825" height="74">n here lets get to it!n</canvas>n
學習
1. 了解什麼是 Canvas
Canvas 的基本原理 // 囧囧
HTML5 中 Canvas 的使用總結 // 巔峰小詞典
基礎結構、坐標系、路徑、圖像及背景狀態、像素操作……先了解 canvas 的基本原理。然後通過第二篇,將它的各種操作一一詳細了解,知其然,且知其所以然。
繪圖:路徑、圖形(矩形/圓形/扇形)、文本、色彩、陰影
圖像處理方法:drawImage、getImageData / putImageData、toDataURL、save / restore
動畫:坐標系獲取
像素處理:蒙版、灰度、亮度、反轉等
2. 上手第一步:畫個圓
Canvas 入門-利用 Canvas 製作一個七巧板 // Allin
Canvas 入門-利用 Canvas 畫國旗
先來畫圖形,三角形、正方形組成七巧板,圓形、坐標系定位畫五角星,都是坐標計算。再來加特效,分分鐘學會讓圖形跑起來。看看這三個,雖然都是輪子,但造的不錯啊!
Canvas 動畫時鐘 // masqli
Canvas 仿芝麻信用分儀錶盤
加特技使用
3. 上手第二步:嘗試圖片處理
結合 JavaScript,來做一些圖片相關的基本的功能,比如
給圖片加水印:
Canvas 實現平鋪水印 // yuqy
裁剪圖片:
Canvas 生成和合併圖片 // 崔小拽
HTML5 本地裁剪圖片 // JellyBool
用 Canvas 實現 H5 移動端圖片裁剪 // bless_l
繪製圖片技巧:
利用 Canvas 將白色背景的 JPEG 圖片轉成透明的 PNG 圖片 // zwhu
Canvas 在高清屏下繪製圖片變模糊的解決方法 // KevinYue
繪製複雜的圖形:
利用 JavaScript 在 canvas 中畫一棵樹 // noiron
利用 JavaScript 生成一張隨機的城市地圖
4. 典型使用方式之動畫
關於 Canvas 動畫,這裡要重點推薦 @我仍舊在這裡 的專欄和獨立博客,作者的專欄入選了「SegmentFault 2016 年度專欄」,《每周一點 Canvas 動畫》系列寫了很多驚艷的動畫效果,推薦去訂閱。
每周一點 Canvas 動畫系列 - 序
用戶交互
速度與加速度(2)
文字粒子
角度反彈
差分函數的妙用
其他一些值得推薦的動畫實現:
使用 Canvas 實現交互性圓形馬賽克效果 // 外籍傑克
一個有趣的 Android 載入動畫 // 林海聽濤
Canvas 製作的下雨動畫 // tinybear
用 Canvas 畫一輪明月,夜空與流星 // ycwalker
5. 典型使用方式之開發個小遊戲吧!
Canvas 做網頁小遊戲也倍受推崇。同樣,先來看下該怎麼做,下面這兩篇文章精要簡明地講述 HTML5 遊戲的開發知識儲備。
譯丨HTML5 遊戲入門 // Fakefish
用 HTML5 開發一個小遊戲 // JellyBool
然後,重點推薦 @fwon 的《從零開始開發一款 H5 小遊戲》系列:五篇從基礎場景到整個遊戲的實現思路,讓你對 H5 遊戲開發有個宏觀的了解,知道怎麼入手。該系列文章對應遊戲代碼已開源:Sinuous game,趕快去 star 吧!
(一)重溫 Canvas 的基礎用法
(二)創造遊戲世界,啟動發條
(三)攻守陣營,賦予粒子新的生命
(四)撞擊吧粒子,炫酷技能的實現
(五)必要的包裝,遊戲規則和場景設計
最後,再來看看一個現成的方案,結合 Vue、ES6 快速簡單地做一個遊戲應用:
Vue+WebSocket+ES6+Canvas 製作【你畫我猜】小遊戲 // jrainlau
推薦庫
更多的 Canvas 高階使用方法,可以再去探索,社區還有很多優秀的資料,比如 @hightopo 和 @MonoLog 的 HTML5 拓撲、3D 實現,非常優美,@musiq1989 在微信小程序中使用它來繪製圖表,等等。
在最後,推薦給大家幾個相關的庫,增加使用時的便捷。
6. 附:相關的庫
一個不到 1kb 的 image placeholder 的 js 庫
開源造輪子:一個簡潔,高效,輕量級,酷炫的不要不要的 Canvas 粒子運動插件庫
SphinxJS——把字元串編碼成 png 圖片的超輕量級開源庫
(本期完)
# SegmentFault 技術周刊 #
「技術周刊」是社區特別推出的技術內容系列,一周一主題。周刊篩選的每篇內容,是作者的獨到見解,踩坑總結和經驗分享。
每周二更新,歡迎「關注」或者「訂閱」。大家也可以在評論處留言自己感興趣的主題,推薦主題相關的優秀文章。
推薦閱讀:
※極樂前端周報 ( 第三期 )
※前端編程該懂得的工具?
※HTML 頁面開頭doctype應該大寫還是小寫?
※Effective前端(3)用CSS畫一個三角形
※【前端入門系列】HTML5動畫與動效(之五)