Canvas的绚烂起点

栏目: Html5 · 发布时间: 5年前

内容简介:很多人知道canvas,但不一定都熟悉或者经常使用,作为一种专项工具,如果业务不是跟图像或者图表强相关,的确不常用,但对它的学习和了解还是必要的,这篇文章我们就一起来入个门。可以理解为,它提供了一块画布,在它所掌控的区域,可以运用各种方法绘制图形、文本,或者制作动画、处理图像,等等。通常我们能够看到一些炫酷的动画,很多都是canvas做出来的,但是需要各种元素和技巧综合使用,不是一蹴而就的,我们先从基础看起。

很多人知道canvas,但不一定都熟悉或者经常使用,作为一种专项工具,如果业务不是跟图像或者图表强相关,的确不常用,但对它的学习和了解还是必要的,这篇文章我们就一起来入个门。

Canvas是什么

可以理解为,它提供了一块画布,在它所掌控的区域,可以运用各种方法绘制图形、文本,或者制作动画、处理图像,等等。

通常我们能够看到一些炫酷的动画,很多都是canvas做出来的,但是需要各种元素和技巧综合使用,不是一蹴而就的,我们先从基础看起。

搭好舞台

var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");

    <canvas id="canvas" width="150" height="150"></canvas>
复制代码

三行代码,完成舞台搭建。

绘制的几要素

位置:从哪里开始

路径:图形的轨迹

轮廓:绘制空心图形

填充:绘制实心区域

用代码来表达就是:

画笔位置——moveTo(x, y)

将画笔移动到指定的坐标x、y。

直线——lineTo(x, y)

绘制一条从当前位置到指定位置的直线。

圆弧——arc(x, y, radius, startAngle, endAngle, anticlockwise)

画一个以(x,y)为圆心、以radius为半径的圆弧(圆),从startAngle开始到endAngle结束,按照anticlockwise给定的方向(默认为顺时针)来生成。

矩形——rect(x, y, width, height)

绘制一个左上角坐标为(x,y),宽高为width以及height的矩形。

几个基本的图形就是这样了,还有一种比较复杂的是贝塞尔曲线。

二次贝塞尔——quadraticCurveTo(cp1x, cp1y, x, y)

三次贝塞尔——bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)

什么是较复杂的图形呢?比如:气泡、心形,或者其他不是很常规的形状,如使用上面的方法就较难实现,贝塞尔曲线更能胜任。

那其实除了这些,canvas还有两个动作要做,就是 开始结束 绘制的指令,分别是:

beginPath()和 closePath()

放在路径绘制的开端和末尾,就像这样:

ctx.beginPath();
    ctx.moveTo(125,125);
    ctx.lineTo(125,45);
    ctx.lineTo(45,125);
    ctx.closePath();
复制代码

(如果路径本身就是闭合的,可以省去closePath,但一般建议保留)

完成这些之后,就可以进行下一步,绘制轮廓,或者填充区域,当然,可以两者都做:

ctx.stroke();  //轮廓
    ctx.fill();   //填充
复制代码

除了这两个操作,还有其他的操作,比如设置色值、线宽、是否旋转等,后面做丰富示例时我们再一一介绍。

完整示例如下:

var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    ctx.beginPath();
    ctx.moveTo(125,125);
    ctx.lineTo(125,45);
    ctx.lineTo(45,125);
    ctx.closePath();
    ctx.stroke();//轮廓

    ctx.beginPath();
    ctx.arc(200, 200, 40, 0, 36, false);
    ctx.closePath();
    ctx.fillStyle="rgb(2,100,30)";//填充颜色
    ctx.fill();//填充
复制代码
Canvas的绚烂起点
Canvas的绚烂起点

这只是一个很简单的效果,我们也看到了路径之后其他设置项的出现,就是填充颜色,这只是其中之一,但这里暂时不详述,我们先看看,除了图形,canvas还能做什么?

文本和图片

文本很好实现,直接上代码:

ctx.font = "48px serif"; //字号、字体类型
    ctx.fillText("Hello world", 10, 300); // 文字内容和位置
复制代码

但其实文字也是有两种效果的,填充和轮廓,上面这种是填充:

Canvas的绚烂起点

如果把第二行代码换成:

ctx.strokeText("Hello world", 10, 50);
复制代码

就是轮廓了

Canvas的绚烂起点

除此之外,还有一些对齐方式和文本方向的设置,先略去。

来看看图片

图片分为两块,处理图片和绘制图片。

获取同页面内的图片不再赘述,跟通常的dom操作一样,看看创建图片的方法:

var img = new Image();   // 创建一个<img>元素
    img.src = 'myImage.png'; // 设置图片源地址
复制代码

获取或者创建了图像,怎么把它绘制到canvas里去呢?

drawImage(image, x, y)

其中 image 是 image 或者 canvas 对象,x 和 y 是其在目标 canvas 里的起始坐标。

比如我们可以把上面的代码写成这样:

var ctx = document.getElementById('canvas').getContext('2d');
        var img = new Image();
        img.onload = function(){
        ctx.drawImage(img,0,0);
        }
        img.src = '/img/canvas_intro/canvas_01.png';
复制代码

上面这段代码,我把当前页面的三角形拿了过来,就是跟前面那个效果一样的了

Canvas的绚烂起点

这里只是把图像放入我们的工作区,如果想在这个区域画别的图形亦可,代码接着往下写就好了,有时候这可以为我们节省成本,比如,稍复杂一点的图像作为背景,简单的图形作为前景画出。

那其实这个方法也不止这么简单,它有两个变种

缩放

drawImage(image, x, y, width, height)

即指定图像大小,也就是可以根据需要进行缩放。

裁切

drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)

一长串参数看着有点头皮发麻,但就因为这样,才能让我们去操作细节,它是用来裁切图像的。

前面四个用来处理图片源的剪切起始位置和大小,就跟我们平时截图一个道理,后面的参数,是将裁切后的图像,放置在画布的什么位置,以及那个区域的大小。如下所示:

Canvas的绚烂起点

小结

这篇文从零开始介绍了canvas的 工具 箱里有哪些工具,虽然尚不完整,作为开端,已经够多,先到这,更多功能我们下篇再聊~


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

增长黑客

增长黑客

范冰 / 电子工业出版社 / 2015-7-1 / CNY 59.00

“增长黑客”这一概念近年来兴起于美国互联网创业圈,最早是由互联网创业者Sean Ellis提出。增长黑客是介于技术和市场之间的新型团队角色,主要依靠技术和数据的力量来达成各种营销目标,而非传统意义上靠砸钱来获取用户的市场推广角色。他们能从单线思维者时常忽略的角度和难以企及的高度通盘考虑影响产品发展的因素,提出基于产品本身的改造和开发策略,以切实的依据、低廉的成本、可控的风险来达成用户增长、活跃度上......一起来看看 《增长黑客》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具