想到昨天看资料的时候,发现html5 中的SVG 和canvas 都可以表示图形,那它们到底有哪些区别呢?该如何正确的使用它们呢?

1、SVG:可缩放矢量图形,(Scalable Vector Graphics),SVG使用XML格式定义图像。

canvas:<canvas> 标签定义图形,比如图表和其他图像;<canvas> 标签只是图形容器,您必须使用脚本来绘制图形

2、<canvas> 标记和 SVG 的另外一个重要的不同点是:(VML我还没有了解过,后续会进行了解并记录)

<canvas> 有一个基于 JavaScript 的绘图 API,而 SVG  使用一个 XML 文档来描述绘图。

这两种方式在功能上是等同的,任何一种都可以用另一种来模拟。从表面上看,它们很不相同,可是,每一种都有强项和弱点。

例如,SVG 绘图很容易编辑,只要从其描述中移除元素就行。要从同一图形的一个 <canvas> 标记中移除元素,往往需要擦掉绘图重新绘制它。

3、svg绘制出来的每一个图形元素都是独立的DOM节点,可方便后期绑定事件或修改,而canvas输出的是一整幅画布;

svg输出的图形是矢量的,后期可以修改参数来自由放大缩小,无失真,canvas输出标量画布,就像一张图片一样。

4、svg是一种在网页上画矢量图的方法,结构基于XML。他和canvas最大的不同,就是他的每个图形都是独立的,都具有一个“html标签”,都可以分别操作(这点和flash有点类似)

canvas画出的图形都是附在canvas区域之上,但图形都是不可操作的,如果要操作图形,就是直接操作整个canvas,即清空canvas和重绘。

下面是最后整理出的结果哦;

canvas和svg的共同点:

1、都是HTML5的新标签;

2、都可以用css和js进行操作;

3、浏览器对它们的支持度还不是很高;

canvas和svg的区别:

1、SVG的图形被称为矢量图,canvas的图形被称为位图;

2、SVG的每个图形都是独立的标签,可以进行独立操作,canvas元素只有一个标签,里面的所有图形为一个整体,如果要对canvas图像进行操作,只能清除掉在重绘;

3、SVG话200个圆,页面中就可能有200个标签,而canvas画200个圆,页面中就还是只有一个canvas元素;

4、SVG图形可以夹带文本,seo(搜索引擎)能很好的搜索到相关信息,seo是搜索不到canvas的。

那么两种标签都基本能达到我们想要的结果,在这种情况下我们该如何判断使用哪种标签呢?

svg 使用:

svg由于是矢量图,所以他对点线面这样的图形很擅长,他完全可以用来实现一个web的Excel图形报表。

svg跨PC和移动端

svg不擅长做复杂的动画,因为它的动画牵扯的元素太多了——牵一发而动全身,同时动画N个元素的效率是不会高的

特别要注意,svg不能实现太复杂的效果,只要他的标签一多,效率就急剧下降

canvas使用:

canvas虽然每次动画都要重绘画布,但他效率尚可,可以制作不是十分复杂的动画效果,游戏,与audio标签等结合,可以做出不错的游戏。

canvas之所以擅长动画,是因为他会清空画布,不会造成元素累积过多卡死浏览器

它跨PC和移动平台,毫无压力

注意:canvas的绘图过程必须讲究技巧,不然还是很可能卡死浏览器。

写完这个,我自己对这两个标签有了一定的了解,也希望看到这篇博客的朋友能对这两个标签有新的认识哦,我是新手,还需加油(●'◡'●)。

html5 中的SVG 和canvas的更多相关文章

  1. HTML5中的SVG

    * SVG * 基本内容 * SVG并不属于HTML5专有内容 * HTML5提供有关SVG原生的内容 * 在HTML5出现之前,就有SVG内容 * SVG,简单来说就是矢量图 * SVG文件的扩展名 ...

  2. HTML5中使用SVG

    SVG 即 Scalable Vector Graphics,是一种用来绘制矢量图的 HTML5 标签.你只需定义好XML属性,就能获得一致的图像元素. 使用SVG之前先将标签加入到HTML body ...

  3. HTML5中video标签与canvas绘图的使用

    video标签的使用 video标签定义视频, 它是html5中的新标签, 它的属性如下(参考自文档): domo01 <!DOCTYPE html> <html lang=&quo ...

  4. 如何在HTML5中使用SVG

    复制而来---原地址http://www.php100.com/html/webkaifa/HTML5/2012/0731/10776.html SVG 即 Scalable Vector Graph ...

  5. HTML5学习(六)---------SVG 与Canvas

    参考教程:http://www.w3school.com.cn/html5/html_5_canvas_vs_svg.asp Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不 ...

  6. HTML5 中 40 个最重要的技术点

    介绍 我是一个ASP.NET MVC的开发者,最近在我找工作的时候被问到很多与HTML5相关的问题和新特性.所以以下40个重要的问题将帮助你复习HTML5相关的知识. 这些问题不是你得到工作的高效解决 ...

  7. HTML中的SVG

    HTML5中的SVG是Scalable Vector Graphic的简称,是一种用来绘制矢量图的HTML5标签,由万维网联盟定制,是一个基于可扩展标记语言,用于绘制二维可缩放矢量图形. 是一种使用X ...

  8. HTML5中canvas与SVG有什么区别

    SVG SVG 是一种使用 XML 描述 2D 图形的语言,它基于XML也就是我们可以为某个元素附加JavaScript事件处理器,如果SVG 对象的属性发生变化,那么浏览器能够自动重现图形. Can ...

  9. 三天学会HTML5——SVG和Canvas的使用

    在第一天学习了HTML5的一些非常重要的基本知识,今天将进行更深层学习 首先来回顾第一天学习的内容,第一天学习了新标签,新控件,验证功能,应用缓存等内容. 第2天将学习如何使用Canvas 和使用SV ...

随机推荐

  1. PHP中include和require的区别

    include和require的区别,其实两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出. 根据测试,win32 ...

  2. Angularjs基础教程

    Angularjs-基础教程 一些angualr的基础概念,适合入门. 1.下载 推荐 bower 或 npm 安装. bower install angular bower install angu ...

  3. 在CI框架下执行存储的方法

    我直接把代码摆在这里分享哈 <?php /** * * Created by JetBrains PhpStorm. * User: lsl * Date: 14-1-8 * Time: 下午2 ...

  4. opencv-python 学习笔记1:简单的图片处理

    一.主要函数 1. cv2.imread():读入图片,共两个参数,第一个参数为要读入的图片文件名,第二个参数为如何读取图片,包括cv2.IMREAD_COLOR:读入一副彩色图片:cv2.IMREA ...

  5. JavaEE Tutorials (13) - 使用锁定控制对实体数据的并发访问

    13.1实体锁定和并发概述180 13.1.1使用乐观锁定18113.2锁模式181 13.2.1设置锁模式182 13.2.2使用悲观锁定183

  6. CCNP路由实验(1) -- EIGRP

    EIGRP(Enhanced Interior Gateway Routing Protocol,增强型内部网关路由协议)是Cisco公司开发的一个平衡混合型路由协议,它融合了距离向量和链路状态两种路 ...

  7. 关于结构体和C++类的内存地址问题

    关于结构体和C++类的内存地址问题   今天终于有时间写点东西了~ 太爽了  *_*   很多人都知道C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样 ...

  8. C++读写文件流的相关介绍

    掌握文本文件读写的方法了解二进制文件的读写方法 C++文件流:fstream // 文件流ifstream  // 输入文件流ofstream  // 输出文件流 //创建一个文本文件并写入信息//同 ...

  9. Eclipse连接sql server 2012数据库编程一条龙

    一.java通过jdbc连接sql server 2012 原帖地址:http://blog.csdn.net/stewen_001/article/details/19553173/ 1.sql s ...

  10. 跨浏览器resize事件分析

    resize事件 原生事件分析 window一次resize事件: IE7 触发3次, IE8 触发2次, IE9 触发1次, IE10 触发1次 Chrome 触发1次 FF 触发2次 Opera ...