javascript作為一種依附于瀏覽器的腳本語(yǔ)言,似乎天生就沒(méi)得到過(guò)親娘的疼愛(ài)。 最開(kāi)始同志們都只知道用它在html上搞點(diǎn)兒滾動(dòng)的文字,鼠標(biāo)后面拖一長(zhǎng)串的(*&$W(%*&,或者是狀態(tài)欄上不斷跳躍的 xxx歡迎您。那時(shí)候的javascript做出的效果,大多屬于畫(huà)蛇添足,喧賓奪主型的,只是教給一些小孩子玩玩所謂的技術(shù)效果,沒(méi)有其他實(shí)際意義。 后來(lái)很長(zhǎng)一段時(shí)間里,js的最大作用就是瀏覽器這邊的預(yù)先數(shù)據(jù)校驗(yàn),什么document.formName.fieldName.value == ''就focus()alert(),即便這樣很多人也不會(huì)用里邊的regex。 等到了ajax這個(gè)新瓶舊酒的東西蹦出來(lái)了,一開(kāi)始也是緩慢發(fā)展,經(jīng)歷了漫長(zhǎng)的prototypejs一統(tǒng)江湖的時(shí)候,通過(guò)它足以看到壟斷者的脾 氣,它完全不提供api文檔,還記得當(dāng)時(shí)所有人的建議都是直接去看源代碼,汗啊。幸好人民的力量是偉大的,jquery,mootools,yui一個(gè)一 個(gè)追了上來(lái),prototypejs為形式所迫,不得不加上api,為廣大勞苦大眾提供更為優(yōu)秀的服務(wù)了。還是競(jìng)爭(zhēng)力量大啊,公平的市場(chǎng)造就完美的服務(wù)。 前言介紹到此為止,咱們就看看在這個(gè)號(hào)稱ajax百花齊放的年代里,為什么javascript還是不能挺起腰桿,也許在頁(yè)面控制上很多組件庫(kù), 比如extjs,yui,jqueryui都邁出了輝煌的一步,但是在其他的方面,比如圖形處理上,javascript依然步履維艱。 最簡(jiǎn)單的一個(gè)問(wèn)題就是,javascript到現(xiàn)在也沒(méi)有自己的內(nèi)置ui庫(kù),想想學(xué)c,學(xué)java,學(xué)python什么的,入門教材里中會(huì)有一章 會(huì)講講可視化開(kāi)發(fā)。但是javascript沒(méi)有。 是因?yàn)閏的第一個(gè)hello world是printf在console里的,javascript的第一個(gè)hello world是alert在window里的嗎? 這就是明顯的歧視,從來(lái)就沒(méi)人把javascript當(dāng)作編程語(yǔ)言里的公民來(lái)看待,如果是個(gè)作坊,它最多就算個(gè)學(xué)徒打雜的。很多工作都不屑于讓它 去做。 如果我們想用javascript畫(huà)圖,當(dāng)前可以通過(guò)什么途徑實(shí)現(xiàn)呢?首先咱們先說(shuō)好,jfreechart那種后臺(tái)生成圖片發(fā)送到前臺(tái)的方法就 不要包括進(jìn)來(lái)了,我們就排列一下html+js進(jìn)行畫(huà)圖的方式。 1.使用瀏覽器支持的圖形引擎,比如ie下的vml,firefox,opera,safari支持的svg或者canvas。 2.http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm, 這是一個(gè)相當(dāng)純正的js圖形庫(kù),它特立獨(dú)行的地方就是:“完全使用div來(lái)畫(huà)圖。” 3.http://excanvas.sourceforge.net/,google 提供的工具庫(kù),可以在ie下使用vml模擬其他瀏覽器上canvas的api。 4.http://dojotoolkit.org/, 宣傳火暴的dojo提供一套2d和3d的圖形api,會(huì)自動(dòng)根據(jù)瀏覽器在vml,svg,canvas之間進(jìn)行切換。 5.http://prototype-graphic.xilinus.com/這 也是一套根據(jù)瀏覽器自動(dòng)切換實(shí)現(xiàn)方式的圖形api。 6.http://www.lutanho.net/svgvml3d/index.html還有這個(gè),是專門用 svg和vml實(shí)現(xiàn)3d效果的。 其他一些基于excanvas,jsgraphics的組件庫(kù)咱們就不列了,基本這幾年看到的底層圖形庫(kù)也就只有這些,有一些還常年累月沒(méi)有更新 了。如果你想只使用javascript光是前期的抉擇就是死掉億萬(wàn)個(gè)腦細(xì)胞。如果選擇jsgraphics會(huì)不會(huì)因?yàn)槭褂媚敲炊郿iv造成效率下降啊, 而且它是模擬圖形,縮放旋轉(zhuǎn)這些圖形變換能保證嗎?如果使用vml,svg,canvas的話,ie和其他瀏覽器完全不對(duì)付,就連google出的 excanvas都沒(méi)有實(shí)現(xiàn)全部的功能,網(wǎng)上說(shuō)為什么現(xiàn)在很多基于excanvas的報(bào)表工具都沒(méi)有餅圖,就是因?yàn)閑xcanvas用vml實(shí)現(xiàn)不了 arcTo和clipTo。好幾兆的dojo就用來(lái)畫(huà)幾張圖似乎有些不劃算。prototype-graphic只有svn,連發(fā)布的下載包都沒(méi)有。 svgvml3d自從06年就再?zèng)]更新過(guò)了。也許有的同學(xué)又開(kāi)始不屑支持ie以外的瀏覽器,那么我偷偷告訴你一件事情,vml在不同版本的ie下面都是有 差矣的。 想想就知道,依靠這些薄弱的圖形庫(kù)javascript能敵得過(guò)flash嗎?更別提以后出現(xiàn)的什么wwf了。 從某種角度上講,svg其實(shí)蠻適合做javascript的外套的,可adobe收購(gòu)了macromedia,svgviewer從此流 產(chǎn),flash成了主旋律。即便是ie8宣稱會(huì)原生支持svg也不知道要等到何年何月了,到時(shí)候誰(shuí)知道m(xù)s會(huì)不會(huì)又搞出一套不兼容w3c的新標(biāo)準(zhǔn)?即便是 現(xiàn)在支持svg的瀏覽器都沒(méi)有完全實(shí)現(xiàn)了svg標(biāo)準(zhǔn)的,opera實(shí)現(xiàn)的估計(jì)最全了,safari和firefox都沒(méi)有實(shí)現(xiàn)amination動(dòng)畫(huà)標(biāo) 簽,但是safari的渲染效果更漂亮,挺符合apple一貫作風(fēng)的。現(xiàn)在想想firefox也就只有調(diào)試方便的優(yōu)點(diǎn)了,pattern,filter好 多都沒(méi)有實(shí)現(xiàn),圖形一多還會(huì)發(fā)頓,估計(jì)只能等f(wàn)irefox3了。不知道現(xiàn)在瀏覽器廠商是如何規(guī)劃的?如果想支持svg為什么不能實(shí)現(xiàn)好標(biāo)準(zhǔn),半成品用起 來(lái)實(shí)在有夠不爽。 退一萬(wàn)步講,就各個(gè)瀏覽器都實(shí)現(xiàn)了標(biāo)準(zhǔn),js圖形組件也還完全達(dá)不到要求,不可能指望普通開(kāi)發(fā)者拿著文本編輯器從line,rect,cycle 開(kāi)始畫(huà)起,因?yàn)楝F(xiàn)在各自實(shí)現(xiàn)的差矣太大,ide完全沒(méi)辦法下手,而且大多數(shù)人需要能拿來(lái)就用button,menu,各式各樣的window,panel 這些svg,vml,canvas也都還不支持,等到滿足條件的時(shí)候,市場(chǎng)份額怕早被其他的產(chǎn)品瓜分的一干二凈了。 同志們,現(xiàn)在你們不覺(jué)得“用js畫(huà)圖是一種自虐行為”嗎?

dm520