令人激動的新興 Web 技術:WebGL和SVG

2020-12-05 IT168

        【IT168 技術】Bruce Lowson 是 Opera 開放 web 標準的撰寫人員之一,一些沒有包含在 HTML5 之內的瀏覽器技術十分奇妙,包括 WebGL 和 SVG,作者希望通過本文與共同愛好者們分享。

  最近一位 HTML5 專家 Rich Clark(作者的好朋友)為大家做了一個 HTML5 APIs 的簡介,在文章中為大家指向了一個令人迷惑的網頁(web 平臺:瀏覽器技術 http://platform.html5.org/),其中包含兩個很長的專欄和小正文並提及到一些讓人感到迷茫的技術,例如「window.crypto.getRandomValues」和「DOM Mutation observer」。

  別擔心,咱們不去管那些啦,因為有些還遠遠沒有完成呢,在瀏覽器中見到它們還要等一陣子。然而,其它已經在瀏覽器中,或者距離您很近,或者馬上就要出現。人們可能將稱之為「HTML5」,儘管它們並不是。其實,它們都屬於令人激動的新興 Web 技術(New Exciting Web Technology),值得每個開發者關注。

  WebGL

  WebGL 是一種基於 Web 的 Graphic 庫,由非盈利組織 Khronos 運營,目前結合 HTML5元素廣泛應用在 3D 圖形開發中。

  學習 WebGL 比較困難,因為它是底層開發——它運行在 GPU 上面,而且它實際上是一個 OpenGL 的 JavaScript port,是一種遊戲開發者使用的已經長期建立的 API 集。WebGL 的主要受眾是哪些已經擁有豐富 OpenGL 經驗的遊戲開發者,他們可以通過 WebGL 為 web 平臺編寫遊戲。

  好在有很多資源可以幫助您學習 WebGL,這些資源不僅僅是關於遊戲開發的,還有很多奇幻的圖形、視覺和音樂視頻等方面。作者個人比較推薦的是:

  Introduction to WebGL。http://dev.opera.com/articles/view/an-introduction-to-webgl/作者 Luz Caballero,簡介可以獲得的各種庫。

  Raw WebGL 101。http://dev.opera.com/articles/view/raw-webgl-part1-getting-started/適合那些不使用庫的用戶。

  Learning WebGL。http://learningwebgl.com/一個非常好的引導網站。

  WebGL 101。http://www.youtube.com/watch?v=me3BviH3nZc 一個由 Erik Moller 製作的介紹視頻(2.5小時)。

  See Emberwind。http://operasoftware.github.com/Emberwind/一個由 Erik Moller 做的 WebGL 遊戲 port,您可以深入 Github 或看代碼。

  WebGL 目前在所有桌面瀏覽器(發布版和開發頻道)中都支持,除了 IE10(微軟表示不支持)。對於移動產品來說,已經在 Opera Mobile 12 中發布了,最終會出現在 Android,BlackBerry Playbook 2.0,Nokia N900,SonyEricsson Xpertia Android Phones 等以及 Firefox 移動瀏覽器中。

  SVG

  SVG(Scalable Vector Graphics)已經在 Opera,Firefox,Chrome 中存在多年了,但是直到 IE9 開始支持它之後才漸漸變得主流一些它在 HTML5的光環下顯得有點暗淡,儘管 SVG 和 HTML5是面向不用應用的不同工具。

  Canvas2D 可以迅速 paint 圖形到屏幕上面,這一點很犀利。但是其全部功能就是 paint 了,沒有內存來做那些(位置,頂層或其他)其他功能。如果您需要那種 book-keeping 工作,就只能自己用 JavaScript 實現,因為 Canvas2D 不會把 DOM 保存到內存中,也正因為如此 Canvas2D 速度快,十分適合第一人稱射擊類應用。

  與 Canvas2D 不同,SVG 在您需要保存 DOM 的時候就給力了。使用 JavaScript,所有的 Objects 都可以移動並且與動畫無關。您可以試試 Daniel Davis 做的復古類 SVG 遊戲 Inbox Attack(http://people.opera.com/danield/svg/inbox-attack.svg)來體驗一下,並且看看原始碼來了解如何完成動畫效果。

  因為 shape 和 path 是用 Markup 來描述的,所以他們可以用 CSS 來定型。與不同,text 在 SVG 中保持 text 格式並且更加的靈活,更加可擴展,更加易於訪問。在 Canvas 中,text 變成了像素,就像 Photoshop 中的圖形 text。

  SVG 最強大的特性是它基於矢量,這樣您的插圖,圖形和 UI 圖標等都是矢量圖了,這樣無論是在 50 英寸的電視屏還是手機屏幕桌面上,看上去感覺都是一樣的清晰。在當今這樣一個 web 應用無處不在的時代,SVG 圖形甚至可以包括媒體查詢(http://my.opera.com/ODIN/blog/2009/10/12/how-media-queries-allow-you-to-optimize-svg-icons-for-several-sizes),可以是響應式的,可以根據不同的目標設備做尺寸的調整。

  綜上所述,在最新的桌面瀏覽器中 SVG 已經能被廣泛支持了。在移動產品方面的支持總體上來說也很好,以及預期在 Android 3.0 版本之前原生瀏覽器也會支持它了。

  Daniel Davis 有一些 SVG 介紹性的資源(http://my.opera.com/tagawa/blog/learning-svg),作者個人也推薦一本免費的電子書:Learn SVG(http://www.learnsvg.com/book-learnsvg/),您也可以看看《SVG or Canvas?Choosing Between the Two》(http://dev.opera.com/articles/view/svg-or-canvas-choosing-between-the-two/)來了解二者的區別。

  getUserMedia

  不像那些被錯誤地稱為 HTML5 的 API,getUserMeida(在下文中簡寫為 gUM)有個相對正當的理由:起初它是 HTML5元素,之後它改名了然後離開了 W3C WebRTC 規範集合。

  gUM 允許訪問用戶的攝像頭和麥克風,本來是在 WebRTC 規範中在瀏覽器中進行 P2P 視頻會議的,當 gUM 擁有了其他的用途,就離開了 WebRTC。

  攝像頭的訪問最終在 Opera12 安卓版,Opera 桌面實驗室和 Google Chrome Canary 裡面實現了,不過 Opera 和 Chrome 都還沒有實現麥克風的接入。

  W3C 規範依然在用,所以 Opera 和 Webkit 有不同的語法規範,這樣的麻煩被一個叫做 The gUM Shield(https://gist.github.com/f2ac64ed7fc467ccdfe3)的小 JavaScript 片段搞定了。如果您想更深入地了解這方面請看作者的另一篇文章:It’s Curtains for Marital Strife Thanks to getUserMedia(http://html5doctor.com/getusermedia/)

  當視頻從設備開始流傳輸的時候,源數據可以被做成變成了元素,如果需要的話還可以被定為到屏幕外面,然後拷貝到裡面進行所需要的操作。Paul Neave 寫的《HTML5 變成玩具!》(http://neave.com/webcam/html5/)為了方便操作把流媒體數據拷貝到 WebGL 中。作者在 .net 雜誌的 226 話有採訪他的報導(http://www.netmagazine.com/shop/magazines/april-2012-226)。

  如果想把 web app 的功能做得像 native app,gUM 需要做很多的工作。試了一下 Neaver 的 gum 和 WebGL 在 Opera Mobile 12 上面的 demo,感覺和平臺獨有的 app 一樣富有響應式並且很時髦。當在瀏覽器產品中其功能被廣泛應用的時候,作者語言會有很多基於 web 的 QR 代碼閱讀者以及很多增強現實的應用。

  File APIs

  W3C File APIs 允許 JavaScript 訪問本地文件,其中最常用的 API 是 FileReader,可以從 Opera,FireFox,IE10平臺等的預覽版看到(不包括 Safari)。

  這一份 W3C 規範「為了在 web 應用中提供 API 來代表文件對象,以及編程選擇和訪問數據」。例如:你可以上傳文件到瀏覽器中,並本地查找相關信息(例如文件名,尺寸,類型)而不需要到伺服器端。您也可以打開文件,操作內容,這樣可以加強基於瀏覽器的應用的交互性,用起來更像是本地應用。

  另一個常用的用途是使傳統的圖像上傳兌換狂更具有 Web2.0 特色:通過允許在瀏覽器內部的 Drag and Drop,而不是本地文件系統中改變。

  您可以通過使用一個普通的開始,然後循序漸進地提高。HTML5 Drag&Drop 支持特徵檢測,如果存在的話就使用

替換

,那就是您的 drag 圖像目標了。當圖像被 drag 到目標的時候,使用 File Reader API 來顯示一個指甲蓋大小的圖像。您可以看一下 Remy Sharp 的 demo(http://html5demos.com/file-api)。

 

  還有很多寫文件和操作文件系統的規範,不過這些對目前的跨瀏覽器應用來說還不太夠:

  W3C 文件 API:(http://dev.opera.com/articles/view/the-w3c-file-api/)非常基礎的介紹。

  開發文件系統 API:(http://www.html5rocks.com/en/tutorials/file/filesystem/)HTML5 Rocks 文章,(僅限 Chrome)。

  Feature-detecting, progressive enhancement and upgrade messages(特徵檢測,漸進式增強和消息通知)

  誠然,在沒有那些奇幻的 API 的時候,大家總是試圖使用漸進式增強和 HTML 語義的方法讓網站照常工作。然而有時候卻不能這樣,例如 Paul Neaver 的《HTML5變成玩具》中,如果 gUM 和 WebGL 現在不存在的話,其網站不能有什麼補救措施了,整個網站的核心都沒了。

  在這樣的情況下有兩種典型的慣例:要麼是顯示一條消息說「你的瀏覽器太垃圾了,塞油哪啦」或者說「你必須用 Chrome6/Firefox 4/Opera10等[插入能支持你應用的瀏覽器]才能訪問」。第一種方法又沒用又粗魯,沒有建議和補救措施;第二種方法是個臨時辦法,因為六個月之內所有瀏覽器可能都能支持你現在使用的技術了,讓你在網站上留下的信息過時:例如您寫的解決方案是建議使用 Firefox4 來訪問,可是半年後用戶安裝著 Firefox7 回來訪問你的頁面了,這可就真的沒救了。

  如果您真的不能使用漸進式增強,那麼就用新型的 HTML 5 Please API 吧(http://api.html5please.com/)。這是 Jon Neal,Divya Manian 和其他幾位大蝦創作的。通過使用它,可以先查詢 caniuse.com 然後返回一個最新(能支持你的新特性的)的瀏覽器版本列表。

  如果您已經做了一個需要 Canvas 或 WebSQL DB 技術的 DEMO 或者網站,恐怕你已經處在一個這樣的尷尬境地了:您只是在告訴訪問者們他們的瀏覽器不咋地。但是您不能只推薦他們使用一個能支持這些特性的瀏覽器來補救,例如「找個支持 WebRTC 性能的瀏覽器再來吧」,這樣對於大家都沒啥效果。

  HTML5 Please API 把開發人員的語言(和特性)翻譯成用戶能理解的語言(瀏覽器)。通過調用這個 API 你就可以得到一些 HTML 返回值來告訴訪問者,或者返回一個帶有相關數據的 JSON 對象(包括瀏覽器 Logo 及下載介紹等信息)。這樣您可以根據不同的客戶來顯示不同的補救信息了。

  使用這種方式最令人欣慰的是:如果所有新特性在客戶當前瀏覽器的升級版都能支持的情況下,Please API 值建議訪客對瀏覽器升級,而不是讓訪客單純為了訪問你這個頁面而更換瀏覽器。效果圖如下:

  結束語:

  正如您所看到的,大量的令人驚喜的新技術正在接踵而至,您著手研究上述某項技術的時候恐怕又要擔心更新鮮的技術到來了吧。希望您開發得愉快,請記得讓您所開發的應用在儘可能多的瀏覽器上面測試一下。

  原文地址:http://www.netmagazine.com/features/developers-guide-new-exciting-web-technologies

 

相關焦點

  • 八大瘋狂的 HTML5 Canvas 及 WebGL 動畫效果
    HTML5、WebGL和JavaScript改變了長久以來的動畫製作行業。在過去的幾年中,我們想要製作卓越的網頁動畫只能使用Flash和Java Applet。
  • webgl 迷宮項目開發總結
    整體網頁需要接收2個參數:N和M, 迷宮的大小為N*M。第二部分是交互操作Guide。在迷宮入口設置一個老鼠圖片,然後可以通過左右鍵調整老鼠的朝向,方向鍵上來前進一步。收穫webgl 三個js庫webgl-utils.jswebgl-debug.jscuon-utils.js圖片加載var img = new Image();
  • webgl、Javascript、HTML、ThingJS、cesium都是什麼鬼?
    不是搞技術的朋友念一念就好了,搞技術開發的你得好好念。webgl——是一種3D繪圖協議,這種繪圖技術標準允許把JavaScript和OpenGL ES 2.0結合在一起,通過增加OpenGL ES 2.0的一個JavaScript綁定,WebGL可以為HTML5。
  • 如何在Internet Explorer 11中開啟WebGL
    首先你必須已經安裝了Windows 8 Blue build 9364和最新的顯卡驅動(系統自帶的顯卡驅動在OpenGL方面支持不足),然後只需要簡單地導入以下的註冊表腳本即可。("webgl");  try  {    gl = canvas.getContext("experimental-webgl");  } catch(e) { }  if (gl) {    gl.clearColor(0, 0.678, 0.937, 1.0);    gl.clear(gl.COLOR_BUFFER_BIT);
  • WebGL 3D程序開發
    WebGL全稱Web Graphics Library,是一項新的Web 3D圖形標準,一種3D繪圖協議,也是HTML5大家庭中的一員,一項用來在網頁上繪製和渲染複雜三維圖形(3D圖形),並允許用戶與之交互的技術。
  • WebGL 入門-原生API介紹
    獲取呈現上下文3.初始化視口4.創建頂點數組5.創建矩陣6.加載著色器7.繪製創建畫布元素並獲取上下文WebGL都發生在Canvas 元素的上下文中,Canvs的上下文是一個JavaScript對象,它提供了完整的WebGL API,你可以愛屏幕上創建和操作圖形
  • Web1.0與Web2.0和Web3.0的本質區別是什麼
    ,從只有靜態網頁的web1.0到用戶直接交互的web2.0,再到用戶自主控制數據的web3.0。經過十多年的發展,web2.0的已經極大豐富。而web3.0才剛剛露出尖尖角,它以區塊鏈和加密貨幣為重要基礎,引導網際網路走向個人控制數據所有權,並實現個人隱私。但向真正走向web3.0,並非坦途,web2.0經過十多年的發展,由全世界如此眾多的聰明人不斷改進才取得今日的成就,而web3.0要成為主流採用的網絡,所需的時間也不可能短。
  • 基於HTML5/WebGL技術的BIM模型輕量化Web瀏覽解決方案
    網際網路技術的興起極大得改變了我們的娛樂、生活和生產方式。尤其是HTML5/WebGL技術的發展更是在各個行業內引起顛覆性的變化,大家感受最深刻的可能是遊戲、電商、O2O等和我們生活息息相關的行業,但這次我想講一下不受普通人關注但又人人都離不開的建築業在網際網路大潮衝擊下的變革。
  • Web前端應用十種常用技術
    隨著JS與XHTML的應用普及,越來越多的web界面應用技術出現在網站上,比如我們常見的日曆控制項,搜索下拉框等,這些web界面應用技術大大的豐富了網站的表現形式,本文將為您精心推薦十種最常見的web界面應用技術。Web應用程式的界面設計,其核心就是網頁設計 ,但它的重點主要是在功能方面。
  • 基於WebGL的虛擬太陽系漫遊技術實現 ThingJS 科幻片
    (1)基於webGL技術,ThingJS可以將虛擬太陽系各星體3D模型和腳本運行情況相結合,最終呈現虛擬太陽系的3D可視化效果。(2)場景漫遊是系統藉助3D技術中的攝像機控制原理,通過控制滑鼠和鍵盤上的預定按鍵,以及移動攝像機的位置來實現,同時對應位置控制和視向控制的場景漫遊技術。位置控制。
  • web前端開發常用工具有哪些
    Web前端是一個新興職業,市場需求大,薪資待遇高,吸引了很多人加入學習。無論是初學小白亦或是自身前端開發人員,好用的軟體工具可以幫助他們更好的工作。下面為大家介紹一些常用的web前端開發工具:1、BootstrapBootstrap 是快速開發 Web 應用程式的前端工具包。它是一個 CSS 和HTML 的集合,它使用了最新的瀏覽器技術,給你的 Web 開發提供了時尚的版式,表單,buttons,表格,網格系統等等。
  • WebGL 1.0標準規範正式公布 3D網際網路開啟
    WebGL 1.0定義了和OpenGL ES 2.0綁定在一起的JavaScript,可在瀏覽器內部實現富3D圖形,而且可用於任何支持OpenGL、OpenGL ES業界標準圖形API的平臺。WebGL一方面匯聚了幾乎所有桌面、移動、嵌入式平臺的OpenGL ES 2.0圖形能力,另一方面充分利用了Web技術的最新發展,比如JavaScript性能的大幅提升。
  • Web前端和後端有什麼區別(上)
    要考慮的問題有:功能的實現,數據的訪問,平臺的穩定性和性能等等。 二,需要掌握的技術不同 1、Web前端: 精通JS,HTML。能熟練應用JQuery,懂CSS,能熟練運用這些知識,進行交互效果的開發。
  • 20個使用WebGL和Three.js實現的網頁場景
    20個使用WebGL和Three.js實現的網頁場景 也許你們可能已經聽說過關於Three.js庫,Three.js是一個WebGL第三方庫,它能夠讓瀏覽器更加輕鬆的使用和實現3D效果,就打個
  • Web前端的就業前景如何
    Web前端對網站而言,通常指前端部分,它包括網站表現層和網站結構層。所以一般來說,前端技術分為前端設計和前端開發,網絡的視覺設計主要是有前端設計負責,網站的前端代碼實現,主要是由前端開發負責。基本的有 HTML和 CSS, JavaScript/ajax,以及目前新的高級版本HTML5,CSS3,以及 SVG等等。
  • 基於OSGi和Spring開發Web應用
    將 OSGi 和 Spring 結合能充分發揮二者各自的特長,更好地滿足企業級應用開發的需求。Spring 開發組織在 2008 年發布了將 OSGi 和 Spring 結合的***個版本:Spring-DM。本文通過一個簡單實例,介紹如何利用 Spring-DM 開發基於 OSGi 和 Spring 架構的 Web 應用,同時探討其中用到的關鍵技術及其基本思想。
  • 曾經的迷茫,WEB前端是做什麼的?
    相信不少的人都有過迷惑,web前端是做什麼的?什麼時候開始有了web前端的這個概念?不知何時,不管是web前端行業的從業者,還是非從業者,都對web前端產生了濃厚的興趣。但如果真要讓一個web前端開發去做美工要做的事情,這就有點趕鴨子上架,強人所難。這個比方,估計大家就有一點明白了,web前端好像不做美工做的事情,他們不做圖。對!他們不作圖!不使用PS、AI這些作圖工具(這裡說的很絕對,僅是為了區分職位劃分,實際工作中沒有嚴格意義上的劃分)。
  • 2019年科技領域的新興技術信號
    該報告利用定量的文本挖掘算法,從大量科學出版物中得到了257個新興技術的早期活躍信號,涉及能源、環境、衛生、生物技術和信息通信技術等領域。對新興技術信號進行的早期識別有助於為歐盟的相關政策制定提供科學依據。本報告就其主要內容進行摘編。新興技術的預測是一門學科,它通過一系列成熟的工具和方法將相關的專家和利益相關者匯聚在一起,以收集其對未來的前瞻洞見,從而形成新興技術發展的預測。