目录

画布(Canvas)

什么是 Canvas?

创建 Canvas 元素

通过 JavaScript 来绘制

理解坐标

更多 Canvas 实例

实例 - 线条

实例 - 圆形

实例 - 渐变

实例 - 图像

相关页面

SVG (Scalable Vector Graphics)

什么是 SVG?

SVG 的优势

浏览器支持

把 SVG 直接嵌入 HTML 页面

实例

Canvas vs. SVG

SVG

Canvas

Canvas 与 SVG 的比较

Canvas

SVG


画布(Canvas)


canvas 元素用于在网页上绘制图形。


什么是 Canvas?

HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。

画布是一个矩形区域,您可以控制其每一像素。

canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。


创建 Canvas 元素

向 HTML5 页面添加 canvas 元素。

规定元素的 id、宽度和高度:

<canvas id="myCanvas" width="200" height="100"></canvas>

通过 JavaScript 来绘制

canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:

<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.fillStyle="#FF0000";
cxt.fillRect(0,0,150,75);
</script>

JavaScript 使用 id 来寻找 canvas 元素:

var c=document.getElementById("myCanvas");

然后,创建 context 对象:

var cxt=c.getContext("2d"); 

getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

下面的两行代码绘制一个红色的矩形:

cxt.fillStyle="#FF0000";
cxt.fillRect(0,0,150,75); 

fillStyle 方法将其染成红色,fillRect 方法规定了形状、位置和尺寸。


理解坐标

上面的 fillRect 方法拥有参数 (0,0,150,75)。

意思是:在画布上绘制 150x75 的矩形,从左上角开始 (0,0)。

如下图所示,画布的 X 和 Y 坐标用于在画布上对绘画进行定位。

实例:把鼠标悬停在矩形上可以看到坐标


更多 Canvas 实例

下面的在 canvas 元素上进行绘画的更多实例:

实例 - 线条

通过指定从何处开始,在何处结束,来绘制一条线:

JavaScript 代码:

<script type="text/javascript">var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.moveTo(10,10);
cxt.lineTo(150,50);
cxt.lineTo(10,50);
cxt.stroke();</script>

canvas 元素:

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;">
Your browser does not support the canvas element.
</canvas>

亲自试一试

实例 - 圆形

通过规定尺寸、颜色和位置,来绘制一个圆:

JavaScript 代码:

<script type="text/javascript">var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.fillStyle="#FF0000";
cxt.beginPath();
cxt.arc(70,18,15,0,Math.PI*2,true);
cxt.closePath();
cxt.fill();</script>

canvas 元素:

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;">
Your browser does not support the canvas element.
</canvas>

亲自试一试

实例 - 渐变

使用您指定的颜色来绘制渐变背景:

JavaScript 代码:

<script type="text/javascript">var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
var grd=cxt.createLinearGradient(0,0,175,50);
grd.addColorStop(0,"#FF0000");
grd.addColorStop(1,"#00FF00");
cxt.fillStyle=grd;
cxt.fillRect(0,0,175,50);</script>

canvas 元素:

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;">
Your browser does not support the canvas element.
</canvas>

亲自试一试

实例 - 图像

把一幅图像放置到画布上:

JavaScript 代码:

<script>
window.onload = function() {var canvas = document.getElementById("myCanvas");var ctx = canvas.getContext("2d");var img = document.getElementById("scream");ctx.drawImage(img, 10, 10);
};
</script>

canvas 元素:

<canvas id="myCanvas" width="244" height="182" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.
</canvas>

亲自试一试


相关页面

参考手册:HTML 5 <canvas> 标签

参考手册:HTML DOM Canvas 对象


SVG (Scalable Vector Graphics)


HTML5 支持内联 SVG。


什么是 SVG?

  • SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
  • SVG 用于定义用于网络的基于矢量的图形
  • SVG 使用 XML 格式定义图形
  • SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失
  • SVG 是万维网联盟的标准

SVG 的优势

与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于:

  • SVG 图像可通过文本编辑器来创建和修改
  • SVG 图像可被搜索、索引、脚本化或压缩
  • SVG 是可伸缩的
  • SVG 图像可在任何的分辨率下被高质量地打印
  • SVG 可在图像质量不下降的情况下被放大

浏览器支持

Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持内联 SVG。


把 SVG 直接嵌入 HTML 页面

在 HTML5 中,您能够将 SVG 元素直接嵌入 HTML 页面中:

实例

<!DOCTYPE html>
<html>
<body><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="190"><polygon points="100,10 40,180 190,60 10,60 160,180"style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />
</svg></body>
</html>

亲自试一试

结果

如需学习更多有关 SVG 的知识,可以阅读 SVG 教程。


Canvas vs. SVG


Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的。


SVG

SVG 是一种使用 XML 描述 2D 图形的语言。

SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。

在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。


Canvas

Canvas 通过 JavaScript 来绘制 2D 图形。

Canvas 是逐像素进行渲染的。

在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。


Canvas 与 SVG 的比较

下表列出了 canvas 与 SVG 之间的一些不同之处。

Canvas

  • 依赖分辨率
  • 不支持事件处理器
  • 弱的文本渲染能力
  • 能够以 .png 或 .jpg 格式保存结果图像
  • 最适合图像密集型的游戏,其中的许多对象会被频繁重绘

SVG

  • 不依赖分辨率
  • 支持事件处理器
  • 最适合带有大型渲染区域的应用程序(比如谷歌地图)
  • 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
  • 不适合游戏应用

HTML画布与SVG(Canvas vs. SVG)相关推荐

  1. CSS第五天 (网格布局、内联框架 iframe、常用实体、画布Canvas 和 SVG、媒体)

    一.网格布局 (一).display 属性 display: grid;或者 display:inline-grid  表示网格布局 (二).grid-template-columns/-rows 属 ...

  2. HTML5 Canvas、内联 SVG、Canvas vs. SVG

    canvas 元素用于在网页上绘制图形. 什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canv ...

  3. HTML5 Canvas vs. SVG vs. div

    本文翻译自:HTML5 Canvas vs. SVG vs. div What is the best approach for creating elements on the fly and be ...

  4. HTML5的图像系统Canvas与SVG

    在HTML5之前,没有标准的提供可供Javascript脚本调用的图像系统,以前的做法通常是通过Div来画点.线.矩形这种非常"笨"的办法来变相的绘图,虽然很"笨&quo ...

  5. - Canvas 简介- 使用 Canvas 绘制图形- Canvas 常用方法- SVG 简介- 使用 SVG 绘制基本图形

    1 Canvas 简介 Canvas 表示画布,现实生活中的画布是用来作画的. HTML5 中的 Canvas :我们可以称它为"网页中的画布".默认情况下,Canvas 是一块 ...

  6. 前端4-2-10:Canvas与SVG之简介、对比总结

    目录 [先言] [题外话] [问题] 1.定义 关于SVG(详见什么是SVG) 关于Canvas 2.两者区别 Canvas SVG 对比列表 3.历史 4.功能 5.技术 [先言] [题外话] 本来 ...

  7. WebGL、canvas、svg

    文章目录 WebGL.canvas.svg 面试题 canvas 面试题 canvas位图和svg矢量图的区别 canvas的绘图原理 canvas.style.width和canvas.width区 ...

  8. Canvas VS . SVG

    SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的.您可以为某个元素附加 JavaScript 事件处理器. 在 SV ...

  9. 080_html5 Canvas和SVG

    1. Canvas和SVG都允许您在浏览器中创建图形, 但是它们在根本上是不同的. 2. SVG 2.1. SVG是一种使用XML描述2D图形的语言. 2.2. SVG基于XML, 这意味着SVG D ...

最新文章

  1. 运维学习之nfs系统文件服务
  2. 探索区块链-挖框体验
  3. java弹出窗放textarea_java中窗体上有一个Button和一个TextArea当鼠标经过按钮上的某一点时在文本框中输出该点的坐标事件...
  4. 安卓逆向工具apkide安装
  5. SAP MM 盘点单中‘AUn’标记的作用?
  6. mUrlPrefixes内entry的population逻辑
  7. java生成pdf加密_java使用iText 生成PDF全攻略(表格,加密)
  8. orm提取指定列_使用ORM提取数据很容易! 是吗?
  9. 对话猿辅导:阿里云远程办公零信任落地创新安全
  10. 设计模式之组合模式(Composite Pattern)
  11. python内存地址替换原理(20秒读懂)
  12. 课设2--线性表的操作
  13. 交叉验证(Cross Validation)简介
  14. 一条让人不安的坐地龙
  15. 720不能建立远程计算机连接,宽带连接错误720:不能建立到远程计算机的连接 正确解决方法...
  16. 训练赛 Discrete Logarithm Problem
  17. 宣传文本html,优秀的宣传语(精选50句)
  18. Pygame详解(二):display 模块
  19. 国家的mysql表_中国省份数据库+世界国家名数据库
  20. 【代码审计】PHP文件包含漏洞利用总结

热门文章

  1. 2021高校毕业生薪酬Top100出炉 !
  2. 重邮计算机专业毕业月薪多少,高校就业质量报告⑥ | 重庆邮电大学2020届毕业生月均收入6800元...
  3. java从高位到低位输出_任意输入一个正整数,从高位向低位依次输出,或从低位向高位依次输出(数组,调用函数两种方法)...
  4. 10只小白鼠1000支药水找出毒药问题
  5. NONMEM软件自定义模型
  6. 微信小程序性能优化方案
  7. 动态规划算法练习:蓝桥杯,洛谷的传纸条游戏的三种解法
  8. TextView(显示文本)
  9. FeedBurner: 使用RSS路由器的风险
  10. 什么是小波?小波是什么?