①万字《详解canvas api画图》小白前端入门教程(建议收藏)_canvasapi教程


* 得到的对象c即为**mycanvas**对象。
* 要在其中绘图还需要获得**mycanvas**对象的2d渲染上下文(**canvasRenderingContext2D**)对象:



var ctx=c.getContext(“2d”);



### 


![图片](https://img-blog.csdnimg.cn/img_convert/002823134acca58f79a472b4069082bf.png)


### canvas坐标系



canvas元素构建的画布,是一个基于**二维(x,y)的网格**。


坐标原点(0,0)位于**canvas**的左上角。


* 从原点延x轴从左到右,取值依次递增。
* 从原点延y轴从上到下,取值依次递增。


![图片](https://img-blog.csdnimg.cn/img_convert/f9ce2e94e5b3ee30d7db6ad4af3b0ede.png)




![图片](https://img-blog.csdnimg.cn/img_convert/002823134acca58f79a472b4069082bf.png)


### 绘制图形:绘制直线



在网页中使用**canvas**元素定义一个**canvas**画布,用于**绘画**




使用**JavaScript**获取网页中的**canvas**对象,并获取**canvas**对象的2d上下文



var ctx = document.getElementById(“mycanvas”).getContext(“2d”);


调用**beginPath**()方法,指示开始创建路径



ctx.beginPath();


调用**moveTo**(x, y)方法,将坐标移至起点(x,y)



ctx.moveTo(x,y);


调用**lineTo**(x, y)方法,创建直线至点(x,y)的路径



ctx.lineTo(x,y);


调用stroke()方法,绘制路径



ctx.stroke();


画一条起点为(10, 10)、终点为(50, 50)的直线。



您的浏览器不支持 canvas。



#### 使用连续画线的方法绘制一个三角形​​​​​​​



您的浏览器不支持 canvas。




![图片](https://img-blog.csdnimg.cn/img_convert/002823134acca58f79a472b4069082bf.png)


### 绘制图形:绘制矩形



使用rect()方法绘制矩形路径​​​​​​​



您的浏览器不支持 canvas。


使用**strokeRect**()方法绘制矩形路径


* 不需要使用**beginPath**()和**stroke**()即可**绘制矩形边框**



您的浏览器不支持 canvas。


使用**fillRect**()方法填充矩形


* 不需要使用**beginPath**()和**stroke**()即可绘制矩形填充



您的浏览器不支持 canvas。


使用**clearRect**()方法清除矩形​​​​​​​



您的浏览器不支持 canvas。



![图片](https://img-blog.csdnimg.cn/img_convert/002823134acca58f79a472b4069082bf.png)


### 绘制图形:绘制圆弧




arc(x, y, radius, startingAngle, endingAngle, antiClockwise);



使用**arc**()方法仅仅是**创建圆弧路径**,如需绘制路径要再使用**strock**()方法


#### 使用**arc**()方法绘制圆弧​​​​​​​



您的浏览器不支持 canvas。


#### 使用**arc**()方法画圆​​​​​​​



您的浏览器不支持 canvas。


小结:


* 路径**path**(仅有路径是不会有任何显示效果的)
* 描边**stroke**(绘制路径/绘制路径的轮廓)
* 填充**fill**(绘制路径内部)



通过设置**canvasRenderingContext2D**对象的以下属性指定描边的颜色和描边的宽度。



您的浏览器不支持 canvas。



#### 指定如何绘制线段的末端


* 通过设置**canvasRenderingContext2D**对象的**lineCap**属性可以指定线段的末端如何绘制
* **lineCap**属性只有绘制较宽线段时才有效




ctx.lineWidth = 20; ctx.strokeStyle = “red”; ctx.lineCap = “butt”; ctx.beginPath(); ctx.moveTo(10,10); ctx.lineTo(80,10); ctx.stroke(); ctx.lineCap = “round”; ctx.beginPath(); ctx.moveTo(10,40); ctx.lineTo(80,40); ctx.stroke(); ctx.lineCap = “square”; ctx.beginPath(); ctx.moveTo(10,70); ctx.lineTo(80,70); ctx.stroke();




![图片](https://img-blog.csdnimg.cn/img_convert/002823134acca58f79a472b4069082bf.png)


### **画一个正六边形**



思路提示:一个六边形是由六根直线组合的,那么可以通过计算坐标,把直线连接起来,就是六条直线合起来的正六边形啦


​​​​​​​



您的浏览器不支持 canvas。

ctx.beginPath(); // 开始创建路径 ctx.moveTo(80,80); // 创建路径的起点 ctx.lineTo(160,80); // 添加路径中的一个点 ctx.stroke(); // 绘制路径

ctx.moveTo(156,80);  // 创建路径的起点  ctx.lineTo(196,149.5); // 添加路径中的一个点    ctx.stroke();  // 绘制路径

ctx.moveTo(196,147);  // 创建路径的起点  ctx.lineTo(156,219); // 添加路径中的一个点    ctx.stroke();  // 绘制路径

ctx.moveTo(160,219);  // 创建路径的起点  ctx.lineTo(80,219); // 添加路径中的一个点    ctx.stroke();  // 绘制路径

ctx.moveTo(84,219);  // 创建路径的起点  ctx.lineTo(44,147); // 添加路径中的一个点    ctx.stroke();  // 绘制路径

ctx.moveTo(44,149.5);  // 创建路径的起点  ctx.lineTo(84,80); // 添加路径中的一个点    ctx.stroke();  // 绘制路径  }  window.addEventListener("load", drawline, false);//页面加载时触发drawline函数画直线</script>


### **画一个笑脸**



![图片](https://img-blog.csdnimg.cn/img_convert/a5f0852dade52b2a95ff692520bd0693.png)



您的浏览器不支持 canvas。

ctx.beginPath();  //  开始创建路径 ctx.arc(250, 250, 100, 0, 2 * Math.PI, false);   ctx.fillStyle = “yellow”;  ctx.fill(); ctx.stroke(); // 绘制路径

ctx.beginPath();  //  开始创建路径 ctx.arc(200, 200, 10, 0, 2 * Math.PI, false);   ctx.fillStyle = “gray”;  ctx.fill(); ctx.stroke(); // 绘制路径

ctx.beginPath();  //  开始创建路径 ctx.arc(300, 200, 10, 0, 2 * Math.PI, false);   ctx.fillStyle = “gray”;  ctx.fill();  ctx.stroke();  // 绘制路径  
  ctx.beginPath();  //  开始创建路径 ctx.arc(250, 280, 40,0.8* Math.PI, 0.2* Math.PI, true);   ctx.stroke();  // 绘制路径 } window.addEventListener(“load”, drawArc, true);


### `送书活动`


#### 参与方式一:


点赞、收藏、评论本文,即可直接参与,3天内会公布抽奖信息和联系你。


#### 参与方式二:


关注「信息技术智库」回复「送书」


![](https://img-blog.csdnimg.cn/935be6f8ea3d49b4adeafb6c27c5cd2a.png)





### 给大家的福利


**零基础入门**


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)


同时每个成长路线对应的板块都有配套的视频提供:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)


因篇幅有限,仅展示部分资料

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值