如何使用canvas绘图

字节拓荒者
• 阅读 1830

这里是修真院前端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析前端知识/技能,本篇分享的是:

【如何使用canvas绘图】

1.背景介绍

Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表、动画等。

没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和Flash进行交互。有了Canvas,我们就再也不需要Flash了,直接使用JavaScript完成绘制。

2.知识剖析

2.1 canvas的兼容性

Internet Explorer 9+, Firefox, Opera, Chrome 以及 Safari 支持 标签。

2.2 canvas的一些基本属性

首先得说下width和height属性了,这是在canvas中必备的属性。

width:画布的高度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口高度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。;默认值是 300。

height:画布的宽度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口宽度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。默认值是 width的一半。

123

如何利用dom绘出一些简单的图

在这里就需要用到一些属性:

fillStyle:设置或返回用于填充绘画的颜色、渐变或模式。比如说绘制一个渐变色的矩形

fillRect(x,y,width,height):从坐标(x,y)处绘制一个长度为width,宽度为height的填充矩形

demo1 制作渐变矩形

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

var demo1=a.getContext("2d");

var my_gradient=demo1.createLinearGradient(0,0,0,170);

my_gradient.addColorStop(0,"red");

my_gradient.addColorStop(1,"blue");

demo1.fillStyle=my_gradient;

demo1.fillRect(20,20,150,100);

strokeStyle:设置或返回用于笔触的颜色、渐变或模式。

strokeRect(x,y,width,height):从坐标(x,y)处绘制一个长度为width,宽度为height的矩形边框

line-width:表示边框宽度

canvas里面还可以添加一些文本属性,比如说font,textAlign,textBaseline等等

demo2制作渐变矩形框

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

var demo2=b.getContext("2d");

var gradient=demo2.createLinearGradient(0,0,170,0);

gradient.addColorStop("0","#FFF");

gradient.addColorStop("0.5","blue");

gradient.addColorStop("1.0","red");

// 用渐变进行填充

demo2.strokeStyle=gradient;

demo2.lineWidth=10;//边框宽度

demo2.strokeRect(20,20,150,100);

demo3 使用font, textAlign属性

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

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

// 在位置 150 创建蓝线

ctx.strokeStyle="blue";

ctx.moveTo(150,20);

ctx.lineTo(150,170);

ctx.stroke();

ctx.font="15px Arial";

// 显示不同的 textAlign 值

ctx.textAlign="start";

ctx.fillText("textAlign=start",150,60);

ctx.font="40px Arial";

ctx.textAlign="end";

ctx.fillText("textAlign=end",150,80);

ctx.textAlign="left";

ctx.fillText("textAlign=left",150,100);

ctx.textAlign="center";

ctx.fillText("textAlign=center",150,120);

ctx.textAlign="right";

ctx.fillText("textAlign=right",150,140);

2.3 canvas中的一些常用方法

1).lineTo():添加一个新点,然后在画布中创建从该点到最后指定点的线条

2).moveTo():把路径移动到画布中的指定点,不创建线条

3).stroke():绘制已定义的路径

demo4 canvas显示路径;

var canvas = document.getElementById('myCanvas'); //获取上下文对象,canvas很多常用方法都是基于这个对象实现的

var context = canvas.getContext("2d"); //目前参数只有2d

context.lineWidth = 5;  //线条宽度

context.moveTo(10,10);  //光标移到这点

context.lineTo(10,50);  //下一点坐标

context.lineTo(100,50);  //下一点坐标

context.stroke();        //绘制路径

4).beginPath():起始一条路径,或重置当前路径

5).arc():创建弧/圆线

6).closePath():创建从当前点回到起始点的路径

demo5.绘制三角形

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

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

ctx.beginPath();

ctx.moveTo(20,20);

ctx.lineTo(20,100);

ctx.lineTo(70,100);

ctx.closePath();

ctx.stroke();

3.常见问题

图像能不能放到canvas上?

4.解决方案

可通过使用drawImage(image,x,y)就可以将图像放到canvas上,然后在canvas内设置宽高,就可以将图像放到画布中。

demo6.利用canvas渲染图片

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

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

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

img.onload = function() {

ctx.drawImage(img,0,0);

}

5.编码实战

6.扩展思考

在上个demo中发现如果设置canvas标签css的width,height与在canvas中设置width,height不一样,这是为什么?

高度和宽度是用于绘图的逻辑帆布尺寸和是不同的距离style.height和style.widthCSS属性。如果不设置CSS属性,画布的本征大小将被用作显示大小; 如果设置CSS属性,并且它们与画布尺寸不同,则您的内容将在浏览器中缩放。

7.参考文献

参考一:https://stackoverflow.com/que... width,style height的区别

参考二:http://www.runoob.com/html/ht... Canvas | 菜鸟教程

参考三:http://www.w3school.com.cn/ht... HTML5标签Canvas

点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
3年前
手把手教你使用CanvasAPI打造一款拼图游戏
一、canvas简介1.canvas是HTML5提供的一种新标签,双标签;2.HTML5 canvas标签元素用于图形的绘制,通过脚本(通常是JavaScript)来完成;3.canvas标签只是图形容器,必须使用脚本来绘制图形;Canvas是一个矩形区域的画布,可以用JavaScript在上面绘画;二、案例目标我们今天的目标是使用HTML5
Python进阶者 Python进阶者
3年前
Canvas之鼠标滑动特效
大家好,我是皮皮。我们会看到很多网页的粒子特效;如上图所示,这些都是借助HTML新特性,使用新增标签Canvas得到的效果;那么我们来了解下canvas。什么是Canvas在MDN中是这样定义  的: 是HTML5新增的元素,可用于通过使用JavaScript中的脚本来绘制图形。例如,它可以用于绘制图形、制作照片、创建动画,甚至可以进行实时
Stella981 Stella981
3年前
H5中canvas和svg绘图方式介绍
在HTML5中包括了两种绘图方式,canvas和svg(矢量呈现),而与canvas不同的是,svg是一种XML标记语言,它既可以单独保存以“.svg”为后缀的文件在浏览器中打开显示,也支持建立svg标签直接嵌入在网页中显示,还可以通过<embedsrc"文件.svg"name"name自命"type"image/svgxml"height
Stella981 Stella981
3年前
HTML5 canvas标签详解
转载:<canvas\是html5当中的一个标签,通过Javascript来画图。<canvasid”canvas”width”150″height”150″</canvas<scriptvarcanvasdocument.getElementById(”canvas”);varctxc
Stella981 Stella981
3年前
Canvas和SVG的区别
Canvas和SVG是html5支持的两种可视化技术。基于这两种技术,诞生了很多可视化工具。Echarts是基于Canvas技术的可视化工具,底层封装了原生的JavaScript的绘图API。我们很容易联想到另一个同样很优秀的web前端可视化库D3,D3是也最流行的可视化库之一,它被很多其他的表格插件所使用。D3底层基于SVG技术,与Canvas完全不
Wesley13 Wesley13
3年前
HTML5实现绘制几何图形
HTML5新增了一个<canvas.../属性。该元素自身并不绘制图形,只是相当于一张空画布。如果开发者需要向<canvas.../上绘制图形则必须使用JavaScript脚本进行绘制。为了向<canvas.../元素上绘图,必须经过如下3步。获取<canvas.../元素对应的DOM对象,这是一个Canvas对象。调用Canvas对象
Stella981 Stella981
3年前
HTML5中Canvas元素的使用总结
HTML5中Canvas元素的使用总结  Canvas提供了开发者自定义绘图的接口,我们可以公国getContext()函数来获取绘图上下文进行绘制操作,这个函数中可以传入两个参数,其中第1个参数设置绘图上下文的类型,比较常用的是"2d",我们也可以使用"webgl"来使用webOpenGL实现3D绘制。本篇博
Stella981 Stella981
3年前
HTML5 & CSS3 初学者指南(4) – Canvas使用
介绍传统的HTML主要用于文本的创建,可以通过<img标签插入图像,动画的实现则需要第三方插件。在这方面,传统的HTML极其缺乏满足现代网页多媒体需求的能力。HTML5的到来,带来了新的成员<canvas标签。什么是Canvas?HTML5的Canvas 元素使用JavaScript在网页上绘制图像。
Stella981 Stella981
3年前
AudioContext技术和音乐可视化(2)
Intro转载请注明来源,可以在测试博客(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fthzxj.club)查看完成效果。本篇讲述如何绘制动态的星空,其实关联到频域数据已经没什么悬念了。一、使用Canvas绘图1.1位
Easter79 Easter79
3年前
TiDB 增加 MySQL 内建函数
作者:申砾本文档用于描述如何为TiDB新增builtin函数。首先介绍一些必需的背景知识,然后介绍增加builtin函数的流程,最后会以一个函数作为示例。背景知识SQL语句在TiDB中是如何执行的。SQL语句首先会经过parser,从文本parse成为AST(抽象语法树),通过optimize