html5基础入门教程之canvas运用样式与颜色

ctx.fillStyle=‘rgb(255,221,0)’;

ctx.fillRect(10,0,150,37.5);

ctx.fillStyle=‘rgb(102,204,0)’;

ctx.fillRect(10,37.5,150,37.5);

ctx.fillStyle=‘rgb(0,153,255)’;

ctx.fillRect(10,75,150,37.5);

ctx.fillStyle=‘rgb(255,51,0)’;

ctx.fillRect(10,112.5,150,37.5);

//绘制上面大矩形内部的白色小矩形

for(var i=0;i<10;i++){

ctx.fillStyle=‘rgba(255,255,255,’+(i+1)/10+‘)’;

for(var j=0;j<4;j++){

ctx.fillRect(15+i14,5+j37.5,14,27.5);

}

}

}

}

上面的例子,先竖向绘制了四个大小一致、颜色分别为黄、绿、蓝、红的背景矩形。然后根据变量i和j在四个矩形内部分别以一定步长来绘制背景色为白色透明度不一的白色小矩形。

线型

canvas可以通过一定属性来设置线的样式。

lineWidth = value

lineCap = type

lineJoin = type

miterLimit = value

1.lineWidth属性

lineWidth用于设置当前绘制的线的粗细。属性值必须为正数。默认值为1.0。

注意,这里的线宽是指给定路径的中心到两边的粗细。换句话说就是:在路径的两边各绘制线宽的一半。

来看一个例子:

lineWidth

function draw(){

var canvas=document.getElementById(‘test_lineWidth1’);

if(canvas.getContext){

var ctx=canvas.getContext(‘2d’);

ctx.lineWidth=10;

ctx.strokeRect(20,20,80,100);

}

}

由上面的例子可以看出,线宽是由起始位置向两边扩展的。

2.lineCap属性

属性lineGap设置或返回了线条末端线帽的样式。

它有三个可选值,分别为:butt,这个值是默认的,表示向线条的每个末端添加平直的边缘;round,表示向线条的每个末端添加圆形线帽;square,表示向线条的每个末端添加正方形的线帽。

lineCap示例:

lineCap

function draw(){

var canvas=document.getElementById(‘test_lineGap’);

if(canvas.getContext){

var ctx=canvas.getContext(‘2d’);

var lineCap=[‘butt’,‘round’,‘square’];

//绘制上下两条水平参考线

ctx.strokeStyle=‘#09f’;

ctx.beginPath();

ctx.moveTo(10,10);

ctx.lineTo(140,10);

ctx.moveTo(10,140);

ctx.lineTo(140,140);

ctx.stroke();

//画线条

ctx.strokeStyle=‘black’;

for(var i=0; i<lineCap.length; i++){

ctx.lineWidth=15;

ctx.lineCap=lineCap[i];

ctx.beginPath();

ctx.moveTo(25+i*50,10);

ctx.lineTo(25+i*50,140);

ctx.stroke();

}

}

}

上面的例子从左到右绘制了三条竖线,它们的起点和终点都落在了蓝色辅助线上,lineCap属性分别为butt,round,square。第一条竖线,lineCap属性是默认的butt,它的端点是与辅助线齐平的;第二条竖线的lineCap属性为round,在端点处加了半径为一般线宽的半圆;第三条竖线的lineCap属性设置为square,在端点处加了等宽且高度为一半线宽的方块。

3.lineJoin属性

当一个路径包含了线段或曲线相交的交点时,lineJoin属性说明如何绘制这些交点。只有当绘制具有等宽线条的时候,这一属性的效果才能表现出来。

它的可选值有三个,分别是:round、bevel和miter。默认值是miter。

lineJoin示例:

function draw(){

var canvas=document.getElementById(‘test_lineJoin’);

if(canvas.getContext){

var ctx=canvas.getContext(‘2d’);

var lineJoin=[‘round’,‘bevel’,‘miter’];

ctx.lineWidth=10;

for(var i=0; i<lineJoin.length; i++){

ctx.lineJoin=lineJoin[i];

ctx.beginPath();

ctx.moveTo(-5,5+i*40);

ctx.lineTo(35,45+i*40);

ctx.lineTo(75,5+i*40);

ctx.lineTo(115,45+i*40);

ctx.lineTo(155,5+i*40);

ctx.stroke();

}

}

}

上面的例子,第一条折线的lineJoin属性值为round,可以看出在相交处边角被磨圆了,圆的半径等于线宽;第二条折线的lineJoin属性值为bevel,定点的外边缘和一个填充的三角形相交;第三条折线的lineJoin属性为默认的miter,两条线段的外边缘一直扩展到他们相交。当两条线段以一个锐角相交,斜角连接可能变得很长。miterLimit 属性为一个斜面的长度设置了上限。超过这一限制,斜面就变成斜角了。

4.miterLimit属性

miterLimit 属性设置或返回最大斜接长度。

斜接长度指的是在两条线交汇处内角和外角之间的距离。

miterlimit

注意:只有当 lineJoin 属性为 “miter” 时,miterLimit 才有效。

边角的角度越小,斜接长度就会越大。为了避免斜接长度过长,我们可以使用 miterLimit 属性。

如果斜接长度超过 miterLimit 的值,边角会以 lineJoin 的 “bevel” 类型来显示(图解 3):

miterlimit_bevel

语法:miterLimit=number;

内容层的展现是最主要的,无论背景层和贴图层有多少花哨,在设计师设计过程中,内容层对用户的展示是最优先的。

渐变

我们可以使用径向渐变或者线性渐变来填充或描边所绘制的图形。

1.线性渐变

createLinearGradient(xStart, yStart, xEnd, yEnd)

线性渐变有四个参数,其中xStart,yStart为渐变起始点的坐标;xEnd,yEnd为渐变结束点的坐标。

这个方法创建并返回了一个新的canvasGradient对象,它在指定的起始点和结束点之间线性的内插颜色值。

2.径向渐变

createRadialGradient(xStart, yStart, radiusStart, xEnd, yEnd, radiusEnd)

径向渐变有六个参数,其中xStart,yStart为开始圆的圆心坐标;radiusStart为开始圆的半径;xEnd, yEnd为结束圆的圆心坐标;radiusEnd为结束圆的半径。

这个方法创建并返回一个新的CanvasGradient对象,该对象在两个指定的圆周直接放射性的插值颜色。

注意,以上两个方法都没有为渐变指定任何颜色。使用返回对象的addColorStop()来设置颜色。要使用一个渐变来勾勒线条或填充区域,只需要把CanvasGradient对象赋给strokeStyle属性或fillStyle属性即可。

3.addColorStop()方法

上面提到了,addColorStop()方法在渐变中的抹一点添加一个颜色变化。语法格式如下:

addColorStop(offset,color)

offset是一个范围在0.0到1.0之间的浮点值,表示渐变开始点和结束点直接的一部分。offset值为0对应开始点,offset值为1对应结束点。

color以一个css颜色字符串的方式,表示在指定offset显示的颜色。

createLinearGradient示例:

createlinergradient

function draw(){

var canvas=document.getElementById(‘test_createLinearGradient’);

if(canvas.getContext){

var ctx=canvas.getContext(‘2d’);

var linergradient=ctx.createLinearGradient(0,0,0,150);

linergradient.addColorStop(0,‘#00abeb’); //起始点颜色值

linergradient.addColorStop(0.5,‘#fff’); //中间位置颜色值

linergradient.addColorStop(0.5,‘#26c000’); //中间位置颜色值

linergradient.addColorStop(1,‘#fff’); //结束点颜色值

ctx.fillStyle=linergradient; //填充颜色

ctx.fillRect(35,10,130,130);

}

}

上面这个例子,绘制了一个130*130的正方形,并且用线性渐变填充了颜色。设置了四个点的颜色值,形成了从蓝到白又从绿到白的渐变色。

createRadialGradient示例:

createradialgradient

function draw(){

var canvas=document.getElementById(‘test_createRadialGradient’);

if(canvas.getContext){

var ctx=canvas.getContext(‘2d’);

var radialgradient=ctx.createRadialGradient(45,45,10,52,50,30);

radialgradient.addColorStop(0,‘#a7d30c’);

radialgradient.addColorStop(0.9,‘#019f62’);

radialgradient.addColorStop(1,‘rgba(1,159,98,0)’);

ctx.fillStyle=radialgradient;

ctx.fillRect(0,0,150,150);

}

}

上面的例子中,在一个150*150方形上,填充了一个径向渐变。

图案

createPattern() 方法为贴图图像创建一个模式。其语法格式如下:

createPattern(image, repetitionStyle)

该方法接受两个参数,其中image为需要的图像。这个参数通常是一个Image对象,也可以使用一个canvas元素。repetitionStyle说明如何使用贴图。这个参数有四个取值,分别为:repeat,表示在各个方向上都对图像贴图;repeat-x,只在x方向上贴图;repeat-y,只在y方向上贴图;no-repeat,不贴图,只使用它一次。

creatPattern()方法创建并返回一个CanvasPattern对象,该对象表示一个贴图图像所定义的模式。要使用一个模式来勾勒线条或填充区域,可以把一个CanvasPattern对象用作strokeStyle属性或fillStyle属性。

注意,与drawImage不同,createPattern需要确认image对象已经加载完全,否则图案可能效果不对。

Firefox 目前只支持属性值repeat 。如果赋其它值,什么效果都没有的。

createPattern示例:

createPattern

function draw(){

var canvas=document.getElementById(‘test_createPattern’);

if(canvas.getContext){

var ctx=canvas.getContext(‘2d’);

var img=new Image();

img.src=‘http://cat7.cn/wp-content/pic/2014/0210/createlinergradient.jpg’;

img.οnlοad=function(){

var pattern=ctx.createPattern(img,‘repeat’);

ctx.fillStyle=pattern;

ctx.fillRect(0,0,200,200);

}

}

}

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-LXB8bAeU-1715403266395)]

[外链图片转存中…(img-zJech1vz-1715403266396)]

[外链图片转存中…(img-eZfdkifC-1715403266396)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值