`
化蝶自在飞
  • 浏览: 2333423 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

html5 canvas动画能撼动flash吗?

    博客分类:
  • html
阅读更多
最近html5炒的很火,flash似乎是得罪了什么人,连苹果的ceo都对之嗤之以鼻.下面来看看,html5到底和flash相比谁更NB.

HTML5 与 Flash 在功能上并不是完全重叠的,比如对于摄像头等计算机硬件的调用,仍然只能使用 Flash 或其他方法实现。但是 HTML5 却引入了一些让 Flash 不得不认真对待的元素。其中最为人所知的和最重要的即为 canvas 和 video 标签。在我看来,其他的新属性跟 Flash 的竞争关系很弱,只有此二者是真真正正要抢 Flash 的饭碗,而且一旦普及,将深刻的改变整个互联网,可谓是 HTML5 的左膀右臂。

canvas
在 Flash 流行之前,曾经出现过很多种在网页中实现绘图功能的方法,其中包括著名的Java Applet 。这些方法各有千秋,相互竞争不休。但是在 Macromedia 公司推出 Flash 之后,这场战争很快就结束了。

为了对抗 Flash,又有很多新的技术被提出,其中就包括现在 Flash 的东家 Adobe 提出的 SVG。然而这没有能够阻止 Flash 迅速的被网民接受。基于 Flash 的动画、游戏等应用几乎是在一夜之间蔓延到了互联网的每个角落。

而今,新的挑战者出现了,他就是 HTML5 的新标签 canvas。

canvas 相比 Flash 显然是有其优点的。它不依赖于外部插件、与浏览器渲染引擎紧密结合、节约资源,最重要的是极大的简化了图形和网页中其他元素的交互过程。

对于 Flash 来说,使 Flash中的元素与网页中其他元素进行交互是要消耗大量时间和资源的,另外在编程上也相当不方便。

而 canvas 本身就是 HTML5 的一个元素,可以像操作普通 HTML 元素一样操作它。开发人员可以将所有的代码整齐的写在一个文件里,降低了维护与更新的难度。

然而 canvas 也有其缺点:

其一,开发者不得不编程描绘每一个点和矢量曲线,在旋转缩放时更需要和矩阵变换打交道,这会增加描绘复杂图形的难度。而在 Flash 里,图形显示的 API 被封装在名为“Sprite(显示列表)”的类里,大部分图形元素都继承于此类,开发者可以使用多种工具设计图形,对图形进行旋转放缩只需要简单的调用类的函数。

其二,动画的实现存在缺憾。canvas 虽然提供了不同于传统的通过 div 块实现动画的方法,但这种方法仍然非常繁琐。开发者必须在每一桢动画显示时清空画布,然后重画所有元素,这必然导致包含大量元素的场景动画缓慢,只移动少量元素就要重画整个画布会浪费大量资源。而且创建动画也是一件十分繁琐的事情。相比起来,Flash的实现就方便多了,虽然从最底层来说,动画时仍然需要重画整个画布,但其被交予 Flash Player 自动处理,无需开发者手动管理。基于字节码的 Flash 在解析的过程中将会比即时编译的 HTML5 和 JavaScript 快速。一般来说,复杂动画将会更流畅。另外,良好封装的图形类和强大的设计工具使得动画的创建非常方便。

其三,没有提供一套方便的事件体系。开发者也许需要通过捕获鼠标在 canvas 中点击的坐标,判断用户到底点击了什么图形元素。在这个过程中可能要遍历所有的显示元素并判定点是否在图形内,实现起来比较繁琐,更不要说实现事件的冒泡和递归模型了。虽然今后出现的图形库可以解决这个问题,但这实质上相当于使用 JavaScript 构建了一套事件响应模型,其效率显然不如内建于浏览器的原生事件模型高。在 Flash 中,事件也被良好封装为类,捕获点击等事件自然不在话下,更重要的是提供了判断两个图形是否有交集的事件和函数,这在游戏编程中非常方便。另外,Flash 的最新版本将会支持多点触摸事件的响应,而 HTML 想要支持这点恐怕要等到 HTML6 了。

由以上分析我们可以看出,HTML5 需要的几个非常重要的东西:一个强大易用的图形库、硬件加速的图形解析和重绘、一个强大的编辑器(IDE)。

目前已经出现了基于 canvas 实现的游戏引擎。但是从效果上看仍然无法与 Flash 媲美。

WebGL 的提出让我们看到了硬件加速的希望,这将极大的改进图形显示的速度。但是目前它只被少数开发版本的浏览器支持。

IDE 方面,讽刺的是恰恰是 Adobe 为 Adobe Flash CS5 添加了一个将 Flash 转化为 canvas 的功能。在 JavaScript 方面,鉴于其为非强制类型的编程语言,对其进行代码提示等非常困难,提高编程效率较难。

如果以上三个问题不能被良好解决,将会限制 canvas 所能实现的效果的丰富度,增加开发的复杂度,从而最终阻碍其普及。一个html5 canvas动画的demo: http://mugtug.com/sketchpad/

HTML5,预计在1-3年内会达到相对普及的程度,但是不会取代 Flash。他们之间甚至是可以和谐相处,取长补短的。然而不要对 HTML5 的发展速度抱有太大希望,毕竟业内巨头之间矛盾重重,现有标准能够被各大浏览器无差别支持就已经相当困难了,想要加入任何新功能都要很久才会被广泛支持。这样缓慢的发展速度如何能够体现强大的竞争力,我们拭目以待。
分享到:
评论
1 楼 lesliecui 2010-07-02  
更正博主的一点

FLASH一样没有实现硬件图形渲染,跨平台使得调用不同的本地的硬件资源十分头疼,而且安全机制也不允许.这也是为什么flash迟迟没有象样的3dAPI,不得不采用软件加速图形的原因.

我同意博主关于HTML5取代flash需要一个强大易用的图形库、一个强大的编辑器(IDE)的阐述,我认为还需要一样东西,就是一个强大易用的视频操作库,flash大量的网络视频业务也将是html5虎视耽耽的市场.

希望多多交流

相关推荐

    HTML5 Canvas, flash version

    FlashCanvas通过将Canvas的绘制操作转换为Flash的矢量图形命令,使得那些不支持HTML5的浏览器也能显示Canvas内容。这种方法在当时是非常有用的,因为它允许开发者使用新的HTML5特性,同时保持对老版本浏览器的兼容性...

    html5 canvas模仿flash的简单动画banner Demo

    这个“html5 canvas模仿flash的简单动画banner Demo”就是利用Canvas API来实现类似Flash的动态广告效果的一个实例。下面将详细探讨相关的知识点。 1. HTML5 Canvas API: - `canvas`元素:HTML5中的`<canvas>`...

    html5 canvas小人跳舞动画特效

    这个"html5 canvas小人跳舞动画特效"是一个利用Canvas API实现的交互式动画示例,它展示了如何通过编程方式创建动态、生动的视觉效果。 在Canvas中,我们可以使用`canvas.getContext('2d')`获取2D渲染上下文,然后...

    分享8款令人惊叹的HTML5 Canvas动画特效

    HTML5的确可以制作出非常绚丽的网页动画效果,尤其是利用HTML5 Canvas特性和HTML5 3D特性,我们更加可以欣赏到超酷的动画特效。今天我从html5tricks网站上整理了8款令人惊叹的HTML5 Canvas动画教程,大家可以一起来...

    html5 canvas多层波浪背景动画特效

    在本示例中,“html5 canvas多层波浪背景动画特效”是一个利用Canvas API实现的动态视觉效果,它可以为网页增添生动而引人入胜的背景。用户可以通过鼠标操作,如按住鼠标左右键或上下移动,来改变波浪的颜色和饱和度...

    HTML5 Canvas核心技术源码技术代码

    HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas...

    HTML5 Canvas全屏背景动画特效

    在这个“HTML5 Canvas全屏背景动画特效”的主题中,我们将深入探讨如何利用Canvas来创建引人注目的全屏动画背景,以及相关的编程技术和实践技巧。 一、Canvas基础 1. Canvas元素:HTML5引入的Canvas是一个二维绘图...

    HTML5 canvas宇宙中星云动画背景特效

    HTML5 canvas是现代网页开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,提供了丰富的绘图功能,使得创建交互式和动画效果成为可能。在这个特定的案例中,“HTML5 canvas宇宙中星云动画背景特效”是一...

    html5 canvas流动的瀑布动画特效

    html5 canvas流动的瀑布动画特效 html5 canvas流动的瀑布动画特效

    HTML5 Canvas彩色渐变背景动画效果

    这款基于HTML5 Canvas的彩色渐变背景动画效果,是利用Canvas API来实现的一种互动性极强的视觉特效。当鼠标在画布上移动时,背景颜色会随着鼠标的移动而产生渐变变化,为用户提供了生动且引人入胜的交互体验。 首先...

    html5 canvas云粒子数字时钟动画特效

    在这个“html5 canvas云粒子数字时钟动画特效”中,我们看到的是Canvas技术与时间显示、粒子系统相结合的应用实例。下面将详细阐述相关知识点。 1. HTML5 Canvas API: HTML5 Canvas是一个基于矢量图形的画布,...

    HTML5 Canvas透明丝带飘动背景动画特效

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,...学习并理解这个特效的实现原理,可以帮助开发者进一步提升在Web动画设计上的技能,同时也能更好地理解和掌握HTML5 Canvas的潜力。

    html5 canvas粒子动画进度条加载特效

    在这个“html5 canvas粒子动画进度条加载特效”中,我们主要探讨的是如何利用Canvas API来构建一种创新的加载动画,这种动画不仅具有线条边框风格,还能以百分比形式展示加载进度。 首先,Canvas API是HTML5提供的...

    HTML5 Canvas一群鸟空中盘旋动画特效

    "HTML5 Canvas一群鸟空中盘旋动画特效"是一个利用Canvas API实现的交互式动画示例,其核心是通过JavaScript编程来模拟鸟群在天空中的飞行轨迹,呈现出栩栩如生的动态效果。 首先,我们要理解HTML5 Canvas的基本结构...

    HTML5 Canvas 圆弧动画(绕四周运动)

    本知识点主要聚焦于HTML5 Canvas中的圆弧动画,特别是让图形绕着圆周运动的技术实现。在这个示例中,我们将探讨如何创建一个圆弧动画,使一个元素沿着圆形路径循环移动。 首先,我们需要在HTML文件中创建一个`...

    HTML5 Canvas 动画时钟

    理解并实践这些概念,你就能创建出自己的HTML5 Canvas 动画时钟,无论是作为学习项目还是网页设计中的实用元素,都是一个很好的实践。 通过学习和探索这个主题,你不仅可以提升HTML5和JavaScript的技能,还能对Web...

    HTML5Canvas雪花动画特效代码

    这款"HTML5 Canvas雪花动画特效代码"正是利用了这一特性,为用户创造出一个逼真的雪花飘落场景,增添了动态视觉效果,常用于网站背景或者节日主题设计。 在HTML5中,`<canvas>`元素是一个矩形区域,我们可以在这个...

    html5 canvas绘制管道里跳动小球动画特效

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的交互式2D图形和动画。"html5 canvas绘制管道里跳动小球动画特效"是一个利用Canvas API实现的典型应用场景,旨在创建一...

    html5 canvas模拟满天星空背景动画特效

    总的来说,"html5 canvas模拟满天星空背景动画特效"是一个综合运用了Canvas API、动画原理、随机生成、事件处理等技术的项目,通过学习和实践,可以深入理解HTML5 Canvas的强大功能和动画制作技巧。

    HTML5 Canvas五彩缤纷的3D发光水晶球动画

    在这个名为“HTML5 Canvas五彩缤纷的3D发光水晶球动画”的项目中,我们将深入探讨如何利用Canvas API来实现一个引人入胜的3D动画效果,特别是发光的水晶球。 首先,让我们了解HTML5 Canvas的基本结构。在HTML文件中...

Global site tag (gtag.js) - Google Analytics