2024年最新html5基础入门教程之canvas绘制图形,2024年最新面试经验分享会

Vue

  • 什么是MVVM?

  • mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?

  • 组件之间的传值?

  • Vue 双向绑定原理

  • 描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?

  • 虚拟 DOM 实现原理

  • Vue 中 key 值的作用?

  • Vue 的生命周期

  • Vue 组件间通信有哪些方式?

  • vue 中怎么重置 data?

  • 组件中写 name 选项有什么作用?

  • Vue 的 nextTick 的原理是什么?

  • Vuex 有哪几种属性?

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

fill()方法用于填充路径,默认是黑色。fill()方法使用fillStyle属性所指定的颜色、渐变和模式来填充当前路径。当调用该方法时,开放的路径会自动闭合。

绘制路径需要经过下面四个步骤:

第一步:用beginPath创建一条路径。

第二步:实际绘制路径的部分。

第三步:调用closePath方法关闭路径。如果图形已闭合或者它只是一个点,那么这个方法将什么也不会做。这一步不是必须的

第四步:调用stroke或fill方法,绘制边框或者填充路径。

绘制路径示例:

path

function draw(){

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

if(canvas.getContext){

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

cxt.beginPath();

cxt.moveTo(75,50);

cxt.lineTo(100,75);

cxt.lineTo(100,25);

cxt.fill();

}

}

上面这个例子,绘制了一个三角形。首先,利用beginPath()方法创建一条路径;moveTo()方法将点移动到坐标(75,50)(moveTo()方法接下来就会讲到);lineTo()方法画了两条直线;最后调用fill()方法填充路径,调用了这个方法后,路径就自然闭合了,所以不必再调用closePath()方法来闭合路径。

moveTo()方法

上面的例子有用到moveTo()这个方法,这边就来说说moveTo()方法。语法如下:

moveTo(x,y)

moveTo()方法用于定位绘画的位置,即将点移动到参数x,y所指定的坐标位置。

canvas初始化或者调用了beginPath()方法时,绘画开始的位置即原点(0,0),使用moveTo()方法,我们可以将起始位置移动到任何我们想要的地方。

moveTo()的使用实例:

moveTo

function draw(){

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

if(canvas.getContext){

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

cxt.beginPath();

cxt.arc(75,75,50,0,Math.PI*2,true);

cxt.moveTo(100,75);

cxt.arc(75,75,35,0,Math.PI,false);

cxt.moveTo(65,65);

cxt.arc(60,65,5,0,Math.PI*2,true);

cxt.moveTo(95,65);

cxt.arc(90,65,5,0,Math.PI*2,true);

cxt.stroke();

}

}

绘制各种线条

用lineTo()方法来画直线。

lineTo()方法接受终点的坐标(x,y)作为参数。起始坐标取决于前一路径的终点坐标。当然,起始坐标也可以通过前面介绍的moveTo()方法来设置。

绘制线条示例:

lineTo

function draw(){

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

if(canvas.getContext){

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

cxt.beginPath();

cxt.moveTo(25,25);

cxt.lineTo(105,25);

cxt.lineTo(25,105);

cxt.fill(); //fill填充路径,会自动闭合路径。

cxt.beginPath();

cxt.moveTo(125,125);

cxt.lineTo(125,45);

cxt.lineTo(45,125);

cxt.closePath();

cxt.stroke(); //stroke不会闭合路径,所以再描边先要先闭合路径

}

}

上面的例子利用lineTo()方法绘制了两个三角形。从这个例子也可以看出fill和stroke的区别。

绘制弧线

用arc方法来绘制弧线或圆。

arc(x, y, radius, startAngle, endAngle, anticlockwise)

该方法接受五个参数。其中,x,y是圆心坐标;radius是圆的半径;startAngle和endAngle分别是起末弧度(以x轴为基准);anticlockwise为true表示逆时针,反之为顺时针。

这边有一点是需要注意的,就是arc方法里的角度是以弧度为计算单位的,不是度。这么说吧,通常我们说的180度,就等价于PI。两者的计算公式是这样的:radians=(Math.PI/180)*degrees.(其中,radians代表弧度,degrees代表度)

绘制圆弧示例:

arc

function draw(){

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

if(canvas.getContext){

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

for(var i=0; i<4; i++){ //输出4行4列的矩阵

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

ctx.beginPath();

var x=25+j*50; //圆心x坐标

var y=25+i*50; //圆心y坐标

var radius=20; //半径

var startAngle=0; //起始弧度

var endAngle=Math.PI/2+(Math.PI*j)/2; //结束弧度

var anticlockwise=i%2==0?false:true; //奇数行顺时针;偶数行逆时针。

ctx.arc(x,y,radius,startAngle,endAngle,anticlockwise); //循环绘制圆/圆弧

if(i>1){

ctx.fill(); //3,4行填充图案

}else{

ctx.stroke(); //1,2行仅勾勒路径

}

}

}

}

}

上面这个例子,用双层循环输出了4*4的圆弧矩阵。

贝塞尔和二次方曲线

最后,要说的是贝赛尔曲线,它可以是二次和三次的形式,一般用于绘制复杂而有规律的形状。

二次贝赛尔曲线:

quadraticCurveTo(cpx, cpy, x, y)

其中,cpx指控制点的x坐标;cpy指控制点的y坐标;x指结束点的x坐标;y指结束点的y坐标。

quadraticCurveTo

由上面的参数可以看出,二次贝赛尔曲线需要两个点:第一个点用于二次贝赛尔计算中的控制点,第二个点是曲线的结束点。曲线的开始点是当前路径中最后一个点。如果路径不存在,可使用beginPath()和moveTo()方法来定义。

一个简单的二次贝赛尔曲线实例:

quadraticCurveTo

function draw(){

总结

=============================================================

从转行到现在,差不多两年的时间,虽不能和大佬相比,但也是学了很多东西。我个人在学习的过程中,习惯简单做做笔记,方便自己复习的时候能够快速理解,现在将自己的笔记分享出来,和大家共同学习。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

个人将这段时间所学的知识,分为三个阶段:

第一阶段:HTML&CSS&JavaScript基础

第二阶段:移动端开发技术

第三阶段:前端常用框架

  • 推荐学习方式:针对某个知识点,可以先简单过一下我的笔记,如果理解,那是最好,可以帮助快速解决问题;如果因为我的笔记太过简陋不理解,可以关注我以后我还会继续分享。

  • 大厂的面试难在,针对一个基础知识点,比如JS的事件循环机制,不会上来就问概念,而是换个角度,从题目入手,看你是否真正掌握。所以对于概念的理解真的很重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值