随笔-6  评论-114  文章-0  trackbacks-4

JavaScript用canvas元素实现 2D 和 3D

   我几乎半年没写博客了,哈哈先来个问候语。

 

   可能有些人早就知道,canvas 这个元素,这个是在 w3c HTML5.0 方案确定的元素, 可惜的是 IE 不支持这个元素,
火狐在很早的版本就支持了这个元素, 下面是一些浏览器支持 canvas 元素预览图。

 

Firefox Safari Opera ExplorerCanvas
2.0 ○ 2.0 ○ 9.2 ○ 0002 △
3.0 ○ 3.0 ○ 9.5 ○  

 

ExplorerCanvas 是 Google 公司推出的一个专门让IE支持 canvas 元素的扩展类,即 excanvas.js,最新版本是 0002版本
为什么是三角呢,因为只提供部分属性方法支持。
---------------------------------------------------------------------------------------------------------

不可否认的javascript的先天缺点:


   可怜的javascript由于微软,坚决反对,对js的扩展,而且IE占有 70%浏览器市场,使得js html 扩展举步维艰,因为微软主推 Silverlight,而
Adobe 公司放弃了svg 主推 Flash, 所以javascript 就是一个可怜儿,没人理。

但是javascript 是个神奇的语言,官方不给,民间自创,没有的方法,函数,可以通过原型构建新对象,所以像JQ,等这些扩展
控件百花齐放,javascript 没有图像库,绘图类,但是可以在其他浏览器用canvas 元素,在IE可以用vml 构造canvas 。

但是给我的感觉无论是,div实现图形还是 canvas 元素,给人的感觉都是太肤浅了,不支持的太多了比如最重要的文字、字体,旋转,变形。
和现有的flash 和层出不穷的 Silverlight没的比、不能比、没法比、千万不要比。

  这里我有一句忠告就是用 javascript 绘图 = 自捏,还是老老实实的用  Silverlight 或 flash 。
--------------------------------------------------------------------------------------------------------

不可否认的javascript的先天优点:

    代码量小,不用客户端安装任何插件,这对企业级的内网用户再合适不过了,有很多优秀的js库可以丰富js脚本。
这里要感谢一下 Google ,它推出的 excanvas.js 扩展类,虽然不是完美,功能太少,但是至少让
javascript 在多浏览器下,真正支持了绘图。

这里我推荐一个网站吧,因为国内几乎没有人用js绘图,所以相关的资料很少
但在日本就不一样了,他们把html5 称为次时代html语言。
http://www.html5.jp/     小日本的网站,提供了非常详细的 html5 的参考资料,包括canvas 元素,而且方法,属性
都非常友好的告诉了你,那个浏览器支持和不支持。

 

 canvas 元素还是很有用的,假如你想快速开发,给客户生成报表,图饼一类的,你可以不用借助于 Silverlight 或 flash 。
推荐几个小日本的控件(都是基于excanvas.js )

 

 

 

 

 

 

 

这几个控件使用超级简单

 柱形图设置

Code


   7 个数字组,代表的是一周的7天,如果你有多个商品可以定义更多 商品F,商品G, 控件自动分配。
我测试过所有浏览器都支持,如果作为企业用户,你不想用 Flash 等可以用这个,修改维护都很方便

圆饼图设置

Code

 

更简单你想增加一个比较就加一个 ["sample13",10] 一条记录,控件会自动计算百分比。 

js控件下载

-------------------------------------------------------------------------------------------------

骨灰级的应用 canvas 元素

    世界之大,无奇不有,人外有人,天外有天,真不是道听途说。

             丹麦人,javascript 狂热者,+ 天才。
   Jacob Seidelin 

   这是他 2D 作品 (最好用火狐,谷歌浏览器,IE会很慢)
    http://www.nihilogic.dk/labs/mario/mario_large_music.htm  
    只有14k代码的超级玛丽(作者开源)
    他用canvas 元素实现的,没有用任何图片,14K 哦,给我1400K 我也实现不了。
 
    最近他又在研究 3D

 

   下面是他用 js + canvas 做的3D小游戏 (最好用火狐,谷歌浏览器,IE会很慢)

   http://www.nihilogic.dk/labs/wolf/   3D射击     X 开门 C 子弹
   http://www.nihilogic.dk/labs/chess/  3D国际象棋(可以鼠标旋转场景)

---------------------------------------------------------------------------

   总结:对我们来说,认识下 canvas 元素,也可以学习下应用 excanvas.js
可以参考http://www.html5.jp/   ,不难,如果不用 flash,Silverlight,只是报表
应用还是个不错的选择,当然如果你是js游戏发烧友可以更进一步的发掘,当然
建议,如果你不是 Jacob Seidelin 那种狂热型,还是用 flash,Silverlight 更好。

 

 

posted on 2008-12-09 00:48 李彬 阅读(5793) 评论(23) 编辑 收藏

评论:
#1楼 2008-12-09 01:28 | LanceZhang      
这个东西好像在HTML5+里支持
 回复 引用 查看   
#2楼 2008-12-09 01:55 | 上不了岸的鱼{ttzhang}      
貌似IE8beta2好像已经支持HTML5.0标准了吧
 回复 引用 查看   
#3楼 2008-12-09 03:07 | 火星人.NET      
用js写3D,狂人
 回复 引用 查看   
#4楼 2008-12-09 03:18 | 朱扬谷      
超狂,赞!
 回复 引用 查看   
#5楼 2008-12-09 08:31 | 丁学      
我记得IE7是支持的吧?
 回复 引用 查看   
#6楼 2008-12-09 08:32 | Q.Lee.lulu      
哇,14K的马里奥!!牛!!
兔子好介绍!!

 回复 引用 查看   
#7楼[楼主] 2008-12-09 08:34 | 李彬      
我只是提供了一下参考网址和例子,那些都是 Jacob Seidelin 大牛写的。
 回复 引用 查看   
#8楼 2008-12-09 08:35 | 紫色永恒      
引用作者的一个词,我想还是不要自捏了。。。
ps:Super Mario 在IE7下表现很好 并没有拖慢

 回复 引用 查看   
#9楼 2008-12-09 08:55 | graystar[未注册用户]
转载一下blog.csdn.net/greystar
 回复 引用   
#10楼 2008-12-09 09:16 | nfa2dfa      
先调查清楚,不要只会唏嘘和贴图
 回复 引用 查看   
#11楼 2008-12-09 09:36 | 狼Robot      
见识了.果然牛.
 回复 引用 查看   
#12楼[楼主] 2008-12-09 09:53 | 李彬      
引用:先调查清楚,不要只会唏嘘和贴图

当然的调查清楚,我才敢发图。
canvas元素相关资料非常难找,所以我提供了一个比较详细的html5.jp网站
方便大家学习,也为了一些用户能够不需要知道 canvas 而能够使用饼图,线图,
这些都是为了节约开发者的时间。
当然博客园也有骨灰级的js用户,我就提供几个例子,增长知识点。

 回复 引用 查看   
#13楼 2008-12-09 09:54 | Benson_design....      
好东西,不错!收下啦!
 回复 引用 查看   
#14楼 2008-12-09 10:06 | Tony111[未注册用户]
我觉得楼主的blog不错
--引用--------------------------------------------------
nfa2dfa: 先调查清楚,不要只会唏嘘和贴图
--------------------------------------------------------

 回复 引用   
#15楼 2008-12-09 11:39 | shawnliu      

 回复 引用 查看   
#16楼 2008-12-09 13:37 | nfa2dfa      
ie里canvas标签作为vml标签的容器标签,ff里canvas是图像的布局容器。两者没有共同点。excanvas对两者做了封装,使调用者写一份代码可以获得一致的显示效果。

vml有简单的3d支持,支持厚度和厚度造成的阴影,相对于z轴的旋转,相对于x轴和y轴的翻转(并不理想),其他时候,和html标签一样,都是矩形。
ff canvas类似于gdi的graphics,不支持3d。

使用excanvas制作的小游戏很多,基本思想是帧驱动模式,每次重绘canvas,在ie下是清空canvas标签,重新插入新的标签,在ff下是绘图,自然,前者更耗时。但实际上,两者的效率都很差,不复杂的场景,fps20的情况,普通配置的机器都很吃紧,开两个就跑不动了。所以没有应用前景。

如果仅考虑vml,不清空canvas,而是修改vml标签的属性的话,效率还是可以接受的。

 回复 引用 查看   
#17楼 2008-12-09 14:02 | 痴情客      
good job
 回复 引用 查看   
#18楼 2008-12-09 14:04 | 痴情客      
学习 nfa2dfa
 回复 引用 查看   
#19楼[楼主] 2008-12-09 14:20 | 李彬      
我说过:javascript 绘图 = 自捏 excanvas.js 还是有一个优点的,就是小而兼容多浏览器,简单的学习还是可以的,不用1天。 对于我们来说,企业图形报表,小量的曲线绘图,这些不用flash 就能实现和管理还是可以的,相对我们开发程序来说,直接 Response.Write 输出直接数据,就能实现报表,提高工作效率。 对于骨灰级的游戏,就交给老外和发烧友去玩吧。 换个思想考虑也一样,我们不可能让 ajax 每秒20次以上的访问服务器,那样服务器和客户端都会跨的,同理我们不能强求canvas 每秒20次的刷新,ajax 的特色是什么,触发式的异步更新, 同样,触发式的canvas 能够完美的和数据交互生成高质量的图形。
 回复 引用 查看   
#20楼 2008-12-09 15:46 | Mr.S[未注册用户]
"次时代"google翻译为"下一代"。
 回复 引用   
#21楼 2008-12-09 20:22 | 一舟--KiloNet.CN      
太酷了!

 回复 引用 查看   
#22楼 2009-01-10 23:45 | 路过 路过[未注册用户]
日文的看不懂啊

谁翻译下啊


 回复 引用   
#23楼 2009-02-02 15:29 | Hello World![未注册用户]
我正在学 canvas 。
 回复 引用   
昵称:李彬
园龄:3年8个月
粉丝:11
关注:0
<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

搜索

 
 

常用链接

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜