beginPath

绘制路径必须添加 beginPath()。它标志着一个画笔在画布中哪个地方开始画起。没有它,新起的画笔位置必定与上一次画笔结束的位置相连。

// 第一个半圆
ctx.arc(60, 80, 50, 0, Math.PI, true);
ctx.fillStyle = 'gold';
ctx.fill();
ctx.strokeStyle = 'red';
ctx.stroke(); // 第二个半圆
ctx.arc(240, 200, 50, 0, Math.PI, false);
ctx.fillStyle = 'gold';
ctx.fill();
ctx.strokeStyle = 'green';
ctx.stroke();

可以看到半圆的两个端点与另一个半圆的两个端点互连起来了,如果不用 beginPath(),画布就无法确定画笔新的起始点在哪里,默认就连起来绘制路径。就好像是我们写连笔字一样,笔画与笔画之间相连不断。

当我们在每一个新的画笔开始前写上 beginPath() 函数后,最终效果如下图:

closePath

一般情况下,beginPath() 和 closePath() 是搭配使用的,就是说,画笔从开始绘制路径结束之后,画笔回到起始点。就像是我们用完一件物品之后,要把它换回到原来的地方一样。

利用 closePath(),我们可以用绘制一个三角形:

ctx.beginPath();
ctx.moveTo(20, 20);
ctx.lineTo(100, 140);
ctx.lineTo(20, 140);
ctx.closePath(); // 画笔置于起始位置,(20, 20)
ctx.stroke();

其实也可以不用 closePath() 把画笔置于起始位置,可以用 ctx.lineTo(20, 20); 继续把路径延续下去。也就是说,closePath() 在路径中可以被省略。

stroke

stroke() 函数也是绘制路径的关键,图形的绘制由它来完成,在此之前我们要确定好路径的起始坐标以及结束坐标即可。

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

因为没有调用 stroke() 函数完成路径的绘制,所以画布中什么图形都没有出现:

补全这个关键的函数之后,画布出现了圆形:

最新文章

  1. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
  2. jQuery源码分析系列(39) : 动画队列
  3. rqnoj28[stupid]愚蠢的宠物
  4. spark RDD transformation与action函数整理
  5. C# is 强制转换
  6. c++空指针调用类成员函数
  7. echarts_部分图表配置_dataZoom精确控制显示数据数量
  8. Java 编程思想 Chapter_14 类型信息
  9. C#使用Socket实现一个socket服务器与多个socket客户端通信
  10. Pycharm数据库连接错误
  11. 一键分享代码(提供能分享到QQ空间、新浪微博、人人网等的分享功能)
  12. redis 安装启动
  13. 简单的自定义ViewGroup
  14. volatile 关键字了解与使用
  15. rls与rlsd
  16. 性能测试之mysql监控、优化
  17. Revit手工创建族
  18. 【刷题】BZOJ 2588 Spoj 10628. Count on a tree
  19. Winafl学习笔记
  20. LoadRunner参数化取值与连接数据库

热门文章

  1. 低代码前景可期,JNPF灵活易用,用智能定义新型办公模式
  2. 点亮Arduino内置的LED灯
  3. Redis 中的原子操作(3)-使用Redis实现分布式锁
  4. Centos使用crontab自动定时备份mysql的脚本
  5. ASP.NET MVC之读取服务器文件资源的两种方式
  6. VisionPro · C# · 图像显示十字光标
  7. Windows 通过本地计算机IP链接Mysql设置
  8. cup缓存基础知识
  9. CentOS7 No rule to make target
  10. Oracle,SAP等暂停俄所有业务,国产化刻不容缓,无代码又该如何发力