HTML5中Canvas与SVG的画图原理比较


Posted in HTML / CSS onJanuary 16, 2013

canvas 与 SVG都能够使你在浏览器中画图,但它们的基本原理不同。
SVG
SVG是一种在XML中描述二维图形的语言。
SVG是基于XML的,意味着在SVG DOM内每一个元素都是可用的。你可以为每一个元素增加JS事件处理器。
在SVG中,每一个图形被记作一个对象。如果一个SVG对象的属性发生改变,浏览器可以自动重新生成图形。

Canvas
Canvas能够在fly上画2D图形(使用JS)
Canvas能够按照像素重新生成。

在Canvas中,一旦图形完成,就会被浏览器忘记。如果图形位置要发生改变,那么整个屏幕需要重画,包括图形覆盖的对象。

Canvas 和SVG的比较
下表显示了canvas与SVG的主要不同点:

Canvas          SVG
依赖分辨率      独立于分辨率
不支持事件处理器 支持事件处理器
弱文本渲染能力 最适合具有大渲染面积的应用(谷歌地图)
可以保存最终图片为PNG或者JPG 复杂图像,重画变慢(任何使用DOM很多的情况都会变慢)
最适合许多 对象频繁重画的图形游戏        不适合游戏应用
HTML / CSS 相关文章推荐
HTML5和CSS3让网页设计提升到下一个高度
Aug 14 HTML / CSS
css3 box-sizing属性使用参考指南
Jan 08 HTML / CSS
css3 按钮 利用css3实现超酷下载按钮
Mar 18 HTML / CSS
CSS3正方体旋转示例代码
Aug 08 HTML / CSS
CSS3 Media Queries详细介绍和使用实例
May 08 HTML / CSS
CSS3打造磨砂玻璃背景效果
Sep 28 HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
Mar 15 HTML / CSS
HTML5 b和i标记将被赋予真正的语义
Jul 16 HTML / CSS
针对HTML5的Web Worker使用攻略
Jul 12 HTML / CSS
详解HTML5中的manifest缓存使用
Sep 09 HTML / CSS
HTML5 FileReader对象的具体使用方法
May 22 HTML / CSS
CSS实现隐藏搜索框功能(动画正反向序列)
Jul 21 HTML / CSS
html5 svg 中元素点击事件添加方法
Jan 16 #HTML / CSS
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
Jan 09 #HTML / CSS
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
Jan 09 #HTML / CSS
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
Jan 09 #HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
Jan 09 #HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
Jan 09 #HTML / CSS
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
Jan 09 #HTML / CSS
You might like
收藏的一个php小偷的核心程序
2007/04/09 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
2016/05/17 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
python从入门到精通(DAY 2)
2015/12/20 Python
python学习 流程控制语句详解
2016/06/01 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
使用Python读取大文件的方法
2018/02/11 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
没编程基础可以学python吗
2020/06/17 Python
python3的pip路径在哪
2020/06/23 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
历史系毕业生自荐信
2013/10/28 职场文书
社区党务公开实施方案
2014/03/18 职场文书
优秀纪检干部材料
2014/08/27 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
Java基于字符界面的简易收银台
2021/06/26 Java/Android