HTML教程 HTML教程HTML是什么HTML 代码编辑器HTML 基础标签HTML 元素HTML 属性HTML 标题HTML 段落HTML 文本格式化HTML CSSHTML 头部HTML链接HTML 图像HTML 区块和行内元素HTML 表格HTML 列表HTML 引用和定义元素HTML 计算机代码元素HTML 布局HTML 框架HTML 脚本/JavaScriptHTML 文件路径HTML 颜色HTML 字符(编码)和实体HTML URL(网址)HTML XHTMLHTML - Web服务器HTML空格符(空格的代码)HTML表单 HTML 表单HTML 表单属性HTML 表单元素HTML 表单input类型HTML 表单input属性HTML多媒体 HTML多媒体HTML5 教程 HTML5 教程 从入门到精通HTML5 拖放/拖拽HTML5 语义元素 HTML5 新的 Input 输入类型HTML5 新表单元素HTML5 新的表单属性HTML5 canvas画布HTML5 SVG矢量图形HTML5 Audio(音频)HTML5 Video(视频)HTML5 Web WorkersHTML5 存储HTML5 WebSocketHTML5 IndexedDBHTML5 IndexedDB增删改查HTML 参考手册 HTML 全局属性HTML 事件属性HTML 世界语言代码缩略词ascii码对照表HTML 完整的 ISO-8859-1 参考手册HTML 符号实体参考手册HTML 字符集HTML URL编码表HTML Canvas 参考手册SVG 参考手册HTML 音频/视频 document 参考手册

HTML5 canvas画布

<canvas>可绘制图形和图像、文字、路径等元素,<canvas>元素只是一个图形容器,但是要使用脚本 (通常是JavaScript)来完成。Canvas有几个常用方法分别是画图、boxes, circles, text, 和 adding images。

在画布上(Canvas)画三个不同颜色的圆形,渐变彩色矩形,填充文字,和图像。

微信图片_20220914010549.jpg

支持浏览器

IE 8 或更早版本的 IE 浏览器不支持 <canvas> 标签。

ChromeIEFirefoxsafarioprea

语法

<canvas>内容</canvas>

创建一个Canvas

创建一个矩形,使用css样式添加边框

canvas矩形

<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">您的浏览器不支持 HTML5 canvas 标签。</canvas>
注意默认情况下,<canvas>元素无边框无内容。在同一个页面中你可以有多个<canvas>元素。如果标签不支持则显示标签中间的内容。

运行代码

使用JavaScript在画布是绘图

设置一个用黄色为笔触的矩形

黄色笔触矩形

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>设置一个用黄色为笔触的矩形-HTML教程www.xuandaima.com</title>
</head>
<body>
       <canvas id="testCanvas" width="290" height="160" style="border:1px solid #d3d3d3;">
        您的浏览器不支持 HTML5的canvas标签。</canvas>
        <script>
        var c=document.getElementById("testCanvas");
        var ctx=c.getContext("2d");
        ctx.strokeStyle="#FFFF00";
        ctx.lineWidth=5;
        ctx.strokeRect(30,40,140,110);
        </script>
</body>
</html>

运行代码

案例说明
说明字段描述
document.getElementById("testCanvas")返回文档id属性为"testCanvas"的对象
getContext("2d") getContext() 返回画布上绘图的环境。getContext("2d") 返回绘制类型(2 维)的环境,未来可能会支持3维,但现在支持2维。
ctx.strokeStyle="#FFFF00"strokeStyle 属性设置用于笔触绘画的颜色、渐变或模式。这里设置笔触颜色,颜色为"#FFFF00"黄色
ctx.lineWidth=5; lineWidth 属性笔触大小,这里设置为5
ctx.strokeRect(30,40,140,110) strokeRect属性绘制"无填充"的矩形,绘制X坐标为30,Y坐标为40,矩形宽为140像素,矩形高为110像素。

Canvas 坐标

canvas 是一个二维网格。

canvas 的左上角坐标为 (0,0)

坐标实例

如下图所示,画布的 X 和 Y 坐标用于在画布上对绘画进行定位。鼠标移动的矩形框上,显示定位坐标。

Canvas - 路径

在Canvas上画线,我们将使用以下两种方法:

绘制线条我们必须使用到 "ink" 中的方法,就像stroke()

画一条线段

画直线

var c=document.getElementById("testCanvas");
        var ctx=c.getContext("2d");
  
        ctx.moveTo(80,40);
        ctx.lineTo(80,150);
        ctx.stroke();

运行代码

案例说明
说明字段描述
document.getElementById("testCanvas") 返回文档id属性为"testCanvas"的对象
getContext("2d")getContext() 返回画布上绘图的环境。getContext("2d") 返回绘制类型(2 维)的环境,未来可能会支持3维,但现在支持2维。
moveTo(80,40)设置线段的第一个点的路径(不含划线),X抽为“80”,Y抽为“40”
lineTo(80,150) 设置线段的第二个添加点的路径(不含划线),X抽为“80”,Y抽为“150”
stroke()以笔触的形式根据当前路径划线。


Canvas - 文本(Text)

在画布上添加文本, 最重要的属性和方法是:

使用fillText()方法:

绘制填色文本

填色文本

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font = "46px serif";
ctx.fillText("炫代码", 50, 50);

运行代码


案例说明
说明字段描述
document.getElementById("myCanvas2") 返回文档id属性为"myCanvas2"的对象
getContext("2d")getContext() 返回画布上绘图的环境。getContext("2d") 返回绘制类型(2 维)的环境,未来可能会支持3维,但现在支持2维。

font = "46px serif";

设置字体大小为46像素,字体为“serif”。
fillText("炫代码", 50, 50);

 绘制填色字体文字和字体位置,X轴为“50”Y轴为“50”。


Canvas - 渐变(Gradients)

渐变可用来填充矩形、圆形、直线、文本等.画布上的形状不仅限于固定颜色.

有两种不同的渐变:

一旦我们有了渐变对象, 我们必须添加两种或两种以上颜色.

addColorStop()指定颜色起止及梯度位置. 梯度位置可以在0到1之间.

使用渐变, 需要设置fillStyle或strokeStyle属性, 然后画图形,如矩形、文本或直线.

使用createLinearGradient()方法:

设置一个从橙色到黄色再到白色的渐变为填充的矩形

渐变填充矩形

var c=document.getElementById("testCanvas");
        var ctx=c.getContext("2d");
        var mygradient=ctx.createLinearGradient(0,0,160,0);
        mygradient.addColorStop(0,"orange");
        mygradient.addColorStop(0.5,"yellow");
        mygradient.addColorStop(1,"white");
        ctx.fillStyle=mygradient;
        ctx.fillRect(30,40,140,110);

运行代码


案例说明
说明字段描述
document.getElementById("testCanvas")返回文档id属性为"testCanvas"的对象
getContext("2d") getContext() 返回画布上绘图的环境。getContext("2d") 返回绘制类型(2 维)的环境,未来可能会支持3维,但现在支持2维。
createLinearGradient(0,0,160,0) createLinearGradient() 方法创建线性的渐变对象。渐变开始X坐标(0)Y坐标(0),渐变结束X坐标(160)Y坐标(0)
addColorStop(0,"orange")addColorStop() 规定渐变对象中的颜色和位置。0是位置(0.0到1.0之间),"orange"是颜色 橙色
addColorStop(0.5,"yellow") 规定第二种颜色"yellow"黄色,位置在百分之50(中间位置)。
addColorStop(1,"white") 规定第三种颜色"white"白色,位置在百分百(靠右位置)
ctx.fillStyle=mygradient fillStyle 属性定义为三种颜色的渐变颜色。
fillRect(30,40,140,110)fillRect() 绘制"已填充"的矩形,绘制X坐标为30,Y坐标为40,矩形宽为140像素,矩形高为110像素。


Canvas - 图片(Images)

canvas标签drawImage可在画布上绘制图象、画布、视频。 我们需要使用如下方法:

drawImage( 图片image,x坐标,y坐标 )

在画布上绘制图片

绘制图片

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("scream");
img.onload = function()
{
    ctx.drawImage(img,10,10);
}

运行代码


案例说明
说明字段
描述
document.getElementById("myCanvas2") 返回文档id属性为"myCanvas2"的对象
getContext("2d")getContext() 返回画布上绘图的环境。getContext("2d") 返回绘制类型(2 维)的环境,未来可能会支持3维,但现在支持2维。

var img=document.getElementById("scream");

 获取html文档id属性为"scream"的对象赋值给img变量。
img.onload = function()

图片在加载时执行以下函数

fillText(txt,10,50) 绘制txt变量字体为填充和字体位置,X轴为“10”Y轴为“50”。
ctx.drawImage(img,10,10)

drawImage绘制图像,img是图像对象,在画布X轴为“10”Y轴为“10”位置绘制。


html canvas标签
标签描述
<canvas>HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。


HTML Canvas 参考手册

标签的完整属性可以参考HTML Canvas 参考手册

SVG 与 Canvas的区别
SVG
Canvas
  • SVG 是一种使用 XML 描述 2D 图形的语言。

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

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

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

  • Canvas 是逐像素进行渲染的。

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

SVG 与 Canvas比较
SVGCanvas
  • 不依赖分辨率

  • 支持事件处理器

  • 最适合带有大型渲染区域的应用程序(比如谷歌地图)

  • 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)

  • 不适合游戏应用

  • 依赖分辨率

  • 不支持事件处理器

  • 弱的文本渲染能力

  • 能够以 .png 或 .jpg 格式保存结果图像

  • 最适合图像密集型的游戏,其中的许多对象会被频繁重绘