二、线条的绘制和填充

在canvas中,各个图像绘制代码可以通过beginPath()和closePath()这两个函数进行包裹,主要用于分割各个画图,表示开始和结束。线条的绘制主要调用方法是moveTo(x,y)、lineTo(x,y)、stroke()、arc()、arcTo()、fill(),使用的属性包括lineWidth、lineCap、lineJoin、strokeStyle、fillStyle等。

1、画出边角为圆角的一条线段

ctx.beginPath();
ctx.strokeStyle = "black";
ctx.lineWidth = 6;
ctx.lineCap = "round";
ctx.moveTo(400,400);
ctx.lineTo(600,400);
ctx.stroke();
ctx.closePath();

效果图为:

其中strokeStyle表示线条的颜色,lineWidth表示线条的宽度,lineCap设置线条的边缘为圆角,lineCap的属性有butt|round|square,第一个是默认值表示平直的边缘,round为圆角,square为正方的边缘。moveTo(x,y)表示划线的起点为(x,y)坐标,而lineTo(x,y)设置线条的终点为(x,y),最后通过调用stroke()方法进行绘制。

2、画出两条线段,焦点为圆角

ctx.beginPath();
ctx.strokeStyle = "black";
ctx.lineWidth = 10;
ctx.lineJoin = "round";
ctx.moveTo(400,500);
ctx.lineTo(600,500);
ctx.lineTo(600,600);
ctx.stroke();
ctx.closePath();

效果图为:

和上面的demo的不同点在于使用的属性为lineJoin,同样它也有三个属性bevel|round|miter,第一个是默认值表示斜角,而miter表示尖角。同时lineTo(x,y)可以调用多次,进行线段的绘制,所以可以通过moveTo()和lineTo()这两个方法进行多边形的绘制

3、矩形的绘制并填充颜色

ctx.beginPath();
ctx.moveTo(50,50);
ctx.lineTo(100,50);
ctx.lineTo(100,100);
ctx.lineTo(50,100);
ctx.lineTo(50,50);
ctx.lineWidth = 4;
ctx.strokeStyle = "red";
ctx.stroke();
ctx.fillStyle = "blue";
ctx.fill();
ctx.closePath();

效果图为:

通过moveTo()和lineTo()方法进行多边形的绘制后,得到了一个闭合区间,就可以调用fill()方法对其中的颜色进行填充,fillStyle则是设置闭合区间内的颜色。如果不用stroke()方法,也就是不绘制外边框的线条,则可以省去最后的那个回到起点的方法ctx.lineTo(50,50),因为fill()会自动将起点和终点进行连接得到一个闭合区间。

如果是单纯的矩形而非不规则的多变型的时候,可以直接调用canvas的api方法strokeRect(x,y,w,h)和fillRect(x,y,w,h);前两个参数表示起点的坐标,后两个表示矩形的宽度和高度。

ctx.beginPath();
ctx.lineWidth = 3;
ctx.strokeStyle = "darkgray";
ctx.strokeRect(50,50,200,100);
ctx.closePath(); ctx.beginPath();
ctx.fillStyle = "coral";
ctx.fillRect(300,50,200,100);
ctx.closePath();

效果图为:

最新文章

  1. 关于Vue vuex vux 文档
  2. linux和windows下的自动ftp脚本(shell bat)
  3. node的 thunkify模块说明
  4. AutoCad2008 部分快捷键
  5. Python处理json格式的数据文件(一些坑、一些疑惑)
  6. 【leetcode】N-Queens II
  7. 结合WebSocket编写WebGL综合场景示例
  8. RSA IOS和Java
  9. libctemplate——C语言模块引擎简介及使用
  10. 大型情感类电视连续剧--Android高德之旅(3)地图交互
  11. 利用WebBrowser彻底解决Web打印问题
  12. WEB组件 开发 (未完成 4-13)
  13. ceil与intval区别
  14. Android的搜索框SearchView的用法-android学习之旅(三十九)
  15. Jquery笔记和ajax笔记
  16. [Swift]LeetCode932. 漂亮数组 | Beautiful Array
  17. NodeJs安装步骤与淘宝镜像
  18. RobotFramework--环境安装1
  19. Spark RDD的fold和aggregate为什么是两个API?为什么不是一个foldLeft?
  20. arpg网页游戏特效播放(一)

热门文章

  1. Design Circular Deque
  2. Block Breaker HDU - 6699(深搜,水,写下涨涨记性)
  3. Numbers(CodeForces-128D)【思维/list】
  4. 用Lua的协程实现类似Unity协程的语句块
  5. MySQL - 性能优化 & MySQL常见SQL错误用法(转载)
  6. 用Activator.CreateInstance代替new实现类的实例化
  7. CentOS7 mysql支持中文
  8. 错误:The following error occurred attempting to run the DNX design time process (dnx-clr-win-x86.1.0.0-rc1-final)
  9. 【php设计模式】责任链模式
  10. footer始终在页面最底部的方法(问题待检验)