時至今日前端canvas還是否有深入學習的必要?

現在手機和PC的性能越來越好,而且adobe animation、bodymovin和lottie等工具也漸漸進入大眾的視野,似乎一般情況下的需求都可以由設計完成。
徒手寫酷炫的canvas的技能似乎越來越邊緣化了,人寫與軟體生產最大區別是什麼?是性能問題嗎?按照目前硬體發展速度,性能還會是一個問題嗎?

canvas本身學習成本高,開發思維和一般意義前端不同,誠然尖端的遊戲引擎、渲染、數據可視化、webgl方面肯定是需要人才的,但是低端的可替代性,其陡峭的學習曲線,是否可以說明其生態的惡化?低端的人沒有實踐場景我覺得是很難走到高端的。
---
題主工作是金融方向,接觸過一些數據可視化的東西,剛好項目需要,所以滿心歡喜的去學canvas與svg等相關技術,但是真做需求發現自己寫出來的東西還不如ui用設計軟體做出來的,於是很迷茫,是不該選擇這個方向嗎?
---
前端小白,眼界短淺,望各位指點,謝謝!


為了工作去選擇學習地技術是不行的,因為這通常會導致你過快就業。過快就業有什麼問題呢?因為大多數前段崗位是不會給你額外學習的時間的,所以作為一個普通人,你一旦就業,你以後多半也就只會用這些東西了。那東西淘汰了怎麼辦?淘汰的時候你剛好交了房貸怎麼辦?大老闆開發了一個新機會但是需要的東西你不懂怎麼辦?

其實我也不是說這種」學習xxx有沒有必要「的問題不對,錯誤的是想過快就業。你先慢慢來,東西都學的差不多,接觸新語言新類庫已經不覺得困難了,再去就業,飯碗長期有保障。所以你只要覺得有意思就可以去學。既然題主做了前端/金融,還可以問這樣的問題。那麼現在的工作估計沒有什麼壓力,那就好好珍惜,隨便瞎幾把學。

說到Canvas,要是你以前弄過GDI、GDI+、DirectDraw、Direct2D、CoreGraphics、甚至是VCL的其中一個,你會覺得這東西需要學嗎?肯定不需要。


Canvas能做的,UI軟體是做不出來的啊。


而且,圖片的大小方面也是一個問題。


拿金融為例,常見的就是融資額,多數是一個圈來描述百分比。

最早有分成100個圖片然後不同的百分比展示不同的圖片的。

但是用代碼寫就不一樣了。


這種東西大概知道他是什麼,大概能做什麼事就行了,真正用到了去查下api,很容易掌握


2D 就是最基本的畫板功能,點線形字就那麼幾個方法,滿足不了直接操作點陣圖像素點,沒有再深的了;WebGL 就是照搬 OpenGL ES 那也不是 Canvas 的部分。

數據可視化也跟 Canvas 沒什麼關係,兩個看著差不多的圖表庫,其實現可能完全不同,這是程序員的事。

而 GL 學習可以,對底層圖形渲染的認知有所幫助,但實際用的話,通用平台的交椅已經給了 Vulkan,native 不如操作系統的私貨,web 還是期待 Three.js 之類的能進入標準比較好。


學習總歸是要學習本質才行,我以前有接觸過flash,通過flash學會了高級動畫編程的一些演算法,比如A*,高性能的碰撞檢測等,並且了解了下顯示列表的封裝思路,切換到canvas後能很好的自己封裝一套庫。語言,API總歸是要過時的,思想卻可以保留很久。所以canvas可以深入學,但要學習其本質。


這個是要看需求的吧,canvas 能寫出來的 ai 肯定是做不出來的,ai 可以製作隨機粒子效果嗎,ai 了可以和滑鼠、鍵盤互動嗎,


經常逛codepen看到用canvas寫的炫酷效果挺感興趣,最近就在學canvas,純屬個人愛好。


感覺如果脫離實際場景討論某個技術有點耍流氓,關於svg和canvas這兩個個人感覺深入學習意義一般,除非專門寫這方面的庫。


清楚其原理就可以了,如果有興趣就去多研究一下。

canvas本身還是不難的,即首先創建iframe,然後獲取2d上下文環境,接著就開始beginPath的樣式、路徑、填充,整體的步驟就是如此,也就是會遇到不同的需求去調用不同的api。


首先,canvas沒有什麼需要深入學習的。畫畫點線面,寫兩行字塗點顏色這些熟悉了css和requestAnimation()之後可能直接做DOM更快更方便,畢竟DOM的優化是不請自來的。

所以就帶來一個新的問題,題主說的「深入學習」可能更多的指的是時間上。。。這個才是需要努力解決的問題。增加經驗是一方面,能快速地學習並且出成果才是更容易把自己區分出來的關鍵吧。


推薦閱讀:

Gundam作品為什麼無法擴張新客群?
客觀來看《大聖歸來》和 2008 年夢工廠的《功夫熊貓》相比,哪個更好?好在哪裡?
想補JOJO的動畫,但各種年代各種OVA TV版繞不清楚了。。。想問JOJO的正確打開方式(╯3╰)?
《大聖歸來》 最讓你難忘的瞬間是什麼?

TAG:動畫 | 前端開發 | JavaScript | Canvas | AdobeAfterEffects |