canvas画布

canvas是一张画布标签只是容器,没有自己的行为,必须用脚本来绘制

canvas是一个基于JavaScript的绘图API

默认大小:300 * 150 IE9之前不支持该标签
cavas:提供了一个可以绘制的区域 具体的操作需要使用脚本(JS)
width和height 分别设置画布的范围(宽和高) 在body中设置

 

 

 

canvas所有的绘画步骤全部在js中完成

 

 

window.onload = function () {


 (1)获取画布对象
var canvas = document.getElementById('canvas');

(2)获取画笔(绘制环境)
 上下文
var context = canvas.getContext('2d');

 

 

JQ中 2d必须要小写

$(function(){
  var contains('canvas').getContext('2d');
})

 

(3)设置画笔的样式
 设置图像填充颜色

context.fillStyle = 'pink';

4, 设置的是描边的样式
context.strokeStyle = 'red';

5, 设置线条的宽度
context.lineWidth = 10;

 

绘画线段

 

(1)开启路径
context.beginPath();


 2,绘制线条的起始点坐标
context.moveTo(100, 100);


3,设置线条的拐点  线段可以连接成三角形和多边形
context.lineTo(200, 200);
context.lineTo(300, 200);

 

4,封闭路径

a),手动封闭图形(连到原点)
 context.lineTo(100, 100);

b),闭合路径 如果图形还未绘制,会将图形的起始点和终点链接
context.closePath();

 

5,根据给定的坐标 将线条描边
context.stroke();

6, 填充
context.fill();

 

 

 

 

绘制矩形
x y width height

 超出画布范围的内容不会显示
1,填充矩形(实心)
context.fillRect(100, 100, 100, 100);

 2,镂空矩形(空心) 边框不占用内容大小
context.strokeRect( 220, 220, 120, 80);

context.beginPath();  开始
context.rect(200, 220, 100, 200);
context.closePath();
context.stroke();
context.fill();
 strokeRect() fillRect()

 绘制圆形

2PI = 360°
圆心xy  半径 开始的弧度 结束的弧度 是否是逆时针
true:表示逆时针
3点钟:0或者Math.PI*2 6点钟:Math.PI/2 9点钟:Math.PI 12点:Math.PI 3*/2

开启路径
context.beginPath();

 画圆
context.arc(100, 300, 50, 0, Math.PI/2, false);

描边
context.stroke();
 填充
context.fill();

关闭路径
context.closePath()

 

 

 

 

线性渐变 createLinearGradient(起点坐标, 终点坐标) 该方法会返回一个渐变对象(线性渐变路径, 颜色);
 (1)创建线性渐变对象 设置渐变路径坐标
 渐变路径与渐变颜色始终垂直

声明obj

var obj = ctx.createLinearGradient(50, 0, 250, 200);

设置线性渐变对象的渐变颜色

参数1, 参数2: 层次(0-1) 颜色
obj.addColorStop(0, 'red');
obj.addColorStop(0.4, 'orange');
 obj.addColorStop(0.8, 'pink');
obj.addColorStop(1, 'lightpink');

填充的参数等于上面声明的obj
 ctx.fillStyle = obj;

画一个矩形来盛放上面的渐变颜色,也可以是圆形多边形等
 ctx.fillRect(150,100, 100, 100);

 

 

径向渐变 

(第一个圆新坐标xy半径,第二个圆心坐标xy半径)

第二个圆心半径为0时就是代表到圆的最边

var obj = ctx.createRadialGradient(100, 100, 100, 100, 100, 0);
obj.addColorStop(0, 'red');
obj.addColorStop(0.4, 'orange');
obj.addColorStop(0.8, 'pink');
obj.addColorStop(1, 'lightpink');

ctx.fillStyle = obj;

ctx.arc(100, 100, 100, 0, 2*Math.PI);
ctx.fill();

 

 

转换canvas坐标  坐标上的内容有也会跟着转

此方法可以保存当前的绘图环境 坐标系的转换
context.save();

转换操作---本质都是在转换坐标系
 (1)scale() 缩放 sx(水平方向的缩放比例), sy(垂直方向的缩放比例)
 修改的是坐标系(严格意义上修改的是绘图环境 context)

x轴缩小一半,y轴放大两倍


context.scale(0.5,2);

 

(2)rotate() °
180°/180 = 1°   360°=2PI,先算出来一度再乘以20就是想要的度数
旋转了坐标系本身


context.rotate(20* Math.PI / 180);

 

(3)translate()

重新映射画布上的0,0位置,
context.translate(100, -50);

开启绘画路径
context.beginPath();

画一个矩形
context.fillRect(100, 100, 100, 100);

封锁路径
context.closePath();

 

// 恢复绘图环境

保存之前的绘图环境,重新绘画新的形状,圆点依然是0,0,不受其他已画好的图片的影响,重新画东西继续旋转缩放等操作
ctx.restore();

ctx.beginPath();
ctx.moveTo(100, 250);
ctx.lineTo(100, 350);
ctx.lineTo(200, 350);
ctx.closePath();
ctx.stroke();


ctx.beginPath();
ctx.fillRect(100, 100, 100, 100);
ctx.closePath();

 

文本信息的相关设置
context.fillStyle = 'red';
context.strokeStyle = 'white';


 font属性可以设置context的字体大小 字体样式(安装过字体包)
ctx.font = '50px 黑体';


文本信息 绘制文本的位置
ctx.fillText('明天要下雪!', 100, 100);   实心
ctx.strokeText('明天要下雪!', 100, 100);  空心

 

 

绘制图片

 (1)创建图片对象
var img = new Image();
(2)设置图片源
img.src='yasuo.jpg';  图片地址

(3)图片的绘制必须等待图片加载完成之后
img.onload = function () {
3-9个参数
如果不给定大小, 图片默认按照原来的大小,超出画布的部分不再显示
参数:图片对象, 起始点坐标 ,图片的大小
context.drawImage(img, 50, 50, 100, 50);//常用的用法
console.log(11);  打印一下看有没有走这一步
在图片上选取范围进行绘制
参数:图片对象 选取的范围 位置 图片大小
context.drawImage(img, 0, 120, 220, 120, 50, 50, 200, 200);
}

 

posted @ 2016-11-18 21:35  星星**  阅读(213)  评论(0)    收藏  举报