内裤总动员之程序猿的小常识--canvas

canvas


画布的流程写法:最简单的写法

1:需要在项目中创建canvas.并给与宽高

2:canvas是依赖于js的. 获取元素的时候一般情况下都是用原声JS 获取

3:获取元素  var canvas = document.getElementById('~~');

4:获取上下文对象  也就是画笔 var ctx = canvas.getContext('2d');

5:开始绘制 ctx.beginPath();

6:设定开始位置: ctx.moveTo(x,y);

7:设定结束位置: ctx.lineTo(x,y);

8:结束绘制 ctx.closePath();

9: 绘制生成:  ctx.stroke();


canvas 设置线的宽度 颜色 线圆角

ctx.lineWidth = 10;

ctx.strokeStyle='red';

ctx.lineCap='round'; 而 lineCap  有三个属性 butt round square

在这里 如果没有结束绘制 closePath();  lineCap 他只管两点的圆, 而 lineJoin 他只管两点之间的圆.


canvas 画图形

ctx.fill();  位置在第九步.

ctx.fillStyle = 'red ' ; 更改颜色

如果想设置图形 还想再加上边线     在结尾 添加 ctx.stroke();即可  样式也是可以设置.


绘制矩形图形

ctx.fillRect(x,y,w,h);  x代表left, y代表 top, w代表宽  h代表高  然后 ctx.fill();调用即可  如果想添加样式需要在绘制前去添加一些样式

绘制矩形边框    ctx.strokeRect(x,y,w,h);  代表如上.


绘制圆形

ctx.arc(x,y,r,起始位置,结束位置,逆时针或者顺时针true or  false);  x代表left,y代表top,r代表半径, 起始位置圆都是默认为0,就算你把起始位置的元素这是为100, 圆的绘制也会从0开始计算.  结束位置为当前结束点. 顺时针和逆时针用 true和false 来标示.



var canvas = document.getElementById('canvas');

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

ctx.fillStyle = 'red';

ctx.BeginPath();

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

ctx.closePath();

ctx.fill();
var canvas = document.getElementById('canvas');


绘制文字

ctx.fillText(文字,x,y,maxwidth);  文字设置为:文字对象,x代表left,y代表top. maxwidth:最大宽度

ctx.font='30px 宋体'  30px代表文字大小   宋体为设置字体样式.

ctx.textAlign=' ~~~'; 此属性设置当前文字的水平对齐方式   有  left/start  center  right/end  

ctx.textBaseline = '~~'; 此属性设置设置当前文字的垂直对齐方式     top     middle  bottom



绘制图片

1:创建图片   

var imgs = new Image();

2:图片加载

imgs.onload = function(){

ctx.drawImage(this,0,0,500,500);

}

imgs.src = 'img/1.jpg';

ctx.drawimage(img,sx,sy,sw,sh,dx,dy,dw,dh);

img:为当前图片对象也可为this, sx,为原图片的left,sy为原图片的top,sw为原图片的宽,sh为圆图片的高. dx为现当前的left, 而且在这里也特别说明,如果需要绘制图片,需要用到onload方能够加载到图片上.


动画制作

例:在画布中让一个矩形移动起来.

setintval(){function(){},16}  此方法嵌套函数来对当前的矩形框的left 和top进行移动即可. 而在进行移动的时候,你或许会需要用到 clearRect(x,y,w,h)这个属性哦.  此属性的功能为:删除指定位置的像素.  里面的x代表当前的left,y带表top, w代表宽,h代表高.  为何需要clearRect()呢?  因为我们在画布移动的时候,x和y轴绘画的时候他会在原点有遗留保存当前的绘画, 也就是相当于让你绘画了一个矩形,而他在移动的时候,上一次的位置他是不会消失的.所以,动画的制作起来, 基本是相当于我们画一次,删除一次,画一次,删除一次..........没有错,就是这么麻烦.


贝塞尔曲线

贝塞尔曲线,个人还真的不太好去解释他是干啥的. 但是他往往情况下代表的是当前动画的移动速度. 说白了. 你可以理解为他是控制加速度的一种图形曲线. 如果你想详细的去百度了解一下.

二次贝塞尔

方法:quadraticCurveTo(cpx,cpy,x,y);

二次贝塞尔曲线需要两个点。第一个点是用于二次贝塞尔计算中的控制点,第二个点是曲线的结束点。

cpx:代表控制点的X坐标;

cpy:代表控制点的y坐标;

x:代表结束点的x坐标;

y:代表结束点的y坐标;

内裤总动员之程序猿的小常识--canvas_第1张图片
二次贝塞尔

三次贝塞尔

方法:bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);

cp1x:第一个贝塞尔控制点的 x 坐标;

cp1y:第一个贝塞尔控制点的 y 坐标

cp2x:第二个贝塞尔控制点的 x 坐标

cp2y:第二个贝塞尔控制点的 y 坐标

x:结束点的 x 坐标

y:结束点的y坐标

开始点:moveTo(20,20)

控制点 1:bezierCurveTo(20,100,200,100,200,20)

控制点 2:bezierCurveTo(20,100,200,100,200,20)

结束点:bezierCurveTo(20,100,200,100,200,20)


内裤总动员之程序猿的小常识--canvas_第2张图片
三次贝塞尔曲线

你可能感兴趣的:(内裤总动员之程序猿的小常识--canvas)