web 前端Web前端之路

canvas学习总结(二)

2017-09-01  本文已影响31人  简单陌独

canvas学习总结(二)

一、样式设置

1、线条样式

canvas中提供了lineWidth的属性用于改变绘制出的线条宽度,语法为:

​ 画笔对象.lineWidth = 数值;

设置此属性时,数值可以不带单位(px),线宽一旦设置后,后面的图形将会一直使用该样式,除非手动去除或更改。

<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');
    //绘制参考线
    context.moveTo(300,0);
    context.lineTo(300,400);
    context.strokeStyle = 'red';//参考线颜色设置为红色
    context.stroke();
    //绘制线条
    context.strokeStyle = 'blue';//为形成对比将线条颜色改为蓝色
    //默认线条
    context.beginPath();
    context.moveTo(300,100);
    context.lineTo(500,100);
    context.stroke();
    //改变线宽
    context.beginPath();
    context.lineWidth = 40;//线宽变为40
    context.moveTo(300,250);
    context.lineTo(500,250);
    context.stroke();
</script>
线条宽度

2、线形设置

canvas中可以使用lineCap属性设置绘制出的线条形状,语法为:

​ 画笔对象.lineCap =‘butt||round||square’;

默认值为butt,不使用此属性时默认使用这种样式;

round线形两端为圆弧;

square属性值,线形两端为方形,由于此种样式与默认值样式类似,不建议使用;

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');
    //绘制参考线
    context.moveTo(300,0);
    context.lineTo(300,400);
    context.strokeStyle = 'red';
    context.stroke();
    //绘制线条
    //为了便于观察样式变化,改变线条宽度,并改变颜色
    context.lineWidth = 40;
    context.strokeStyle = 'blue';
    context.beginPath();
    //默认样式线条
    context.moveTo(300,50);
    context.lineTo(500,50);
    context.stroke();
    //样式值为butt,样式值为默认值,无变化
    context.beginPath();
    context.moveTo(300,150);
    context.lineTo(500,150);
    context.lineCap ='butt';
    context.stroke();
    //样式值为round,线条两端为弧形
    context.beginPath();
    context.moveTo(300,250);
    context.lineTo(500,250);
    context.lineCap ='round';
    context.stroke();
    //样式值为square,线条两端为方形
    //由于这种样式于默认状态较为相似,不建议使用
    context.beginPath();
    context.moveTo(300,350);
    context.lineTo(500,350);
    context.lineCap ='square';
    context.stroke();
</script>
线条样式

二、颜色设置

canvas默认的颜色为黑色,提供了两种属性更改描边的颜色以及填充的颜色。

1、描边颜色

语法:

​ 画笔对象.strokeStyle = 'color';

color的设置必须为字符串格式,可以使用英文单词,16进制颜色,rgb颜色,rgba颜色进行设置;

颜色设置之后,如果不手动改变设置,后续的图形会继续使用最近一次的设置进行描边。

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');
    //为了方便观察将线宽设置为20
    context.lineWidth = 20;
    //默认颜色
    context.beginPath();
    context.moveTo(100,0);
    context.lineTo(100,400);
    context.stroke();
    //线性颜色设置
    //英文单词颜色
    context.beginPath();
    context.moveTo(200,0);
    context.lineTo(200,400);
    context.strokeStyle = 'red';
    context.stroke();
    //16进制颜色
    context.beginPath();
    context.moveTo(300,0);
    context.lineTo(300,400);
    context.strokeStyle = '#03f20d';
    context.stroke();
    //rgb颜色
    context.beginPath();
    context.moveTo(400,0);
    context.lineTo(400,400);
    context.strokeStyle = 'rgb(0,255,255)';
    context.stroke();
    //rgba颜色
    context.beginPath();
    context.moveTo(500,0);
    context.lineTo(500,400);
    context.strokeStyle = 'rgba(255,0,255,0.5)';
    context.stroke();
</script>
线条颜色

2、填充颜色

语法:

​ 画笔对象.fillStyle = 'color';

color的值的设定与描边颜色相同,不手动更改,后续图形继续使用最近一次的设置进行填充。

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');

    //默认填充颜色
    context.fillRect(100,100,100,100);
    context.beginPath();
    //改变填充颜色
    //fillStyle与strokeStyle一样可以使用英文单词,16进制颜色,rgb颜色和rgba颜色进行设置。
    context.fillStyle = 'skyblue';
    context.fillRect(300,100,100,100);
</script>
填充颜色

三、阴影设置

canvas提供了一些属性用于绘制阴影,使得绘制出的图形更有立体感。

阴影

四、渐变

canvas提供了类似CSS3中的颜色渐变效果,需要在绘制图形之前创建一个渐变对象,设置一定的属性,最后将该对象赋值给颜色样式进行使用。

渐变分为线性渐变和径向渐变两种。

1、线性渐变

canvas的线性渐变是创建一个线性渐变对象之后,与这个对象平行的区域内的所有图形都会有线性渐变的效果。

线性渐变

2、径向渐变

相对与线性渐变,径向渐变是在创建的渐变区域内扩散的变化。与线性渐变类似,需要先创建一个渐变对象。

径向渐变

五、绘制文字

canvas中可以使用strokeText()或者fillText()进行文字的绘制。同时提供了文字样式的设置属性。

其中strokeText()绘制的是镂空文字,文字只有边框,fillText()绘制的是填充文字。

1、文字样式

font属性可以设置文字的大小和样式,语法:

​ 画笔对象.font = ‘size family’

其中size为字体的大小,family为字体样式,例如:

​ context.font = '40px 微软雅黑';

这样就将文字设置成了40px大小,微软雅黑字体。

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');
    //绘制参考线
    context.moveTo(300,0);
    context.lineTo(300,400);
    context.stroke();
    //设置字体大小和样式
    context.font = '40px 微软雅黑';
    //绘制镂空文字
    context.strokeText('镂空文字',300,100);
    //绘制填充文字
    context.fillText('填充文字',300,200);
</script>
文字样式

2、文字对齐方式

绘制出的文字除了可以设置大小和样式,还可以对文字的对齐方式进行设置。

2.1水平对齐方式

语法:

​ 画笔对象.textAlign = ‘left||center||right’;

默认状态为left,左对齐;

center为居中对齐;right为右对齐;

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');
    //绘制参考线
    context.moveTo(300,0);
    context.lineTo(300,400);
    context.stroke();
    //设置字体样式
    context.font ='30px 微软雅黑';
    //绘制字体
    //字体水平对齐设置textAlign
    //默认水平对齐方式为左对齐
    context.textAlign = 'left';
    context.fillText('left',300,100);
    //设置水平居中对齐
    context.textAlign = 'center';
    context.fillText('center',300,200);
    //设置水平右对齐
    context.textAlign = 'right';
    context.fillText('right',300,300);
</script>
水平对齐

2.2垂直对齐方式

语法:

​ 画笔对象.textBaseline = ‘top||middle||bottom’;

默认状态为基线对齐;

top为顶对齐;middle为中线对齐;bottom为底对齐;

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');
    //绘制参考线
    context.moveTo(0,200);
    context.lineTo(600,200);
    context.stroke();
    //设置字体样式
    context.font ='30px 微软雅黑';
    //绘制字体
    //字体垂直对齐设置textBaseline,默认垂直对齐方式为基线对齐
    //设置垂直顶部对齐
    context.textBaseline = 'top';
    context.fillText('top',100,200);
    //设置垂直居中对齐
    context.textBaseline = 'middle';
    context.fillText('middle',200,200);
    //设置垂直底部对齐
    context.textBaseline = 'bottom';
    context.fillText('bottom',400,200);
</script>
垂直对齐

3、应用(带文字折线图)

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');
    //模拟数据
    var dataArr = [17,63,12,90,98];
    //横坐标数据
    var monthArr = ['1月','2月','3月','4月','5月'];
    //绘制坐标系
    context.moveTo(50,50);
    context.lineTo(50,canvas.height-50);
    context.lineTo(canvas.width-50,canvas.height-50);
    context.stroke();
    //计算坐标
    //计算横坐标间隔
    var gapX = (canvas.width-100)/(dataArr.length-1);
    //存贮坐标的数组
    var pointArr = [];
    for(var i = 0;i<dataArr.length;i++){
        var x = 50+gapX*i;
        var y = canvas.height-50-(canvas.height-100)/100*dataArr[i];
        var point = {
            x: x,
            y:y
        }
        pointArr.push(point);
    }
    //绘制折线图
    context.beginPath();
    context.moveTo(pointArr[0].x,pointArr[0].y);
    for(var j = 1;j<pointArr.length;j++){
        context.lineTo(pointArr[j].x,pointArr[j].y);
    }
    context.stroke();
    //绘制文字
    for(var k = 0;k<monthArr.length;k++){
        context.textBaseline = 'top';
        context.textAlign ='center';
        context.fillText(monthArr[k],pointArr[k].x,350);
        //判断文字对齐方式
        if(dataArr[k]>dataArr[k+1]){
            context.textBaseline = 'bottom';
        }else{
            context.textBaseline = 'top';
        }
        context.textAlign = 'left';
        context.fillText(dataArr[k],pointArr[k].x,pointArr[k].y);
    }
</script>
折线图

六、绘制图片

除了自己绘制图形和文字,面对一些复杂的图形,可以使用制作好的图片,因此canvas提供了绘制图片的的方法。

在绘制之前需要创建一个图片对象,并且在图片加载完成之后再进行绘制。

canvas绘制图片使用drawImage()方法,根据传入的参数不同分为三参数,五参数和九参数。

1、三参数

三参数,即传入drawImage()的参数为三个,分别为element,x,y,语法:

​ 画笔对象.drawImage(element,x,y);

其中,element为图片对象,x,y为绘制的起点坐标。

三参数模式是将图片原封不动的绘制到画布上。

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
//创建图片对象
var imges = new Image();
imges.src = 'img/gls.jpg';
//图片加载完成
imges.onload = function () {
    //三参数模式
    /*context.drawImage(imges,x,y);
    element为图片对象
    x,y为图片绘制的起始坐标点
    三参模式是将图片原封不动的画在画布上
    * */
    context.drawImage(imges,0,0);
}
</script>
三参数

2、五参数

五参数,即传入五个参数,分别为element,x,y,w,h,语法:

​ 画笔对象.drawImage(element,x,y,w,h);

其中,element为图片对象,x,y为绘制的起点坐标,w,h为绘制的宽高。

五参数模式会对图片进行缩放处理。

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
//创建图片对象
var images = new Image();
images.src = 'img/pig.jpg';
//图片加载完成
images.onload = function (){
    //绘制图片-五参数模式
    /*context.drawImage(element,x,y,w,h);
    element为图片对象
    x,y,w,h为图片绘制的起始坐标和绘制宽高,五参模式可以对图片进行缩放处理
    */
    context.drawImage(images,0,0,300,200);
}
</script>
五参数

3、九参数

九参数,即传入九个参数,分别为element,x0,y0,w0,h0,x1,y1,w1,h1,语法:

​ 画笔对象.drawImage(element,x0,y0,w0,h0,x1,y1,w1,h1);

其中,element为图片对象,x0,y0为图片绘制的起点坐标,w0,h0为图片绘制的宽高,x1,y1为画布上绘制的起点坐标,w1,h1为绘制在画布上的宽高。

九参数模式会对图片进行切割处理。

<canvas id="canvas" width="600px" height="400px"></canvas>
<script>
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
//创建图片对象
var images = new Image();
images.src = 'img/pig.jpg';
//图片加载
images.onload = function(){
    //绘制图片-九参数模式
    //context.drawImage(element,x0,y0,w0,h0,x1,y1,w1,h1);
    /*
    element为图片对象,x0,y0,w0,h0为截取图片的坐标起始位置和截取图片的宽高;
     x1,y1,w1,h1为截取图片绘制在画布上的坐标起始位置和绘制的宽高
     九参模式可以对图片进行切割处理
    */
    context.drawImage(images,800,400,300,200,0,0,150,100);
}
</script>
原图 九参数
上一篇下一篇

猜你喜欢

热点阅读